github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/domain/systemssync/repository_test.go (about) 1 package systemssync_test 2 3 import ( 4 "context" 5 "regexp" 6 "testing" 7 8 "github.com/DATA-DOG/go-sqlmock" 9 "github.com/kyma-incubator/compass/components/director/internal/domain/systemssync" 10 "github.com/kyma-incubator/compass/components/director/internal/domain/systemssync/automock" 11 "github.com/kyma-incubator/compass/components/director/internal/repo/testdb" 12 "github.com/kyma-incubator/compass/components/director/pkg/persistence" 13 "github.com/stretchr/testify/assert" 14 "github.com/stretchr/testify/require" 15 ) 16 17 func TestRepository_List(t *testing.T) { 18 systemsSyncEntity := fixSystemsSyncEntity(syncID, syncTenantID, syncProductID, lastSyncTime) 19 systemsSyncModel := fixSystemsSyncModel(syncID, syncTenantID, syncProductID, lastSyncTime) 20 21 suite := testdb.RepoListTestSuite{ 22 Name: "List all systems synchronization timestamps", 23 SQLQueryDetails: []testdb.SQLQueryDetails{ 24 { 25 Query: regexp.QuoteMeta(`SELECT id, tenant_id, product_id, last_sync_timestamp FROM public.systems_sync_timestamps`), 26 IsSelect: true, 27 ValidRowsProvider: func() []*sqlmock.Rows { 28 return []*sqlmock.Rows{ 29 sqlmock.NewRows(fixSystemsSyncTimestampsColumns()).AddRow(systemsSyncEntity.ID, systemsSyncEntity.TenantID, systemsSyncEntity.ProductID, systemsSyncEntity.LastSyncTimestamp), 30 } 31 }, 32 InvalidRowsProvider: func() []*sqlmock.Rows { 33 return []*sqlmock.Rows{sqlmock.NewRows(fixSystemsSyncTimestampsColumns())} 34 }, 35 }, 36 }, 37 ConverterMockProvider: func() testdb.Mock { 38 return &automock.EntityConverter{} 39 }, 40 RepoConstructorFunc: systemssync.NewRepository, 41 ExpectedDBEntities: []interface{}{systemsSyncEntity}, 42 ExpectedModelEntities: []interface{}{systemsSyncModel}, 43 MethodName: "List", 44 DisableConverterErrorTest: true, 45 } 46 47 suite.Run(t) 48 } 49 50 func TestRepository_Upsert(t *testing.T) { 51 t.Run("Success", func(t *testing.T) { 52 // GIVEN 53 systemsSyncEntity := fixSystemsSyncEntity(syncID, syncTenantID, syncProductID, lastSyncTime) 54 systemsSyncModel := fixSystemsSyncModel(syncID, syncTenantID, syncProductID, lastSyncTime) 55 56 mockConverter := &automock.EntityConverter{} 57 defer mockConverter.AssertExpectations(t) 58 59 mockConverter.On("ToEntity", systemsSyncModel).Return(systemsSyncEntity).Once() 60 61 db, dbMock := testdb.MockDatabase(t) 62 defer dbMock.AssertExpectations(t) 63 64 dbMock.ExpectExec(regexp.QuoteMeta(`INSERT INTO public.systems_sync_timestamps ( id, tenant_id, product_id, last_sync_timestamp ) VALUES ( ?, ?, ?, ? ) ON CONFLICT ( id ) DO UPDATE SET tenant_id=EXCLUDED.tenant_id, product_id=EXCLUDED.product_id, last_sync_timestamp=EXCLUDED.last_sync_timestamp`)). 65 WithArgs(fixSystemsSyncCreateArgs(*systemsSyncEntity)...). 66 WillReturnResult(sqlmock.NewResult(1, 1)) 67 68 ctx := persistence.SaveToContext(context.TODO(), db) 69 systemsSyncRepo := systemssync.NewRepository(mockConverter) 70 71 // WHEN 72 err := systemsSyncRepo.Upsert(ctx, systemsSyncModel) 73 74 // THEN 75 require.NoError(t, err) 76 }) 77 78 t.Run("Error when upserting system sync timestamp", func(t *testing.T) { 79 // GIVEN 80 systemsSyncEntity := fixSystemsSyncEntity(syncID, syncTenantID, syncProductID, lastSyncTime) 81 systemsSyncModel := fixSystemsSyncModel(syncID, syncTenantID, syncProductID, lastSyncTime) 82 83 mockConverter := &automock.EntityConverter{} 84 defer mockConverter.AssertExpectations(t) 85 86 mockConverter.On("ToEntity", systemsSyncModel).Return(systemsSyncEntity).Once() 87 88 db, dbMock := testdb.MockDatabase(t) 89 defer dbMock.AssertExpectations(t) 90 91 dbMock.ExpectExec(regexp.QuoteMeta(`INSERT INTO public.systems_sync_timestamps ( id, tenant_id, product_id, last_sync_timestamp ) VALUES ( ?, ?, ?, ? ) ON CONFLICT ( id ) DO UPDATE SET tenant_id=EXCLUDED.tenant_id, product_id=EXCLUDED.product_id, last_sync_timestamp=EXCLUDED.last_sync_timestamp`)). 92 WithArgs(fixSystemsSyncCreateArgs(*systemsSyncEntity)...). 93 WillReturnError(testError) 94 95 ctx := persistence.SaveToContext(context.TODO(), db) 96 systemsSyncRepo := systemssync.NewRepository(mockConverter) 97 98 // WHEN 99 err := systemsSyncRepo.Upsert(ctx, systemsSyncModel) 100 101 // THEN 102 require.Error(t, err) 103 assert.EqualError(t, err, "Internal Server Error: Unexpected error while executing SQL query") 104 }) 105 }