From 975761af2fea70d475e4b456f5ce4ff5b2b579e7 Mon Sep 17 00:00:00 2001 From: Niko Abeler Date: Wed, 9 Aug 2023 21:44:29 +0200 Subject: [PATCH] test for interaction repo --- infra/interaction_repository_test.go | 125 +++++++++++++++++++++++++++ test/mock_interaction.go | 32 +++++++ 2 files changed, 157 insertions(+) create mode 100644 infra/interaction_repository_test.go create mode 100644 test/mock_interaction.go diff --git a/infra/interaction_repository_test.go b/infra/interaction_repository_test.go new file mode 100644 index 0000000..0dcbfc2 --- /dev/null +++ b/infra/interaction_repository_test.go @@ -0,0 +1,125 @@ +package infra_test + +import ( + "owl-blogs/app" + "owl-blogs/app/repository" + "owl-blogs/infra" + "owl-blogs/test" + "testing" + + "github.com/stretchr/testify/require" +) + +func setupInteractionRepo() repository.InteractionRepository { + db := test.NewMockDb() + register := app.NewInteractionTypeRegistry() + register.Register(&test.MockInteraction{}) + repo := infra.NewInteractionRepo(db, register) + return repo +} + +func TestCreateInteraction(t *testing.T) { + repo := setupInteractionRepo() + i := &test.MockInteraction{} + i.SetMetaData(&test.MockInteractionMetaData{ + Str: "str", + Number: 1, + }) + i.SetEntryID("entryId") + err := repo.Create(i) + require.NoError(t, err) + require.NotEmpty(t, i.ID()) +} + +func TestFindInteractionById(t *testing.T) { + + repo := setupInteractionRepo() + i := &test.MockInteraction{} + i.SetMetaData(&test.MockInteractionMetaData{ + Str: "str", + Number: 1, + }) + i.SetEntryID("entryId") + err := repo.Create(i) + require.NoError(t, err) + + i2, err := repo.FindById(i.ID()) + require.NoError(t, err) + require.Equal(t, i.ID(), i2.ID()) + require.Equal(t, i.Content(), i2.Content()) + meta := i.MetaData().(*test.MockInteractionMetaData) + meta2 := i2.MetaData().(*test.MockInteractionMetaData) + require.Equal(t, meta.Str, meta2.Str) + require.Equal(t, meta.Number, meta2.Number) + require.Equal(t, i2.EntryID(), "entryId") +} + +func TestFindInteractionByEntryId(t *testing.T) { + repo := setupInteractionRepo() + i := &test.MockInteraction{} + i.SetMetaData(&test.MockInteractionMetaData{ + Str: "str", + Number: 1, + }) + i.SetEntryID("entryId") + err := repo.Create(i) + require.NoError(t, err) + + i2 := &test.MockInteraction{} + i2.SetMetaData(&test.MockInteractionMetaData{ + Str: "str", + Number: 1, + }) + i2.SetEntryID("entryId2") + err = repo.Create(i2) + require.NoError(t, err) + + inters, err := repo.FindAll("entryId") + require.NoError(t, err) + require.Equal(t, 1, len(inters)) +} + +func TestUpdateInteraction(t *testing.T) { + repo := setupInteractionRepo() + i := &test.MockInteraction{} + i.SetMetaData(&test.MockInteractionMetaData{ + Str: "str", + Number: 1, + }) + i.SetEntryID("entryId") + err := repo.Create(i) + require.NoError(t, err) + + i.SetMetaData(&test.MockInteractionMetaData{ + Str: "str2", + Number: 2, + }) + err = repo.Update(i) + require.NoError(t, err) + + i2, err := repo.FindById(i.ID()) + require.NoError(t, err) + meta := i.MetaData().(*test.MockInteractionMetaData) + meta2 := i2.MetaData().(*test.MockInteractionMetaData) + require.Equal(t, meta.Str, meta2.Str) + require.Equal(t, meta.Number, meta2.Number) +} + +func TestDeleteInteraction(t *testing.T) { + repo := setupInteractionRepo() + i := &test.MockInteraction{} + i.SetMetaData(&test.MockInteractionMetaData{ + Str: "str", + Number: 1, + }) + i.SetEntryID("entryId") + err := repo.Create(i) + require.NoError(t, err) + + err = repo.Delete(i) + require.NoError(t, err) + + i2, err := repo.FindById(i.ID()) + require.Error(t, err) + require.Nil(t, i2) +} diff --git a/test/mock_interaction.go b/test/mock_interaction.go new file mode 100644 index 0000000..3984791 --- /dev/null +++ b/test/mock_interaction.go @@ -0,0 +1,32 @@ +package test + +import ( + "owl-blogs/domain/model" + "time" +) + +type MockInteractionMetaData struct { + Str string + Number int + Date time.Time +} + +type MockInteraction struct { + model.InteractionBase + metaData *MockInteractionMetaData +} + +// Content implements model.Interaction. +func (*MockInteraction) Content() model.InteractionContent { + return "" +} + +// MetaData implements model.Interaction. +func (i *MockInteraction) MetaData() interface{} { + return i.metaData +} + +// SetMetaData implements model.Interaction. +func (i *MockInteraction) SetMetaData(metaData interface{}) { + i.metaData = metaData.(*MockInteractionMetaData) +}