From aa8768fbe3bb5aa244f435b7ff90863cb289dd7a Mon Sep 17 00:00:00 2001 From: Iraq Jaber Date: Mon, 11 Aug 2025 08:36:19 +0100 Subject: [PATCH] fixup! fixup! fix(projections): added check to make sure there cannot be 2 projections for the same table --- internal/query/projection/mock.go | 3 + internal/query/projection/projection_test.go | 70 ++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 internal/query/projection/mock.go create mode 100644 internal/query/projection/projection_test.go diff --git a/internal/query/projection/mock.go b/internal/query/projection/mock.go new file mode 100644 index 0000000000..88cb350b9d --- /dev/null +++ b/internal/query/projection/mock.go @@ -0,0 +1,3 @@ +package projection + +//go:generate mockgen -source projection.go -destination ./projection_mock.go -package projection diff --git a/internal/query/projection/projection_test.go b/internal/query/projection/projection_test.go new file mode 100644 index 0000000000..da3e15b624 --- /dev/null +++ b/internal/query/projection/projection_test.go @@ -0,0 +1,70 @@ +package projection + +import ( + "fmt" + "testing" + + "github.com/brianvoe/gofakeit/v6" + "github.com/stretchr/testify/require" + gomock "go.uber.org/mock/gomock" +) + +func TestStart(t *testing.T) { + duplicateName := gofakeit.Name() + tests := []struct { + name string + projections func(t *testing.T) []projection + err error + }{ + { + name: "happy path", + projections: func(t *testing.T) []projection { + ctrl := gomock.NewController(t) + projections := make([]projection, 5, 5) + + for i := range 5 { + mock := NewMockprojection(ctrl) + mock.EXPECT().Start(gomock.Any()) + mock.EXPECT().String().Return(gofakeit.Name()) + projections[i] = mock + } + + return projections + }, + }, + { + name: "same projection used twice error", + projections: func(t *testing.T) []projection { + projections := make([]projection, 5, 5) + + ctrl := gomock.NewController(t) + mock := NewMockprojection(ctrl) + mock.EXPECT().String().Return(duplicateName) + mock.EXPECT().Start(gomock.Any()) + projections[0] = mock + + for i := 1; i < 4; i++ { + mock := NewMockprojection(ctrl) + mock.EXPECT().String().Return(gofakeit.Name()) + mock.EXPECT().Start(gomock.Any()) + projections[i] = mock + } + + mock = NewMockprojection(ctrl) + mock.EXPECT().String().Return(duplicateName) + mock.EXPECT().Start(gomock.Any()) + projections[4] = mock + + return projections + }, + err: fmt.Errorf("projeciton for %s already added", duplicateName), + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + projections = tt.projections(t) + err := Start(t.Context()) + require.Equal(t, tt.err, err) + }) + } +}