github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/operations_manager/service_test.go (about) 1 package operationsmanager_test 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/kyma-incubator/compass/components/director/internal/model" 8 operationsmanager "github.com/kyma-incubator/compass/components/director/internal/operations_manager" 9 "github.com/kyma-incubator/compass/components/director/internal/operations_manager/automock" 10 persistenceautomock "github.com/kyma-incubator/compass/components/director/pkg/persistence/automock" 11 "github.com/kyma-incubator/compass/components/director/pkg/persistence/txtest" 12 "github.com/pkg/errors" 13 "github.com/stretchr/testify/assert" 14 "github.com/stretchr/testify/mock" 15 "github.com/stretchr/testify/require" 16 ) 17 18 const ( 19 ordOpType = "ORD_AGGREGATION" 20 ) 21 22 func TestService_CreateORDOperations(t *testing.T) { 23 // GIVEN 24 ctx := context.TODO() 25 testErr := errors.New("Test error") 26 27 testCases := []struct { 28 Name string 29 OpCreatorFn func() *automock.OperationCreator 30 ExpectedErr error 31 }{ 32 { 33 Name: "Success", 34 OpCreatorFn: func() *automock.OperationCreator { 35 creator := &automock.OperationCreator{} 36 creator.On("Create", ctx).Return(nil).Once() 37 return creator 38 }, 39 }, 40 { 41 Name: "Error while creating ord operations", 42 OpCreatorFn: func() *automock.OperationCreator { 43 creator := &automock.OperationCreator{} 44 creator.On("Create", ctx).Return(testErr).Once() 45 return creator 46 }, 47 ExpectedErr: testErr, 48 }, 49 } 50 51 for _, testCase := range testCases { 52 t.Run(testCase.Name, func(t *testing.T) { 53 // GIVEN 54 opCreator := testCase.OpCreatorFn() 55 svc := operationsmanager.NewOperationService(nil, nil, opCreator) 56 57 // WHEN 58 err := svc.CreateORDOperations(ctx) 59 60 // THEN 61 if testCase.ExpectedErr != nil { 62 require.Error(t, err) 63 assert.Contains(t, err.Error(), testCase.ExpectedErr.Error()) 64 } else { 65 assert.Nil(t, err) 66 } 67 68 mock.AssertExpectationsForObjects(t, opCreator) 69 }) 70 } 71 } 72 73 func TestService_DeleteOldOperations(t *testing.T) { 74 // GIVEN 75 testErr := errors.New("Test error") 76 completedOpDays := 1 77 failedOpDays := 1 78 ctx := context.TODO() 79 txGen := txtest.NewTransactionContextGenerator(testErr) 80 testCases := []struct { 81 Name string 82 TransactionerFn func() (*persistenceautomock.PersistenceTx, *persistenceautomock.Transactioner) 83 OpSvcFn func() *automock.OperationService 84 ExpectedErr error 85 }{ 86 { 87 Name: "Success", 88 TransactionerFn: func() (*persistenceautomock.PersistenceTx, *persistenceautomock.Transactioner) { 89 return txGen.ThatSucceeds() 90 }, 91 OpSvcFn: func() *automock.OperationService { 92 repo := &automock.OperationService{} 93 repo.On("DeleteOlderThan", txtest.CtxWithDBMatcher(), ordOpType, model.OperationStatusCompleted, completedOpDays).Return(nil).Once() 94 repo.On("DeleteOlderThan", txtest.CtxWithDBMatcher(), ordOpType, model.OperationStatusFailed, failedOpDays).Return(nil).Once() 95 return repo 96 }, 97 }, 98 { 99 Name: "Error while deleting old completed operations", 100 TransactionerFn: func() (*persistenceautomock.PersistenceTx, *persistenceautomock.Transactioner) { 101 return txGen.ThatSucceeds() 102 }, 103 OpSvcFn: func() *automock.OperationService { 104 repo := &automock.OperationService{} 105 repo.On("DeleteOlderThan", txtest.CtxWithDBMatcher(), ordOpType, model.OperationStatusCompleted, completedOpDays).Return(testErr).Once() 106 return repo 107 }, 108 ExpectedErr: testErr, 109 }, 110 { 111 Name: "Error while deleting old failed operations", 112 TransactionerFn: func() (*persistenceautomock.PersistenceTx, *persistenceautomock.Transactioner) { 113 return txGen.ThatSucceeds() 114 }, 115 OpSvcFn: func() *automock.OperationService { 116 repo := &automock.OperationService{} 117 repo.On("DeleteOlderThan", txtest.CtxWithDBMatcher(), ordOpType, model.OperationStatusCompleted, completedOpDays).Return(nil).Once() 118 repo.On("DeleteOlderThan", txtest.CtxWithDBMatcher(), ordOpType, model.OperationStatusFailed, failedOpDays).Return(testErr).Once() 119 120 return repo 121 }, 122 ExpectedErr: testErr, 123 }, 124 { 125 Name: "Error while beginning transaction", 126 TransactionerFn: func() (*persistenceautomock.PersistenceTx, *persistenceautomock.Transactioner) { 127 return txGen.ThatFailsOnBegin() 128 }, 129 OpSvcFn: func() *automock.OperationService { 130 return &automock.OperationService{} 131 }, 132 ExpectedErr: testErr, 133 }, 134 } 135 136 for _, testCase := range testCases { 137 t.Run(testCase.Name, func(t *testing.T) { 138 // GIVEN 139 _, tx := testCase.TransactionerFn() 140 opSvc := testCase.OpSvcFn() 141 142 svc := operationsmanager.NewOperationService(tx, opSvc, nil) 143 144 // WHEN 145 err := svc.DeleteOldOperations(ctx, ordOpType, completedOpDays, failedOpDays) 146 147 // THEN 148 if testCase.ExpectedErr != nil { 149 require.Error(t, err) 150 assert.Contains(t, err.Error(), testCase.ExpectedErr.Error()) 151 } else { 152 assert.Nil(t, err) 153 } 154 155 mock.AssertExpectationsForObjects(t, tx, opSvc) 156 }) 157 } 158 }