This repository has been archived on 2024-04-06. You can view files and clone it, but cannot push or open issues or pull requests.
core-old/internal/msg/msg_test.go
Dawid Wysokiński 5e9399a3d0
All checks were successful
continuous-integration/drone/push Build is passing
feat: add EnnoblementConsumer (#38)
Reviewed-on: twhelp/core#38
2022-08-21 05:19:17 +00:00

77 lines
1.6 KiB
Go

package msg_test
import (
"context"
"testing"
"github.com/ThreeDotsLabs/watermill/pubsub/gochannel"
"github.com/ThreeDotsLabs/watermill"
"github.com/ThreeDotsLabs/watermill/message"
"github.com/stretchr/testify/require"
)
type registerer interface {
Register(router *message.Router)
}
func runRouter(tb testing.TB, rs ...registerer) *message.Router {
tb.Helper()
router, err := message.NewRouter(message.RouterConfig{}, watermill.NopLogger{})
require.NoError(tb, err)
tb.Cleanup(func() {
_ = router.Close()
})
for _, r := range rs {
r.Register(router)
}
go func() {
require.NoError(tb, router.Run(context.Background()))
}()
<-router.Running()
return router
}
func newPubSub(tb testing.TB) *gochannel.GoChannel {
tb.Helper()
pubSub := gochannel.NewGoChannel(gochannel.Config{Persistent: true}, watermill.NopLogger{})
tb.Cleanup(func() {
_ = pubSub.Close()
})
return pubSub
}
type middlewareRegisterer struct {
h message.HandlerMiddleware
}
var _ registerer = middlewareRegisterer{}
func (m middlewareRegisterer) Register(router *message.Router) {
router.AddMiddleware(m.h)
}
func newWaitForHandlerMiddleware(handlerName string) (middlewareRegisterer, <-chan struct{}) {
ch := make(chan struct{})
return middlewareRegisterer{
h: func(h message.HandlerFunc) message.HandlerFunc {
return func(msg *message.Message) ([]*message.Message, error) {
if message.HandlerNameFromCtx(msg.Context()) != handlerName {
return h(msg)
}
result, err := h(msg)
if len(result) == 0 && err == nil {
close(ch)
}
return result, err
}
},
}, ch
}