69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
package middleware_test
|
|
|
|
import (
|
|
"github.com/ThreeDotsLabs/watermill"
|
|
"github.com/ThreeDotsLabs/watermill/message"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type mockPublisherBehaviour int
|
|
|
|
const (
|
|
BehaviourAlwaysOK mockPublisherBehaviour = iota + 1
|
|
BehaviourAlwaysFail
|
|
BehaviourAlwaysPanic
|
|
)
|
|
|
|
var (
|
|
errClosed = errors.New("closed")
|
|
errFailed = errors.New("failed")
|
|
errPanicked = errors.New("panicked")
|
|
)
|
|
|
|
type mockPublisher struct {
|
|
behaviour mockPublisherBehaviour
|
|
closed bool
|
|
|
|
produced []*message.Message
|
|
}
|
|
|
|
func (mp *mockPublisher) Publish(topic string, messages ...*message.Message) error {
|
|
if mp.closed {
|
|
return errClosed
|
|
}
|
|
|
|
switch mp.behaviour {
|
|
case BehaviourAlwaysOK:
|
|
case BehaviourAlwaysFail:
|
|
return errFailed
|
|
case BehaviourAlwaysPanic:
|
|
panic(errPanicked)
|
|
}
|
|
|
|
mp.produced = append(mp.produced, messages...)
|
|
return nil
|
|
}
|
|
|
|
func (mp *mockPublisher) Close() error {
|
|
mp.closed = true
|
|
return nil
|
|
}
|
|
|
|
func (mp *mockPublisher) PopMessages() []*message.Message {
|
|
defer func() { mp.produced = []*message.Message{} }()
|
|
return mp.produced
|
|
}
|
|
|
|
var handlerFuncAlwaysOKMessages = []*message.Message{
|
|
message.NewMessage(watermill.NewUUID(), nil),
|
|
message.NewMessage(watermill.NewUUID(), nil),
|
|
}
|
|
|
|
func handlerFuncAlwaysOK(*message.Message) ([]*message.Message, error) {
|
|
return handlerFuncAlwaysOKMessages, nil
|
|
}
|
|
|
|
func handlerFuncAlwaysFailing(*message.Message) ([]*message.Message, error) {
|
|
return nil, errFailed
|
|
}
|