From 43824af97c15f1a08fb101c2d528966d596adac3 Mon Sep 17 00:00:00 2001 From: Eden Kirin Date: Wed, 26 Jun 2024 11:41:01 +0200 Subject: [PATCH] Tests --- app/repository/method_delete_test.go | 73 ++++++++++++++++++++++++++++ app/repository/method_list_test.go | 6 +-- 2 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 app/repository/method_delete_test.go diff --git a/app/repository/method_delete_test.go b/app/repository/method_delete_test.go new file mode 100644 index 0000000..ef1234f --- /dev/null +++ b/app/repository/method_delete_test.go @@ -0,0 +1,73 @@ +package repository + +import ( + "fmt" + "regexp" + "testing" + + "github.com/DATA-DOG/go-sqlmock" + "github.com/google/uuid" + "github.com/stretchr/testify/assert" +) + +func TestDeleteMethod(t *testing.T) { + t.Run("With filter", func(t *testing.T) { + sqldb, db, mock := NewMockDB() + defer sqldb.Close() + + repo := RepoBase[MyModel]{} + repo.Init(db, nil) + + id := uuid.New() + filter := MyModelFilter{ + Id: &id, + } + + sql := "DELETE FROM my_models WHERE my_models.id = $1" + mock.ExpectBegin() + mock.ExpectExec(fmt.Sprintf("^%s$", regexp.QuoteMeta(sql))). + WithArgs(id). + WillReturnResult(sqlmock.NewResult(1, 111)) + mock.ExpectCommit() + + deleted, err := repo.Delete(filter) + assert.Equal(t, int64(111), deleted) + assert.Nil(t, err) + + if err := mock.ExpectationsWereMet(); err != nil { + t.Errorf("there were unfulfilled expectations: %s", err) + } + }) + + t.Run("With multiple filters", func(t *testing.T) { + sqldb, db, mock := NewMockDB() + defer sqldb.Close() + + repo := RepoBase[MyModel]{} + repo.Init(db, nil) + + id1 := uuid.New() + id2 := uuid.New() + id3 := uuid.New() + cnt := 3456 + filter := MyModelFilter{ + Ids: &[]uuid.UUID{id1, id2, id3}, + CntGT: &cnt, + } + + sql := "DELETE FROM my_models WHERE my_models.id IN ($1,$2,$3) AND my_models.cnt > $4" + mock.ExpectBegin() + mock.ExpectExec(fmt.Sprintf("^%s$", regexp.QuoteMeta(sql))). + WithArgs(id1, id2, id3, cnt). + WillReturnResult(sqlmock.NewResult(1, 123)) + mock.ExpectCommit() + + deleted, err := repo.Delete(filter) + assert.Equal(t, int64(123), deleted) + assert.Nil(t, err) + + if err := mock.ExpectationsWereMet(); err != nil { + t.Errorf("there were unfulfilled expectations: %s", err) + } + }) +} diff --git a/app/repository/method_list_test.go b/app/repository/method_list_test.go index 52a4c32..16b1195 100644 --- a/app/repository/method_list_test.go +++ b/app/repository/method_list_test.go @@ -46,7 +46,7 @@ type MyModelFilter struct { Id *uuid.UUID `filterfield:"field=id,operator=EQ"` Ids *[]uuid.UUID `filterfield:"field=id,operator=IN"` Value *string `filterfield:"field=value,operator=EQ"` - Cnt *int `filterfield:"field=cnt,operator=GT"` + CntGT *int `filterfield:"field=cnt,operator=GT"` } func TestListMethod(t *testing.T) { @@ -198,7 +198,7 @@ func TestListMethod(t *testing.T) { filter := MyModelFilter{ Id: &id, Value: &value, - Cnt: &count, + CntGT: &count, } sql := "SELECT * FROM my_models WHERE my_models.id = $1 AND my_models.value = $2 AND my_models.cnt > $3" @@ -226,7 +226,7 @@ func TestListMethod(t *testing.T) { filter := MyModelFilter{ Id: &id, Value: &value, - Cnt: &count, + CntGT: &count, } options := ListOptions{ Pagination: &Pagination{