github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/domain/api/fixtures_test.go (about) 1 package api_test 2 3 import ( 4 "database/sql" 5 "database/sql/driver" 6 "encoding/json" 7 "fmt" 8 "time" 9 10 "github.com/kyma-incubator/compass/components/director/pkg/str" 11 12 "github.com/kyma-incubator/compass/components/director/internal/domain/version" 13 14 "github.com/kyma-incubator/compass/components/director/internal/domain/api" 15 "github.com/kyma-incubator/compass/components/director/internal/repo" 16 17 "github.com/kyma-incubator/compass/components/director/internal/model" 18 "github.com/kyma-incubator/compass/components/director/pkg/graphql" 19 ) 20 21 const ( 22 apiDefID = "ddddddddd-dddd-dddd-dddd-dddddddddddd" 23 specID = "sssssssss-ssss-ssss-ssss-ssssssssssss" 24 tenantID = "b91b59f7-2563-40b2-aba9-fef726037aa3" 25 externalTenantID = "eeeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee" 26 bundleID = "bbbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" 27 packageID = "ppppppppp-pppp-pppp-pppp-pppppppppppp" 28 ordID = "com.compass.ord.v1" 29 localTenantID = "localTenantID" 30 extensible = `{"supported":"automatic","description":"Please find the extensibility documentation"}` 31 successors = `["sap.s4:apiResource:API_BILL_OF_MATERIAL_SRV:v2"]` 32 resourceHash = "123456" 33 publicVisibility = "public" 34 targetURL = "https://test-url.com/api" 35 36 firstTargetURL = "https://test-url.com" 37 secondTargetURL = "https://test2-url.com" 38 ) 39 40 var ( 41 fixedTimestamp = time.Now() 42 firstBundleID = "id1" 43 secondBundleID = "id2" 44 thirdBundleID = "id3" 45 frURL = "foo.bar" 46 spec = "spec" 47 appID = "aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" 48 appTemplateVersionID = "fffffffff-ffff-aaaa-ffff-aaaaaaaaaaaa" 49 ) 50 51 func fixAPIDefinitionModel(id string, name, targetURL string) *model.APIDefinition { 52 return &model.APIDefinition{ 53 Name: name, 54 TargetURLs: api.ConvertTargetURLToJSONArray(targetURL), 55 BaseEntity: &model.BaseEntity{ID: id}, 56 Visibility: str.Ptr(publicVisibility), 57 } 58 } 59 60 func fixAPIDefinitionWithPackageModel(id, name string) *model.APIDefinition { 61 return &model.APIDefinition{ 62 PackageID: str.Ptr(packageID), 63 Name: name, 64 TargetURLs: api.ConvertTargetURLToJSONArray(targetURL), 65 Version: &model.Version{}, 66 BaseEntity: &model.BaseEntity{ 67 ID: id, 68 Ready: true, 69 }, 70 } 71 } 72 73 func fixFullAPIDefinitionModelWithAppID(placeholder string) (model.APIDefinition, model.Spec, model.BundleReference) { 74 apiDef, spec, bundleRef := fixFullAPIDefinitionModel(apiDefID, placeholder) 75 apiDef.ApplicationID = str.Ptr(appID) 76 77 return apiDef, spec, bundleRef 78 } 79 80 func fixFullAPIDefinitionModelWithAppTemplateVersionID(placeholder string) (model.APIDefinition, model.Spec, model.BundleReference) { 81 apiDef, spec, bundleRef := fixFullAPIDefinitionModel(apiDefID, placeholder) 82 apiDef.ApplicationTemplateVersionID = str.Ptr(appTemplateVersionID) 83 84 return apiDef, spec, bundleRef 85 } 86 87 func fixFullAPIDefinitionModel(apiDefID, placeholder string) (model.APIDefinition, model.Spec, model.BundleReference) { 88 apiType := model.APISpecTypeOpenAPI 89 spec := model.Spec{ 90 ID: specID, 91 Data: str.Ptr("spec_data_" + placeholder), 92 Format: model.SpecFormatYaml, 93 ObjectType: model.APISpecReference, 94 ObjectID: apiDefID, 95 APIType: &apiType, 96 } 97 98 deprecated := false 99 forRemoval := false 100 101 v := &model.Version{ 102 Value: "v1.1", 103 Deprecated: &deprecated, 104 DeprecatedSince: str.Ptr("v1.0"), 105 ForRemoval: &forRemoval, 106 } 107 108 apiBundleReference := model.BundleReference{ 109 BundleID: str.Ptr(bundleID), 110 ObjectType: model.BundleAPIReference, 111 ObjectID: str.Ptr(apiDefID), 112 APIDefaultTargetURL: str.Ptr(fmt.Sprintf("https://%s.com", placeholder)), 113 } 114 115 boolVar := false 116 return model.APIDefinition{ 117 PackageID: str.Ptr(packageID), 118 Name: placeholder, 119 Description: str.Ptr("desc_" + placeholder), 120 TargetURLs: api.ConvertTargetURLToJSONArray(fmt.Sprintf("https://%s.com", placeholder)), 121 Group: str.Ptr("group_" + placeholder), 122 OrdID: str.Ptr(ordID), 123 LocalTenantID: str.Ptr(localTenantID), 124 ShortDescription: str.Ptr("shortDescription"), 125 SystemInstanceAware: &boolVar, 126 PolicyLevel: nil, 127 CustomPolicyLevel: nil, 128 APIProtocol: str.Ptr("apiProtocol"), 129 Tags: json.RawMessage("[]"), 130 Countries: json.RawMessage("[]"), 131 Links: json.RawMessage("[]"), 132 APIResourceLinks: json.RawMessage("[]"), 133 ReleaseStatus: str.Ptr("releaseStatus"), 134 SunsetDate: str.Ptr("sunsetDate"), 135 Successors: json.RawMessage(successors), 136 ChangeLogEntries: json.RawMessage("[]"), 137 Labels: json.RawMessage("[]"), 138 Visibility: str.Ptr(publicVisibility), 139 Disabled: &boolVar, 140 PartOfProducts: json.RawMessage("[]"), 141 LineOfBusiness: json.RawMessage("[]"), 142 Industry: json.RawMessage("[]"), 143 ImplementationStandard: str.Ptr("implementationStandard"), 144 CustomImplementationStandard: str.Ptr("customImplementationStandard"), 145 CustomImplementationStandardDescription: str.Ptr("customImplementationStandardDescription"), 146 Version: v, 147 Extensible: json.RawMessage(extensible), 148 ResourceHash: str.Ptr(resourceHash), 149 Hierarchy: json.RawMessage("[]"), 150 SupportedUseCases: json.RawMessage("[]"), 151 DocumentationLabels: json.RawMessage("[]"), 152 BaseEntity: &model.BaseEntity{ 153 ID: apiDefID, 154 Ready: true, 155 CreatedAt: &fixedTimestamp, 156 UpdatedAt: &time.Time{}, 157 DeletedAt: &time.Time{}, 158 Error: nil, 159 }, 160 }, spec, apiBundleReference 161 } 162 163 func fixFullGQLAPIDefinition(placeholder string) *graphql.APIDefinition { 164 data := graphql.CLOB("spec_data_" + placeholder) 165 166 spec := &graphql.APISpec{ 167 Data: &data, 168 Format: graphql.SpecFormatYaml, 169 Type: graphql.APISpecTypeOpenAPI, 170 DefinitionID: apiDefID, 171 } 172 173 deprecated := false 174 forRemoval := false 175 176 v := &graphql.Version{ 177 Value: "v1.1", 178 Deprecated: &deprecated, 179 DeprecatedSince: str.Ptr("v1.0"), 180 ForRemoval: &forRemoval, 181 } 182 183 return &graphql.APIDefinition{ 184 BundleID: bundleID, 185 Name: placeholder, 186 Description: str.Ptr("desc_" + placeholder), 187 Spec: spec, 188 TargetURL: fmt.Sprintf("https://%s.com", placeholder), 189 Group: str.Ptr("group_" + placeholder), 190 Version: v, 191 BaseEntity: &graphql.BaseEntity{ 192 ID: apiDefID, 193 Ready: true, 194 Error: nil, 195 CreatedAt: timeToTimestampPtr(fixedTimestamp), 196 UpdatedAt: timeToTimestampPtr(time.Time{}), 197 DeletedAt: timeToTimestampPtr(time.Time{}), 198 }, 199 } 200 } 201 202 func fixModelAPIDefinitionInput(name, description string, group string) (*model.APIDefinitionInput, *model.SpecInput) { 203 data := "data" 204 apiType := model.APISpecTypeOpenAPI 205 206 spec := &model.SpecInput{ 207 Data: &data, 208 APIType: &apiType, 209 Format: model.SpecFormatYaml, 210 FetchRequest: &model.FetchRequestInput{}, 211 } 212 213 deprecated := false 214 deprecatedSince := "" 215 forRemoval := false 216 217 v := &model.VersionInput{ 218 Value: "1.0.0", 219 Deprecated: &deprecated, 220 DeprecatedSince: &deprecatedSince, 221 ForRemoval: &forRemoval, 222 } 223 224 return &model.APIDefinitionInput{ 225 Name: name, 226 Description: &description, 227 TargetURLs: api.ConvertTargetURLToJSONArray(targetURL), 228 Group: &group, 229 VersionInput: v, 230 }, spec 231 } 232 233 func fixGQLAPIDefinitionInput(name, description string, group string) *graphql.APIDefinitionInput { 234 data := graphql.CLOB("data") 235 236 spec := &graphql.APISpecInput{ 237 Data: &data, 238 Type: graphql.APISpecTypeOpenAPI, 239 Format: graphql.SpecFormatYaml, 240 FetchRequest: &graphql.FetchRequestInput{}, 241 } 242 243 deprecated := false 244 deprecatedSince := "" 245 forRemoval := false 246 247 v := &graphql.VersionInput{ 248 Value: "1.0.0", 249 Deprecated: &deprecated, 250 DeprecatedSince: &deprecatedSince, 251 ForRemoval: &forRemoval, 252 } 253 254 return &graphql.APIDefinitionInput{ 255 Name: name, 256 Description: &description, 257 TargetURL: targetURL, 258 Group: &group, 259 Spec: spec, 260 Version: v, 261 } 262 } 263 264 func fixEntityAPIDefinition(id string, name, targetURL string) *api.Entity { 265 return &api.Entity{ 266 Name: name, 267 TargetURLs: repo.NewValidNullableString(`["` + targetURL + `"]`), 268 BaseEntity: &repo.BaseEntity{ID: id}, 269 Visibility: publicVisibility, 270 } 271 } 272 273 func fixFullEntityAPIDefinitionWithAppID(apiDefID, placeholder string) api.Entity { 274 entity := fixFullEntityAPIDefinition(apiDefID, placeholder) 275 entity.ApplicationID = repo.NewValidNullableString(appID) 276 277 return entity 278 } 279 280 func fixFullEntityAPIDefinitionWithAppTemplateVersionID(apiDefID, placeholder string) api.Entity { 281 entity := fixFullEntityAPIDefinition(apiDefID, placeholder) 282 entity.ApplicationTemplateVersionID = repo.NewValidNullableString(appTemplateVersionID) 283 284 return entity 285 } 286 287 func fixFullEntityAPIDefinition(apiDefID, placeholder string) api.Entity { 288 return api.Entity{ 289 PackageID: repo.NewValidNullableString(packageID), 290 Name: placeholder, 291 Description: repo.NewValidNullableString("desc_" + placeholder), 292 Group: repo.NewValidNullableString("group_" + placeholder), 293 TargetURLs: repo.NewValidNullableString(`["` + fmt.Sprintf("https://%s.com", placeholder) + `"]`), 294 OrdID: repo.NewValidNullableString(ordID), 295 LocalTenantID: repo.NewValidNullableString(localTenantID), 296 ShortDescription: repo.NewValidNullableString("shortDescription"), 297 SystemInstanceAware: repo.NewValidNullableBool(false), 298 PolicyLevel: sql.NullString{}, 299 CustomPolicyLevel: sql.NullString{}, 300 APIProtocol: repo.NewValidNullableString("apiProtocol"), 301 Tags: repo.NewValidNullableString("[]"), 302 Countries: repo.NewValidNullableString("[]"), 303 Links: repo.NewValidNullableString("[]"), 304 APIResourceLinks: repo.NewValidNullableString("[]"), 305 ReleaseStatus: repo.NewValidNullableString("releaseStatus"), 306 SunsetDate: repo.NewValidNullableString("sunsetDate"), 307 Successors: repo.NewValidNullableString(successors), 308 ChangeLogEntries: repo.NewValidNullableString("[]"), 309 Labels: repo.NewValidNullableString("[]"), 310 Visibility: publicVisibility, 311 Disabled: repo.NewValidNullableBool(false), 312 PartOfProducts: repo.NewValidNullableString("[]"), 313 LineOfBusiness: repo.NewValidNullableString("[]"), 314 Industry: repo.NewValidNullableString("[]"), 315 ImplementationStandard: repo.NewValidNullableString("implementationStandard"), 316 CustomImplementationStandard: repo.NewValidNullableString("customImplementationStandard"), 317 CustomImplementationStandardDescription: repo.NewValidNullableString("customImplementationStandardDescription"), 318 Extensible: repo.NewValidNullableString(extensible), 319 Version: version.Version{ 320 Value: repo.NewNullableString(str.Ptr("v1.1")), 321 Deprecated: repo.NewValidNullableBool(false), 322 DeprecatedSince: repo.NewNullableString(str.Ptr("v1.0")), 323 ForRemoval: repo.NewValidNullableBool(false), 324 }, 325 ResourceHash: repo.NewValidNullableString(resourceHash), 326 SupportedUseCases: repo.NewValidNullableString("[]"), 327 Hierarchy: repo.NewValidNullableString("[]"), 328 DocumentationLabels: repo.NewValidNullableString("[]"), 329 BaseEntity: &repo.BaseEntity{ 330 ID: apiDefID, 331 Ready: true, 332 CreatedAt: &fixedTimestamp, 333 UpdatedAt: &time.Time{}, 334 DeletedAt: &time.Time{}, 335 Error: sql.NullString{}, 336 }, 337 } 338 } 339 340 func fixAPIDefinitionColumns() []string { 341 return []string{"id", "app_id", "app_template_version_id", "package_id", "name", "description", "group_name", "ord_id", "local_tenant_id", 342 "short_description", "system_instance_aware", "policy_level", "custom_policy_level", "api_protocol", 343 "tags", "countries", "links", "api_resource_links", "release_status", 344 "sunset_date", "changelog_entries", "labels", "visibility", "disabled", "part_of_products", "line_of_business", 345 "industry", "version_value", "version_deprecated", "version_deprecated_since", "version_for_removal", "ready", 346 "created_at", "updated_at", "deleted_at", "error", "implementation_standard", "custom_implementation_standard", 347 "custom_implementation_standard_description", "target_urls", "extensible", "successors", "resource_hash", "hierarchy", "supported_use_cases", "documentation_labels"} 348 } 349 350 func fixAPIDefinitionRow(id, placeholder string) []driver.Value { 351 boolVar := false 352 return []driver.Value{id, appID, repo.NewValidNullableString(""), packageID, placeholder, "desc_" + placeholder, "group_" + placeholder, 353 ordID, localTenantID, "shortDescription", &boolVar, nil, nil, "apiProtocol", repo.NewValidNullableString("[]"), 354 repo.NewValidNullableString("[]"), repo.NewValidNullableString("[]"), repo.NewValidNullableString("[]"), "releaseStatus", "sunsetDate", repo.NewValidNullableString("[]"), repo.NewValidNullableString("[]"), publicVisibility, &boolVar, 355 repo.NewValidNullableString("[]"), repo.NewValidNullableString("[]"), repo.NewValidNullableString("[]"), "v1.1", false, "v1.0", false, true, fixedTimestamp, time.Time{}, time.Time{}, nil, 356 "implementationStandard", "customImplementationStandard", "customImplementationStandardDescription", repo.NewValidNullableString(`["` + fmt.Sprintf("https://%s.com", placeholder) + `"]`), 357 repo.NewValidNullableString(extensible), repo.NewValidNullableString(successors), repo.NewValidNullableString(resourceHash), repo.NewValidNullableString("[]"), repo.NewValidNullableString("[]"), repo.NewValidNullableString("[]")} 358 } 359 360 func fixAPIDefinitionRowForAppTemplateVersion(id, placeholder string) []driver.Value { 361 boolVar := false 362 return []driver.Value{id, repo.NewValidNullableString(""), appTemplateVersionID, packageID, placeholder, "desc_" + placeholder, "group_" + placeholder, 363 ordID, localTenantID, "shortDescription", &boolVar, nil, nil, "apiProtocol", repo.NewValidNullableString("[]"), 364 repo.NewValidNullableString("[]"), repo.NewValidNullableString("[]"), repo.NewValidNullableString("[]"), "releaseStatus", "sunsetDate", repo.NewValidNullableString("[]"), repo.NewValidNullableString("[]"), publicVisibility, &boolVar, 365 repo.NewValidNullableString("[]"), repo.NewValidNullableString("[]"), repo.NewValidNullableString("[]"), "v1.1", false, "v1.0", false, true, fixedTimestamp, time.Time{}, time.Time{}, nil, 366 "implementationStandard", "customImplementationStandard", "customImplementationStandardDescription", repo.NewValidNullableString(`["` + fmt.Sprintf("https://%s.com", placeholder) + `"]`), 367 repo.NewValidNullableString(extensible), repo.NewValidNullableString(successors), repo.NewValidNullableString(resourceHash), repo.NewValidNullableString("[]"), repo.NewValidNullableString("[]"), repo.NewValidNullableString("[]")} 368 } 369 370 func fixAPICreateArgs(id string, apiDef *model.APIDefinition) []driver.Value { 371 return []driver.Value{id, appID, repo.NewValidNullableString(""), packageID, apiDef.Name, apiDef.Description, apiDef.Group, 372 apiDef.OrdID, apiDef.LocalTenantID, apiDef.ShortDescription, apiDef.SystemInstanceAware, nil, nil, apiDef.APIProtocol, repo.NewNullableStringFromJSONRawMessage(apiDef.Tags), repo.NewNullableStringFromJSONRawMessage(apiDef.Countries), 373 repo.NewNullableStringFromJSONRawMessage(apiDef.Links), repo.NewNullableStringFromJSONRawMessage(apiDef.APIResourceLinks), 374 apiDef.ReleaseStatus, apiDef.SunsetDate, repo.NewNullableStringFromJSONRawMessage(apiDef.ChangeLogEntries), repo.NewNullableStringFromJSONRawMessage(apiDef.Labels), apiDef.Visibility, 375 apiDef.Disabled, repo.NewNullableStringFromJSONRawMessage(apiDef.PartOfProducts), repo.NewNullableStringFromJSONRawMessage(apiDef.LineOfBusiness), repo.NewNullableStringFromJSONRawMessage(apiDef.Industry), 376 apiDef.Version.Value, apiDef.Version.Deprecated, apiDef.Version.DeprecatedSince, apiDef.Version.ForRemoval, apiDef.Ready, apiDef.CreatedAt, apiDef.UpdatedAt, apiDef.DeletedAt, apiDef.Error, 377 apiDef.ImplementationStandard, apiDef.CustomImplementationStandard, apiDef.CustomImplementationStandardDescription, repo.NewNullableStringFromJSONRawMessage(apiDef.TargetURLs), extensible, 378 repo.NewNullableStringFromJSONRawMessage(apiDef.Successors), apiDef.ResourceHash, repo.NewNullableStringFromJSONRawMessage(apiDef.Hierarchy), repo.NewNullableStringFromJSONRawMessage(apiDef.SupportedUseCases), repo.NewNullableStringFromJSONRawMessage(apiDef.DocumentationLabels)} 379 } 380 381 func fixAPICreateArgsForAppTemplateVersion(id string, apiDef *model.APIDefinition) []driver.Value { 382 return []driver.Value{id, repo.NewValidNullableString(""), appTemplateVersionID, packageID, apiDef.Name, apiDef.Description, apiDef.Group, 383 apiDef.OrdID, apiDef.LocalTenantID, apiDef.ShortDescription, apiDef.SystemInstanceAware, nil, nil, apiDef.APIProtocol, repo.NewNullableStringFromJSONRawMessage(apiDef.Tags), repo.NewNullableStringFromJSONRawMessage(apiDef.Countries), 384 repo.NewNullableStringFromJSONRawMessage(apiDef.Links), repo.NewNullableStringFromJSONRawMessage(apiDef.APIResourceLinks), 385 apiDef.ReleaseStatus, apiDef.SunsetDate, repo.NewNullableStringFromJSONRawMessage(apiDef.ChangeLogEntries), repo.NewNullableStringFromJSONRawMessage(apiDef.Labels), apiDef.Visibility, 386 apiDef.Disabled, repo.NewNullableStringFromJSONRawMessage(apiDef.PartOfProducts), repo.NewNullableStringFromJSONRawMessage(apiDef.LineOfBusiness), repo.NewNullableStringFromJSONRawMessage(apiDef.Industry), 387 apiDef.Version.Value, apiDef.Version.Deprecated, apiDef.Version.DeprecatedSince, apiDef.Version.ForRemoval, apiDef.Ready, apiDef.CreatedAt, apiDef.UpdatedAt, apiDef.DeletedAt, apiDef.Error, 388 apiDef.ImplementationStandard, apiDef.CustomImplementationStandard, apiDef.CustomImplementationStandardDescription, repo.NewNullableStringFromJSONRawMessage(apiDef.TargetURLs), extensible, 389 repo.NewNullableStringFromJSONRawMessage(apiDef.Successors), apiDef.ResourceHash, repo.NewNullableStringFromJSONRawMessage(apiDef.Hierarchy), repo.NewNullableStringFromJSONRawMessage(apiDef.SupportedUseCases), repo.NewNullableStringFromJSONRawMessage(apiDef.DocumentationLabels)} 390 } 391 392 func fixModelFetchRequest(id, url string, timestamp time.Time) *model.FetchRequest { 393 return &model.FetchRequest{ 394 ID: id, 395 URL: url, 396 Auth: nil, 397 Mode: "SINGLE", 398 Filter: nil, 399 Status: &model.FetchRequestStatus{ 400 Condition: model.FetchRequestStatusConditionInitial, 401 Timestamp: timestamp, 402 }, 403 ObjectType: model.APISpecFetchRequestReference, 404 ObjectID: specID, 405 } 406 } 407 408 func fixModelBundleReference(bundleID, apiID string) *model.BundleReference { 409 return &model.BundleReference{ 410 BundleID: str.Ptr(bundleID), 411 ObjectType: model.BundleAPIReference, 412 ObjectID: str.Ptr(apiID), 413 } 414 } 415 416 func fixGQLFetchRequest(url string, timestamp time.Time) *graphql.FetchRequest { 417 return &graphql.FetchRequest{ 418 Filter: nil, 419 Mode: graphql.FetchModeSingle, 420 Auth: nil, 421 URL: url, 422 Status: &graphql.FetchRequestStatus{ 423 Timestamp: graphql.Timestamp(timestamp), 424 Condition: graphql.FetchRequestStatusConditionInitial, 425 }, 426 } 427 } 428 429 func timeToTimestampPtr(time time.Time) *graphql.Timestamp { 430 t := graphql.Timestamp(time) 431 return &t 432 }