Files
upstream-watermill/message/router/middleware/message_test.go
2026-09-15 21:27:46 +05:00

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
}