github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/domain/bundleinstanceauth/fixtures_test.go (about) 1 package bundleinstanceauth_test 2 3 import ( 4 "database/sql" 5 "database/sql/driver" 6 "encoding/json" 7 "errors" 8 "testing" 9 "time" 10 11 "github.com/kyma-incubator/compass/components/director/pkg/str" 12 13 "github.com/kyma-incubator/compass/components/director/pkg/graphql" 14 15 "github.com/DATA-DOG/go-sqlmock" 16 "github.com/kyma-incubator/compass/components/director/internal/domain/bundleinstanceauth" 17 18 "github.com/stretchr/testify/require" 19 20 "github.com/kyma-incubator/compass/components/director/internal/model" 21 ) 22 23 var ( 24 testID = "foo" 25 testBundleID = "bar" 26 testRuntimeID = "d05fb90c-3084-4349-9deb-af23a4ce76be" 27 testTenant = "b91b59f7-2563-40b2-aba9-fef726037aa3" 28 testExternalTenant = "foobaz" 29 testContext = `{"foo": "bar"}` 30 testInputParams = `{"bar": "baz"}` 31 testError = errors.New("test") 32 testTime = time.Now() 33 testTableColumns = []string{"id", "owner_id", "bundle_id", "context", "input_params", "auth_value", "status_condition", "status_timestamp", "status_message", "status_reason", "runtime_id", "runtime_context_id"} 34 ) 35 36 func fixModelBundleInstanceAuth(id, bundleID, tenant string, auth *model.Auth, status *model.BundleInstanceAuthStatus, runtimeID *string) *model.BundleInstanceAuth { 37 pia := fixModelBundleInstanceAuthWithoutContextAndInputParams(id, bundleID, tenant, auth, status, runtimeID) 38 pia.Context = &testContext 39 pia.InputParams = &testInputParams 40 41 return pia 42 } 43 44 func fixModelBundleInstanceAuthWithoutContextAndInputParams(id, bundleID, tenant string, auth *model.Auth, status *model.BundleInstanceAuthStatus, runtimeID *string) *model.BundleInstanceAuth { 45 return &model.BundleInstanceAuth{ 46 ID: id, 47 BundleID: bundleID, 48 RuntimeID: runtimeID, 49 Owner: tenant, 50 Auth: auth, 51 Status: status, 52 } 53 } 54 55 func fixGQLBundleInstanceAuth(id string, auth *graphql.Auth, status *graphql.BundleInstanceAuthStatus, runtimeID *string) *graphql.BundleInstanceAuth { 56 context := graphql.JSON(testContext) 57 inputParams := graphql.JSON(testInputParams) 58 59 out := fixGQLBundleInstanceAuthWithoutContextAndInputParams(id, auth, status, runtimeID) 60 out.Context = &context 61 out.InputParams = &inputParams 62 63 return out 64 } 65 66 func fixGQLBundleInstanceAuthWithoutContextAndInputParams(id string, auth *graphql.Auth, status *graphql.BundleInstanceAuthStatus, runtimeID *string) *graphql.BundleInstanceAuth { 67 return &graphql.BundleInstanceAuth{ 68 ID: id, 69 Auth: auth, 70 Status: status, 71 RuntimeID: runtimeID, 72 } 73 } 74 75 func fixModelStatusSucceeded() *model.BundleInstanceAuthStatus { 76 return &model.BundleInstanceAuthStatus{ 77 Condition: model.BundleInstanceAuthStatusConditionSucceeded, 78 Timestamp: testTime, 79 Message: "Credentials were provided.", 80 Reason: "CredentialsProvided", 81 } 82 } 83 84 func fixModelStatusPending() *model.BundleInstanceAuthStatus { 85 return &model.BundleInstanceAuthStatus{ 86 Condition: model.BundleInstanceAuthStatusConditionPending, 87 Timestamp: testTime, 88 Message: "Credentials were not yet provided.", 89 Reason: "CredentialsNotProvided", 90 } 91 } 92 93 func fixGQLStatusSucceeded() *graphql.BundleInstanceAuthStatus { 94 return &graphql.BundleInstanceAuthStatus{ 95 Condition: graphql.BundleInstanceAuthStatusConditionSucceeded, 96 Timestamp: graphql.Timestamp(testTime), 97 Message: "Credentials were provided.", 98 Reason: "CredentialsProvided", 99 } 100 } 101 102 func fixGQLStatusPending() *graphql.BundleInstanceAuthStatus { 103 return &graphql.BundleInstanceAuthStatus{ 104 Condition: graphql.BundleInstanceAuthStatusConditionPending, 105 Timestamp: graphql.Timestamp(testTime), 106 Message: "Credentials were not yet provided.", 107 Reason: "CredentialsNotProvided", 108 } 109 } 110 111 func fixModelStatusInput(condition model.BundleInstanceAuthSetStatusConditionInput, message, reason string) *model.BundleInstanceAuthStatusInput { 112 return &model.BundleInstanceAuthStatusInput{ 113 Condition: condition, 114 Message: message, 115 Reason: reason, 116 } 117 } 118 119 func fixGQLStatusInput(condition graphql.BundleInstanceAuthSetStatusConditionInput, message, reason string) *graphql.BundleInstanceAuthStatusInput { 120 return &graphql.BundleInstanceAuthStatusInput{ 121 Condition: condition, 122 Message: message, 123 Reason: reason, 124 } 125 } 126 127 func fixModelRequestInput() *model.BundleInstanceAuthRequestInput { 128 return &model.BundleInstanceAuthRequestInput{ 129 Context: &testContext, 130 InputParams: &testInputParams, 131 } 132 } 133 134 func fixModelCreateInput() *model.BundleInstanceAuthCreateInput { 135 return &model.BundleInstanceAuthCreateInput{ 136 Context: &testContext, 137 InputParams: &testInputParams, 138 Auth: fixModelAuthInput(), 139 RuntimeID: &testRuntimeID, 140 } 141 } 142 143 func fixModelUpdateInput() *model.BundleInstanceAuthUpdateInput { 144 return &model.BundleInstanceAuthUpdateInput{ 145 Context: &testContext, 146 InputParams: &testInputParams, 147 Auth: fixModelAuthInput(), 148 } 149 } 150 151 func fixGQLRequestInput() *graphql.BundleInstanceAuthRequestInput { 152 context := graphql.JSON(testContext) 153 inputParams := graphql.JSON(testInputParams) 154 155 return &graphql.BundleInstanceAuthRequestInput{ 156 Context: &context, 157 InputParams: &inputParams, 158 } 159 } 160 161 func fixGQLCreateInput() *graphql.BundleInstanceAuthCreateInput { 162 context := graphql.JSON(testContext) 163 inputParams := graphql.JSON(testInputParams) 164 165 return &graphql.BundleInstanceAuthCreateInput{ 166 Context: &context, 167 InputParams: &inputParams, 168 Auth: fixGQLAuthInput(), 169 RuntimeID: &testRuntimeID, 170 } 171 } 172 173 func fixGQLUpdateInput() *graphql.BundleInstanceAuthUpdateInput { 174 context := graphql.JSON(testContext) 175 inputParams := graphql.JSON(testInputParams) 176 177 return &graphql.BundleInstanceAuthUpdateInput{ 178 Context: &context, 179 InputParams: &inputParams, 180 Auth: fixGQLAuthInput(), 181 } 182 } 183 184 func fixModelSetInput() *model.BundleInstanceAuthSetInput { 185 return &model.BundleInstanceAuthSetInput{ 186 Auth: fixModelAuthInput(), 187 Status: fixModelStatusInput(model.BundleInstanceAuthSetStatusConditionInputSucceeded, "foo", "bar"), 188 } 189 } 190 191 func fixGQLSetInput() *graphql.BundleInstanceAuthSetInput { 192 return &graphql.BundleInstanceAuthSetInput{ 193 Auth: fixGQLAuthInput(), 194 Status: fixGQLStatusInput(graphql.BundleInstanceAuthSetStatusConditionInputSucceeded, "foo", "bar"), 195 } 196 } 197 198 func fixEntityBundleInstanceAuth(t *testing.T, id, bundleID, tenant string, auth *model.Auth, status *model.BundleInstanceAuthStatus, runtimeID *string) *bundleinstanceauth.Entity { 199 out := fixEntityBundleInstanceAuthWithoutContextAndInputParams(t, id, bundleID, tenant, auth, status, runtimeID) 200 out.Context = sql.NullString{Valid: true, String: testContext} 201 out.InputParams = sql.NullString{Valid: true, String: testInputParams} 202 203 return out 204 } 205 206 func fixEntityBundleInstanceAuthWithoutContextAndInputParams(t *testing.T, id, bundleID, tenant string, auth *model.Auth, status *model.BundleInstanceAuthStatus, runtimeID *string) *bundleinstanceauth.Entity { 207 sqlNullString := sql.NullString{} 208 if runtimeID != nil { 209 sqlNullString.Valid = true 210 sqlNullString.String = *runtimeID 211 } 212 out := bundleinstanceauth.Entity{ 213 ID: id, 214 BundleID: bundleID, 215 RuntimeID: sqlNullString, 216 OwnerID: tenant, 217 } 218 219 if auth != nil { 220 marshalled, err := json.Marshal(auth) 221 require.NoError(t, err) 222 out.AuthValue = sql.NullString{ 223 String: string(marshalled), 224 Valid: true, 225 } 226 } 227 228 if status != nil { 229 out.StatusCondition = string(status.Condition) 230 out.StatusTimestamp = status.Timestamp 231 out.StatusMessage = status.Message 232 out.StatusReason = status.Reason 233 } 234 235 return &out 236 } 237 238 func fixModelAuth() *model.Auth { 239 return &model.Auth{ 240 Credential: model.CredentialData{ 241 Basic: &model.BasicCredentialData{ 242 Username: "foo", 243 Password: "bar", 244 }, 245 }, 246 } 247 } 248 249 func fixGQLAuth() *graphql.Auth { 250 return &graphql.Auth{ 251 Credential: &graphql.BasicCredentialData{ 252 Username: "foo", 253 Password: "bar", 254 }, 255 } 256 } 257 258 func fixModelAuthInput() *model.AuthInput { 259 return &model.AuthInput{ 260 Credential: &model.CredentialDataInput{ 261 Basic: &model.BasicCredentialDataInput{ 262 Username: "foo", 263 Password: "bar", 264 }, 265 }, 266 } 267 } 268 269 func fixGQLAuthInput() *graphql.AuthInput { 270 return &graphql.AuthInput{ 271 Credential: &graphql.CredentialDataInput{ 272 Basic: &graphql.BasicCredentialDataInput{ 273 Username: "foo", 274 Password: "bar", 275 }, 276 }, 277 } 278 } 279 280 type sqlRow struct { 281 id string 282 ownerID string 283 bundleID string 284 runtimeID sql.NullString 285 runtimeContextID sql.NullString 286 context sql.NullString 287 inputParams sql.NullString 288 authValue sql.NullString 289 statusCondition string 290 statusTimestamp time.Time 291 statusMessage string 292 statusReason string 293 } 294 295 func fixSQLRows(rows []sqlRow) *sqlmock.Rows { 296 out := sqlmock.NewRows(testTableColumns) 297 for _, row := range rows { 298 out.AddRow(row.id, row.ownerID, row.bundleID, row.context, row.inputParams, row.authValue, row.statusCondition, row.statusTimestamp, row.statusMessage, row.statusReason, row.runtimeID, row.runtimeContextID) 299 } 300 return out 301 } 302 303 func fixSQLRowFromEntity(entity bundleinstanceauth.Entity) sqlRow { 304 return sqlRow{ 305 id: entity.ID, 306 ownerID: entity.OwnerID, 307 bundleID: entity.BundleID, 308 runtimeID: entity.RuntimeID, 309 runtimeContextID: entity.RuntimeContextID, 310 context: entity.Context, 311 inputParams: entity.InputParams, 312 authValue: entity.AuthValue, 313 statusCondition: entity.StatusCondition, 314 statusTimestamp: entity.StatusTimestamp, 315 statusMessage: entity.StatusMessage, 316 statusReason: entity.StatusReason, 317 } 318 } 319 320 func fixCreateArgs(ent bundleinstanceauth.Entity) []driver.Value { 321 return []driver.Value{ent.ID, ent.OwnerID, ent.BundleID, ent.Context, ent.InputParams, ent.AuthValue, ent.StatusCondition, ent.StatusTimestamp, ent.StatusMessage, ent.StatusReason, ent.RuntimeID, ent.RuntimeContextID} 322 } 323 324 func fixSimpleModelBundleInstanceAuth(id string) *model.BundleInstanceAuth { 325 return &model.BundleInstanceAuth{ 326 ID: id, 327 BundleID: testBundleID, 328 } 329 } 330 331 func fixSimpleGQLBundleInstanceAuth(id string) *graphql.BundleInstanceAuth { 332 return &graphql.BundleInstanceAuth{ 333 ID: id, 334 } 335 } 336 337 func fixModelBundle(id string, requestInputSchema *string, defaultAuth *model.Auth) *model.Bundle { 338 return &model.Bundle{ 339 ApplicationID: str.Ptr("foo"), 340 Name: "test-bundle", 341 InstanceAuthRequestInputSchema: requestInputSchema, 342 DefaultInstanceAuth: defaultAuth, 343 BaseEntity: &model.BaseEntity{ID: id}, 344 } 345 }