stonecqrs/dispatcher_test.go
Rene Nochebuena 068ea278fa
All checks were successful
Go CI/CD / go-ci (push) Successful in 19m8s
Release v1.0.0 (#2)
Reviewed-on: #2
Reviewed-by: Cloud Administrator <cloud-admin@noreply.gitstormr.dev>
Co-authored-by: Rene Nochebuena <code-raider@noreply.gitstormr.dev>
Co-committed-by: Rene Nochebuena <code-raider@noreply.gitstormr.dev>
2025-04-13 09:55:45 -06:00

171 lines
3.6 KiB
Go

package stonecqrs
import (
"context"
"errors"
"fmt"
"testing"
)
type testCommand struct {
message string
}
type testQuery struct {
message string
}
type testEvent struct {
message string
}
type unknownEvent struct{}
type testCommandHandler struct{}
func (handler *testCommandHandler) Handle(
ctx context.Context, cmd Command,
) ([]Event, error) {
fmt.Println(cmd)
return []Event{
testEvent{message: "test"},
}, nil
}
type testQueryHandler struct{}
func (handler *testQueryHandler) Handle(
ctx context.Context, query Query,
) (interface{}, error) {
fmt.Println(query)
return "test", nil
}
type testEventHandler struct{}
func (handler *testEventHandler) Handle(
ctx context.Context, event Event,
) error {
fmt.Println(event)
return nil
}
type testErrorHandler struct{}
func (handler *testErrorHandler) Handle(
ctx context.Context, cmd Command,
) ([]Event, error) {
return nil, errors.New("test error")
}
type testErrorQueryHandler struct{}
func (handler *testErrorQueryHandler) Handle(
ctx context.Context, query Query,
) (interface{}, error) {
return nil, errors.New("test error")
}
type testErrorEventHandler struct{}
func (handler *testErrorEventHandler) Handle(
ctx context.Context, event Event,
) error {
return errors.New("test error")
}
func Test_NewDispatcher(t *testing.T) {
d := NewDispatcher()
if d == nil {
t.Fatal("expected non-nil dispatcher")
}
}
func Test_Register(t *testing.T) {
d := NewDispatcher()
d.RegisterCommandHandler(testCommand{}, &testCommandHandler{})
d.RegisterQueryHandler(testQuery{}, &testQueryHandler{})
d.RegisterEventHandler(testEvent{}, &testEventHandler{})
}
func Test_DispatchCommandWithEvents(t *testing.T) {
d := NewDispatcher()
d.RegisterCommandHandler(testCommand{}, &testCommandHandler{})
d.RegisterQueryHandler(testQuery{}, &testQueryHandler{})
d.RegisterEventHandler(testEvent{}, &testEventHandler{})
_, err := d.DispatchCommand(context.Background(), testCommand{})
if err != nil {
t.Fatal(err)
}
}
func Test_DispatchQuery(t *testing.T) {
d := NewDispatcher()
d.RegisterQueryHandler(testQuery{}, &testQueryHandler{})
_, err := d.DispatchQuery(context.Background(), testQuery{})
if err != nil {
t.Fatal(err)
}
}
func Test_UnknownEvent(t *testing.T) {
d := NewDispatcher()
d.RegisterCommandHandler(testCommand{}, &testCommandHandler{})
d.RegisterQueryHandler(testQuery{}, &testQueryHandler{})
d.RegisterEventHandler(testEvent{}, &testEventHandler{})
_, err := d.DispatchCommand(context.Background(), unknownEvent{})
if err == nil {
t.Fatal("expected error")
}
_, err = d.DispatchQuery(context.Background(), unknownEvent{})
if err == nil {
t.Fatal("expected error")
}
err = d.DispatchEvent(context.Background(), unknownEvent{})
if err == nil {
t.Fatal("expected error")
}
}
func Test_DispatchEventWithError(t *testing.T) {
d := NewDispatcher()
d.RegisterCommandHandler(testCommand{}, &testCommandHandler{})
d.RegisterEventHandler(testEvent{}, &testErrorEventHandler{})
err := d.DispatchEvent(context.Background(), testEvent{})
if err == nil {
t.Fatal("expected error")
}
}
func Test_Error(t *testing.T) {
d := NewDispatcher()
d.RegisterCommandHandler(testCommand{}, &testErrorHandler{})
d.RegisterQueryHandler(testQuery{}, &testErrorQueryHandler{})
d.RegisterEventHandler(testEvent{}, &testErrorEventHandler{})
_, err := d.DispatchCommand(context.Background(), testCommand{})
if err == nil {
t.Fatal("expected error")
}
_, err = d.DispatchQuery(context.Background(), testQuery{})
if err == nil {
t.Fatal("expected error")
}
err = d.DispatchEvent(context.Background(), testEvent{})
if err == nil {
t.Fatal("expected error")
}
}