-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreceiver_mock.go
75 lines (62 loc) · 1.93 KB
/
receiver_mock.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package mediator
import (
"context"
"reflect"
)
type mockreceiver[TData any] struct {
received []TData
validate func(context.Context, TData) error
execute func(context.Context, TData) error
}
func MockReceiver[TData any]() (*mockreceiver[TData], *reg) {
return MockReceiverReturningError[TData](nil)
}
func MockReceiverWithFunc[TData any](executor ReceiverFunc[TData]) (*mockreceiver[TData], *reg) {
h := &mockreceiver[TData]{execute: executor}
r := RegisterReceiver[TData](h)
return h, r
}
func MockReceiverWithValidator[TData any](executor ReceiverFunc[TData], validator ValidatorFunc[TData]) (*mockreceiver[TData], *reg) {
h := &mockreceiver[TData]{
execute: executor,
validate: validator,
}
r := RegisterReceiver[TData](h)
return h, r
}
func MockReceiverReturningError[TData any](err error) (*mockreceiver[TData], *reg) {
return MockReceiverWithFunc(func(context.Context, TData) error { return err })
}
func MockReceiverWithValidatorError[TData any](err error) (*mockreceiver[TData], *reg) {
return MockReceiverWithValidator(
func(context.Context, TData) error { return nil },
func(context.Context, TData) error { return err },
)
}
func (mock *mockreceiver[TData]) Execute(ctx context.Context, request TData) error {
mock.received = append(mock.received, request)
return mock.execute(ctx, request)
}
func (mock *mockreceiver[TData]) Validate(ctx context.Context, request TData) error {
if mock.validate != nil {
return mock.validate(ctx, request)
}
return nil
}
func (mock *mockreceiver[TData]) Received(data TData) bool {
for _, received := range mock.received {
if reflect.DeepEqual(received, data) {
return true
}
}
return false
}
func (mock *mockreceiver[TData]) DataReceived() []TData {
return append([]TData{}, mock.received...)
}
func (mock *mockreceiver[TData]) WasCalled() bool {
return len(mock.received) > 0
}
func (mock *mockreceiver[TData]) WasNotCalled() bool {
return len(mock.received) == 0
}