snapshot of https://github.com/ThreeDotsLabs/watermill.git (master, 2026-09-15; blobs > 131072B omitted)
Some checks failed
master / ci (push) Failing after 0s
Some checks failed
master / ci (push) Failing after 0s
This commit is contained in:
114
components/cqrs/marshaler_protobuf_test.go
Normal file
114
components/cqrs/marshaler_protobuf_test.go
Normal file
@@ -0,0 +1,114 @@
|
||||
package cqrs_test
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
|
||||
"github.com/ThreeDotsLabs/watermill"
|
||||
"github.com/ThreeDotsLabs/watermill/components/cqrs"
|
||||
)
|
||||
|
||||
func TestProtoMarshaler(t *testing.T) {
|
||||
assertProtoMarshalUnmarshal(
|
||||
t,
|
||||
cqrs.ProtoMarshaler{},
|
||||
cqrs.ProtoMarshaler{},
|
||||
newProtoTestComplexEvent(),
|
||||
&TestComplexProtobufEvent{},
|
||||
"cqrs_test.TestComplexProtobufEvent",
|
||||
)
|
||||
}
|
||||
|
||||
func TestProtoMarshaler_Marshal_generated_name(t *testing.T) {
|
||||
marshaler := cqrs.ProtoMarshaler{
|
||||
NewUUID: func() string {
|
||||
return "foo"
|
||||
},
|
||||
}
|
||||
|
||||
msg, err := marshaler.Marshal(newProtoTestComplexEvent())
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, msg.UUID, "foo")
|
||||
}
|
||||
|
||||
// newProtoLegacyTestEvent returns the same event in two different protobuf versions
|
||||
func newProtoLegacyTestEvent() (*TestProtobufEvent, *TestProtobufLegacyEvent) {
|
||||
when := timestamppb.New(time.Now())
|
||||
id := watermill.NewULID()
|
||||
|
||||
legacy := &TestProtobufEvent{
|
||||
Id: id,
|
||||
When: when,
|
||||
}
|
||||
|
||||
regenerated := &TestProtobufLegacyEvent{
|
||||
Id: id,
|
||||
When: when,
|
||||
}
|
||||
|
||||
return legacy, regenerated
|
||||
}
|
||||
|
||||
func newProtoTestComplexEvent() *TestComplexProtobufEvent {
|
||||
when := timestamppb.New(time.Now())
|
||||
|
||||
eventToMarshal := &TestComplexProtobufEvent{
|
||||
Id: watermill.NewULID(),
|
||||
Data: []byte("data"),
|
||||
When: when,
|
||||
NestedMap: map[string]*SubEvent{
|
||||
"foo": {
|
||||
Tags: []string{"tag1", "tag2"},
|
||||
Flags: map[string]bool{"flag1": true, "flag2": false},
|
||||
},
|
||||
},
|
||||
Events: []*SubEvent{
|
||||
{
|
||||
Tags: []string{"tag1", "tag2"},
|
||||
},
|
||||
{
|
||||
Tags: []string{"tag3", "tag4"},
|
||||
},
|
||||
},
|
||||
Result: &TestComplexProtobufEvent_Success{
|
||||
Success: &SubEvent{
|
||||
Tags: []string{"tag10"},
|
||||
Flags: map[string]bool{"flag10": true},
|
||||
},
|
||||
},
|
||||
}
|
||||
return eventToMarshal
|
||||
}
|
||||
|
||||
func assertProtoMarshalUnmarshal[T1, T2 fmt.Stringer](
|
||||
t *testing.T,
|
||||
marshaler cqrs.CommandEventMarshaler,
|
||||
unmarshaler cqrs.CommandEventMarshaler,
|
||||
eventToMarshal T1,
|
||||
eventToUnmarshal T2,
|
||||
expectedEventName string,
|
||||
) {
|
||||
t.Helper()
|
||||
|
||||
msg, err := marshaler.Marshal(eventToMarshal)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = unmarshaler.Unmarshal(msg, eventToUnmarshal)
|
||||
require.NoError(t, err)
|
||||
|
||||
eventToMarshalJson, err := json.Marshal(eventToMarshal)
|
||||
require.NoError(t, err)
|
||||
|
||||
eventToUnmarshalJson, err := json.Marshal(eventToUnmarshal)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.JSONEq(t, string(eventToMarshalJson), string(eventToUnmarshalJson))
|
||||
assert.Equal(t, expectedEventName, msg.Metadata.Get("name"))
|
||||
}
|
||||
Reference in New Issue
Block a user