From f01a135eeea35c57034722049a6c25f3784fa3c7 Mon Sep 17 00:00:00 2001 From: David Bloss Date: Mon, 7 Oct 2024 10:26:21 -0500 Subject: [PATCH 1/2] TF state correctly detects service owner changes from UI, test updated --- .../unreleased/Bugfix-20241007-102556.yaml | 3 + opslevel/resource_opslevel_service.go | 20 +- tests/data/main.tf | 4 + tests/data/outputs.tf | 16 + tests/remote/service.tftest.hcl | 436 ----------------- tests/service.tftest.hcl | 463 ++++++++++++++++++ 6 files changed, 503 insertions(+), 439 deletions(-) create mode 100644 .changes/unreleased/Bugfix-20241007-102556.yaml delete mode 100644 tests/remote/service.tftest.hcl create mode 100644 tests/service.tftest.hcl diff --git a/.changes/unreleased/Bugfix-20241007-102556.yaml b/.changes/unreleased/Bugfix-20241007-102556.yaml new file mode 100644 index 00000000..913abb03 --- /dev/null +++ b/.changes/unreleased/Bugfix-20241007-102556.yaml @@ -0,0 +1,3 @@ +kind: Bugfix +body: TF state correctly detects service owner changes from UI +time: 2024-10-07T10:25:56.045372-05:00 diff --git a/opslevel/resource_opslevel_service.go b/opslevel/resource_opslevel_service.go index 88a379dc..eed55529 100644 --- a/opslevel/resource_opslevel_service.go +++ b/opslevel/resource_opslevel_service.go @@ -62,13 +62,27 @@ func newServiceResourceModel(ctx context.Context, service opslevel.Service, give Language: OptionalStringValue(service.Language), LifecycleAlias: OptionalStringValue(service.Lifecycle.Alias), Name: RequiredStringValue(service.Name), - Note: givenModel.Note, - Owner: OptionalStringValue(givenModel.Owner.ValueString()), - Parent: OptionalStringValue(givenModel.Parent.ValueString()), + Note: OptionalStringValue(service.Note), Product: OptionalStringValue(service.Product), TierAlias: OptionalStringValue(service.Tier.Alias), } + if string(service.Owner.Id) == "" { + serviceResourceModel.Owner = types.StringNull() + } else if string(service.Owner.Id) == givenModel.Owner.ValueString() || service.Owner.Alias == givenModel.Owner.ValueString() { + serviceResourceModel.Owner = givenModel.Owner + } else { + serviceResourceModel.Owner = OptionalStringValue(service.Owner.Alias) + } + + if service.Parent == nil { + serviceResourceModel.Parent = types.StringNull() + } else if string(service.Parent.Id) == givenModel.Parent.ValueString() || slices.Contains(service.Parent.Aliases, givenModel.Parent.ValueString()) { + serviceResourceModel.Parent = givenModel.Parent + } else { + serviceResourceModel.Parent = OptionalStringValue(service.Parent.Aliases[0]) + } + if givenModel.Aliases.IsNull() { serviceResourceModel.Aliases = types.SetNull(types.StringType) } else { diff --git a/tests/data/main.tf b/tests/data/main.tf index 1d1922e0..a0d9eab9 100644 --- a/tests/data/main.tf +++ b/tests/data/main.tf @@ -2,6 +2,8 @@ data "opslevel_domains" "all" {} data "opslevel_filters" "all" {} +data "opslevel_lifecycles" "all" {} + data "opslevel_repositories" "all" {} data "opslevel_services" "all" {} @@ -10,4 +12,6 @@ data "opslevel_systems" "all" {} data "opslevel_teams" "all" {} +data "opslevel_tiers" "all" {} + data "opslevel_users" "all" {} diff --git a/tests/data/outputs.tf b/tests/data/outputs.tf index 8118b726..b5bf751a 100644 --- a/tests/data/outputs.tf +++ b/tests/data/outputs.tf @@ -6,6 +6,10 @@ output "all_filters" { value = data.opslevel_filters.all } +output "all_lifecycles" { + value = data.opslevel_lifecycles.all +} + output "all_repositories" { value = data.opslevel_repositories.all } @@ -22,6 +26,10 @@ output "all_teams" { value = data.opslevel_teams.all } +output "all_tiers" { + value = data.opslevel_tiers.all +} + output "all_users" { value = data.opslevel_users.all } @@ -34,6 +42,10 @@ output "first_filter" { value = data.opslevel_filters.all.filters[0] } +output "first_lifecycle" { + value = data.opslevel_lifecycles.all.lifecycles[0] +} + output "first_repository" { value = data.opslevel_repositories.all.repositories[0] } @@ -50,6 +62,10 @@ output "first_team" { value = data.opslevel_teams.all.teams[0] } +output "first_tier" { + value = data.opslevel_tiers.all.tiers[0] +} + output "first_user" { value = data.opslevel_users.all.users[0] } diff --git a/tests/remote/service.tftest.hcl b/tests/remote/service.tftest.hcl deleted file mode 100644 index bb294bfe..00000000 --- a/tests/remote/service.tftest.hcl +++ /dev/null @@ -1,436 +0,0 @@ -variables { - service_one = "opslevel_service" - services_all = "opslevel_services" - - # required fields - name = "TF Test Service" - - # lifecycle_alias fields - aliases = ["service_one"] - api_document_path = "test.json" - description = "Service description" - framework = "Ruby on Rails" - language = "ruby" - lifecycle_alias = null - note = "TF Test Service Note" - owner = null - preferred_api_document_source = "PUSH" - product = "widgets" - tags = toset(["key1:value1", "key2:value2"]) - tier_alias = null -} - -run "from_lifecycle_get_lifecycle_alias" { - command = plan - - module { - source = "./lifecycle" - } -} - -run "from_team_get_owner_id" { - command = plan - - variables { - aliases = null - name = "" - parent = null - responsibilities = null - } - - module { - source = "./team" - } -} - -run "from_tier_get_tier_alias" { - command = plan - - module { - source = "./tier" - } -} - -run "resource_service_create_with_all_fields" { - - variables { - aliases = var.aliases - api_document_path = var.api_document_path - description = var.description - framework = var.framework - language = var.language - lifecycle_alias = run.from_lifecycle_get_lifecycle_alias.first_lifecycle.alias - name = var.name - note = var.note - owner = run.from_team_get_owner_id.first_team.id - preferred_api_document_source = var.preferred_api_document_source - product = var.product - tags = var.tags - tier_alias = run.from_tier_get_tier_alias.first_tier.alias - } - - module { - source = "./service" - } - - - assert { - condition = alltrue([ - can(opslevel_service.test.aliases), - can(opslevel_service.test.api_document_path), - can(opslevel_service.test.description), - can(opslevel_service.test.framework), - can(opslevel_service.test.id), - can(opslevel_service.test.language), - can(opslevel_service.test.lifecycle_alias), - can(opslevel_service.test.name), - can(opslevel_service.test.note), - can(opslevel_service.test.owner), - can(opslevel_service.test.preferred_api_document_source), - can(opslevel_service.test.product), - can(opslevel_service.test.tags), - can(opslevel_service.test.tier_alias), - ]) - error_message = replace(var.error_unexpected_resource_fields, "TYPE", var.service_one) - } - - assert { - condition = opslevel_service.test.aliases == toset(var.aliases) - error_message = "wrong aliases of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.api_document_path == var.api_document_path - error_message = "wrong api_document_path of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.description == var.description - error_message = replace(var.error_wrong_description, "TYPE", var.service_one) - } - - assert { - condition = opslevel_service.test.framework == var.framework - error_message = "wrong framework of opslevel_service resource" - } - - assert { - condition = startswith(opslevel_service.test.id, var.id_prefix) - error_message = replace(var.error_wrong_id, "TYPE", var.service_one) - } - - assert { - condition = opslevel_service.test.language == var.language - error_message = "wrong language of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.lifecycle_alias == var.lifecycle_alias - error_message = "wrong lifecycle_alias of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.name == var.name - error_message = "wrong name of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.note == var.note - error_message = "wrong note of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.owner == var.owner - error_message = "wrong owner of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.preferred_api_document_source == var.preferred_api_document_source - error_message = "wrong preferred_api_document_source of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.product == var.product - error_message = "wrong product of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.tags == var.tags - error_message = "wrong tags of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.tier_alias == var.tier_alias - error_message = "wrong tier_alias of opslevel_service resource" - } - -} - -run "resource_service_create_with_empty_optional_fields" { - - variables { - description = "" - framework = "" - language = "" - name = "New ${var.name} with empty fields" - product = "" - } - - module { - source = "./service" - } - - assert { - condition = opslevel_service.test.description == "" - error_message = var.error_expected_empty_string - } - - assert { - condition = opslevel_service.test.framework == "" - error_message = var.error_expected_empty_string - } - - assert { - condition = opslevel_service.test.language == "" - error_message = var.error_expected_empty_string - } - - assert { - condition = opslevel_service.test.product == "" - error_message = var.error_expected_empty_string - } - -} - -run "resource_service_update_unset_optional_fields" { - - variables { - aliases = null - api_document_path = null - description = null - framework = null - language = null - lifecycle_alias = null - note = null - owner = null - preferred_api_document_source = null - product = null - tags = null - tier_alias = null - } - - module { - source = "./service" - } - - assert { - condition = opslevel_service.test.aliases == null - error_message = var.error_expected_null_field - } - - assert { - condition = opslevel_service.test.api_document_path == null - error_message = var.error_expected_null_field - } - - assert { - condition = opslevel_service.test.description == null - error_message = var.error_expected_null_field - } - - assert { - condition = opslevel_service.test.framework == null - error_message = var.error_expected_null_field - } - - assert { - condition = opslevel_service.test.language == null - error_message = var.error_expected_null_field - } - - assert { - condition = opslevel_service.test.lifecycle_alias == null - error_message = var.error_expected_null_field - } - - assert { - condition = opslevel_service.test.note == null - error_message = var.error_expected_null_field - } - - assert { - condition = opslevel_service.test.owner == null - error_message = var.error_expected_null_field - } - - assert { - condition = opslevel_service.test.preferred_api_document_source == null - error_message = "expected 'PUSH' default for preferred_api_document_source in opslevel_service resource" - } - - assert { - condition = opslevel_service.test.product == null - error_message = var.error_expected_null_field - } - - assert { - condition = opslevel_service.test.tags == null - error_message = var.error_expected_null_field - } - - assert { - condition = opslevel_service.test.tier_alias == null - error_message = var.error_expected_null_field - } - -} - -run "resource_service_update_set_all_fields" { - - variables { - aliases = setunion(var.aliases, ["test_alias"]) - api_document_path = var.api_document_path - description = "${var.description} updated" - framework = upper(var.framework) - language = upper(var.language) - lifecycle_alias = run.from_lifecycle_get_lifecycle_alias.first_lifecycle.alias - name = "${var.name} updated" - note = "${var.note} updated" - owner = run.from_team_get_owner_id.first_team.id - preferred_api_document_source = var.preferred_api_document_source - product = var.product - tags = setunion(var.tags, ["key3:value3"]) - tier_alias = run.from_tier_get_tier_alias.first_tier.alias - } - - module { - source = "./service" - } - - assert { - condition = opslevel_service.test.aliases == toset(var.aliases) - error_message = "wrong aliases of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.api_document_path == var.api_document_path - error_message = "wrong api_document_path of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.description == var.description - error_message = replace(var.error_wrong_description, "TYPE", var.service_one) - } - - assert { - condition = opslevel_service.test.framework == var.framework - error_message = "wrong framework of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.language == var.language - error_message = "wrong language of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.lifecycle_alias == var.lifecycle_alias - error_message = "wrong lifecycle_alias of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.name == var.name - error_message = "wrong name of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.note == var.note - error_message = "wrong note of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.owner == var.owner - error_message = "wrong owner of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.preferred_api_document_source == var.preferred_api_document_source - error_message = "wrong preferred_api_document_source of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.product == var.product - error_message = "wrong product of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.tags == var.tags - error_message = "wrong tags of opslevel_service resource" - } - - assert { - condition = opslevel_service.test.tier_alias == var.tier_alias - error_message = "wrong tier_alias of opslevel_service resource" - } - -} - -run "datasource_services_all" { - - module { - source = "./service" - } - - assert { - condition = can(data.opslevel_services.all.services) - error_message = replace(var.error_unexpected_datasource_fields, "TYPE", var.services_all) - } - - assert { - condition = length(data.opslevel_services.all.services) > 0 - error_message = replace(var.error_empty_datasource, "TYPE", var.services_all) - } - - assert { - condition = alltrue([ - can(data.opslevel_services.all.services[0].id), - ]) - error_message = replace(var.error_unexpected_datasource_fields, "TYPE", var.services_all) - } - -} - -run "datasource_service_first" { - - module { - source = "./service" - } - - assert { - condition = alltrue([ - can(data.opslevel_service.first_service_by_id.alias), - can(data.opslevel_service.first_service_by_id.aliases), - can(data.opslevel_service.first_service_by_id.api_document_path), - can(data.opslevel_service.first_service_by_id.description), - can(data.opslevel_service.first_service_by_id.framework), - can(data.opslevel_service.first_service_by_id.id), - can(data.opslevel_service.first_service_by_id.language), - can(data.opslevel_service.first_service_by_id.lifecycle_alias), - can(data.opslevel_service.first_service_by_id.name), - can(data.opslevel_service.first_service_by_id.owner), - can(data.opslevel_service.first_service_by_id.owner_id), - can(data.opslevel_service.first_service_by_id.preferred_api_document_source), - can(data.opslevel_service.first_service_by_id.product), - can(data.opslevel_service.first_service_by_id.properties), - can(data.opslevel_service.first_service_by_id.repositories), - can(data.opslevel_service.first_service_by_id.tags), - can(data.opslevel_service.first_service_by_id.tier_alias), - ]) - error_message = replace(var.error_unexpected_datasource_fields, "TYPE", var.service_one) - } - - assert { - condition = data.opslevel_service.first_service_by_id.id == data.opslevel_services.all.services[0].id - error_message = replace(var.error_wrong_id, "TYPE", var.service_one) - } - -} diff --git a/tests/service.tftest.hcl b/tests/service.tftest.hcl new file mode 100644 index 00000000..cf40c639 --- /dev/null +++ b/tests/service.tftest.hcl @@ -0,0 +1,463 @@ +variables { + service_one = "opslevel_service" + services_all = "opslevel_services" + + # required fields + name = "TF Test Service" + + # lifecycle_alias fields + aliases = ["service_one"] + api_document_path = "test.json" + description = "Service description" + framework = "Ruby on Rails" + language = "ruby" + lifecycle_alias = null + note = "TF Test Service Note" + owner = null + preferred_api_document_source = "PUSH" + product = "widgets" + tags = toset(["key1:value1", "key2:value2"]) + tier_alias = null +} + +run "from_data_module" { + command = plan + plan_options { + target = [ + data.opslevel_lifecycles.all, + data.opslevel_teams.all, + data.opslevel_tiers.all + ] + } + + module { + source = "./data" + } +} + +run "resource_service_create_with_all_fields" { + + variables { + aliases = var.aliases + api_document_path = var.api_document_path + description = var.description + framework = var.framework + language = var.language + lifecycle_alias = run.from_data_module.first_lifecycle.alias + name = var.name + note = var.note + owner = run.from_data_module.first_team.id + preferred_api_document_source = var.preferred_api_document_source + product = var.product + tags = var.tags + tier_alias = run.from_data_module.first_tier.alias + } + + module { + source = "./opslevel_modules/modules/service" + } + + + assert { + condition = alltrue([ + can(opslevel_service.this.aliases), + can(opslevel_service.this.api_document_path), + can(opslevel_service.this.description), + can(opslevel_service.this.framework), + can(opslevel_service.this.id), + can(opslevel_service.this.language), + can(opslevel_service.this.lifecycle_alias), + can(opslevel_service.this.name), + can(opslevel_service.this.note), + can(opslevel_service.this.owner), + can(opslevel_service.this.preferred_api_document_source), + can(opslevel_service.this.product), + can(opslevel_service.this.tags), + can(opslevel_service.this.tier_alias), + ]) + error_message = replace(var.error_unexpected_resource_fields, "TYPE", var.service_one) + } + + assert { + condition = opslevel_service.this.aliases == toset(var.aliases) + error_message = format( + "expected '%v' but got '%v'", + var.aliases, + opslevel_service.this.aliases, + ) + } + + assert { + condition = opslevel_service.this.api_document_path == var.api_document_path + error_message = format( + "expected '%v' but got '%v'", + var.api_document_path, + opslevel_service.this.api_document_path, + ) + } + + assert { + condition = opslevel_service.this.description == var.description + error_message = format( + "expected '%v' but got '%v'", + var.description, + opslevel_service.this.description, + ) + } + + assert { + condition = opslevel_service.this.framework == var.framework + error_message = format( + "expected '%v' but got '%v'", + var.framework, + opslevel_service.this.framework, + ) + } + + assert { + condition = startswith(opslevel_service.this.id, var.id_prefix) + error_message = replace(var.error_wrong_id, "TYPE", var.service_one) + } + + assert { + condition = opslevel_service.this.language == var.language + error_message = format( + "expected '%v' but got '%v'", + var.language, + opslevel_service.this.language, + ) + } + + assert { + condition = opslevel_service.this.lifecycle_alias == var.lifecycle_alias + error_message = format( + "expected '%v' but got '%v'", + var.lifecycle_alias, + opslevel_service.this.lifecycle_alias, + ) + } + + assert { + condition = opslevel_service.this.name == var.name + error_message = format( + "expected '%v' but got '%v'", + var.name, + opslevel_service.this.name, + ) + } + + assert { + condition = opslevel_service.this.note == var.note + error_message = format( + "expected '%v' but got '%v'", + var.note, + opslevel_service.this.note, + ) + } + + assert { + condition = opslevel_service.this.owner == var.owner + error_message = format( + "expected '%v' but got '%v'", + var.owner, + opslevel_service.this.owner, + ) + } + + assert { + condition = opslevel_service.this.preferred_api_document_source == var.preferred_api_document_source + error_message = format( + "expected '%v' but got '%v'", + var.preferred_api_document_source, + opslevel_service.this.preferred_api_document_source, + ) + } + + assert { + condition = opslevel_service.this.product == var.product + error_message = format( + "expected '%v' but got '%v'", + var.product, + opslevel_service.this.product, + ) + } + + assert { + condition = opslevel_service.this.tags == var.tags + error_message = format( + "expected '%v' but got '%v'", + var.tags, + opslevel_service.this.tags, + ) + } + + assert { + condition = opslevel_service.this.tier_alias == var.tier_alias + error_message = format( + "expected '%v' but got '%v'", + var.tier_alias, + opslevel_service.this.tier_alias, + ) + } + +} + +run "resource_service_create_with_empty_optional_fields" { + + variables { + description = "" + framework = "" + language = "" + name = "New ${var.name} with empty fields" + product = "" + } + + module { + source = "./opslevel_modules/modules/service" + } + + assert { + condition = opslevel_service.this.description == "" + error_message = var.error_expected_empty_string + } + + assert { + condition = opslevel_service.this.framework == "" + error_message = var.error_expected_empty_string + } + + assert { + condition = opslevel_service.this.language == "" + error_message = var.error_expected_empty_string + } + + assert { + condition = opslevel_service.this.product == "" + error_message = var.error_expected_empty_string + } + +} + +run "resource_service_update_unset_optional_fields" { + + variables { + aliases = null + api_document_path = null + description = null + framework = null + language = null + lifecycle_alias = null + note = null + owner = null + preferred_api_document_source = null + product = null + tags = null + tier_alias = null + } + + module { + source = "./opslevel_modules/modules/service" + } + + assert { + condition = opslevel_service.this.aliases == null + error_message = var.error_expected_null_field + } + + assert { + condition = opslevel_service.this.api_document_path == null + error_message = var.error_expected_null_field + } + + assert { + condition = opslevel_service.this.description == null + error_message = var.error_expected_null_field + } + + assert { + condition = opslevel_service.this.framework == null + error_message = var.error_expected_null_field + } + + assert { + condition = opslevel_service.this.language == null + error_message = var.error_expected_null_field + } + + assert { + condition = opslevel_service.this.lifecycle_alias == null + error_message = var.error_expected_null_field + } + + assert { + condition = opslevel_service.this.note == null + error_message = var.error_expected_null_field + } + + assert { + condition = opslevel_service.this.owner == null + error_message = var.error_expected_null_field + } + + assert { + condition = opslevel_service.this.preferred_api_document_source == null + error_message = "expected 'PUSH' default for preferred_api_document_source in opslevel_service resource" + } + + assert { + condition = opslevel_service.this.product == null + error_message = var.error_expected_null_field + } + + assert { + condition = opslevel_service.this.tags == null + error_message = var.error_expected_null_field + } + + assert { + condition = opslevel_service.this.tier_alias == null + error_message = var.error_expected_null_field + } + +} + +run "resource_service_update_set_all_fields" { + + variables { + aliases = setunion(var.aliases, ["test_alias"]) + api_document_path = var.api_document_path + description = "${var.description} updated" + framework = upper(var.framework) + language = upper(var.language) + lifecycle_alias = run.from_data_module.first_lifecycle.alias + name = "${var.name} updated" + note = "${var.note} updated" + owner = run.from_data_module.first_team.id + preferred_api_document_source = var.preferred_api_document_source + product = var.product + tags = setunion(var.tags, ["key3:value3"]) + tier_alias = run.from_data_module.first_tier.alias + } + + module { + source = "./opslevel_modules/modules/service" + } + + assert { + condition = opslevel_service.this.aliases == toset(var.aliases) + error_message = format( + "expected '%v' but got '%v'", + var.aliases, + opslevel_service.this.aliases, + ) + } + + assert { + condition = opslevel_service.this.api_document_path == var.api_document_path + error_message = format( + "expected '%v' but got '%v'", + var.api_document_path, + opslevel_service.this.api_document_path, + ) + } + + assert { + condition = opslevel_service.this.description == var.description + error_message = format( + "expected '%v' but got '%v'", + var.description, + opslevel_service.this.description, + ) + } + + assert { + condition = opslevel_service.this.framework == var.framework + error_message = format( + "expected '%v' but got '%v'", + var.framework, + opslevel_service.this.framework, + ) + } + + assert { + condition = opslevel_service.this.language == var.language + error_message = format( + "expected '%v' but got '%v'", + var.language, + opslevel_service.this.language, + ) + } + + assert { + condition = opslevel_service.this.lifecycle_alias == var.lifecycle_alias + error_message = format( + "expected '%v' but got '%v'", + var.lifecycle_alias, + opslevel_service.this.lifecycle_alias, + ) + } + + assert { + condition = opslevel_service.this.name == var.name + error_message = format( + "expected '%v' but got '%v'", + var.name, + opslevel_service.this.name, + ) + } + + assert { + condition = opslevel_service.this.note == var.note + error_message = format( + "expected '%v' but got '%v'", + var.note, + opslevel_service.this.note, + ) + } + + assert { + condition = opslevel_service.this.owner == var.owner + error_message = format( + "expected '%v' but got '%v'", + var.owner, + opslevel_service.this.owner, + ) + } + + assert { + condition = opslevel_service.this.preferred_api_document_source == var.preferred_api_document_source + error_message = format( + "expected '%v' but got '%v'", + var.preferred_api_document_source, + opslevel_service.this.preferred_api_document_source, + ) + } + + assert { + condition = opslevel_service.this.product == var.product + error_message = format( + "expected '%v' but got '%v'", + var.product, + opslevel_service.this.product, + ) + } + + assert { + condition = opslevel_service.this.tags == var.tags + error_message = format( + "expected '%v' but got '%v'", + var.tags, + opslevel_service.this.tags, + ) + } + + assert { + condition = opslevel_service.this.tier_alias == var.tier_alias + error_message = format( + "expected '%v' but got '%v'", + var.tier_alias, + opslevel_service.this.tier_alias, + ) + } + +} From 9d0748fb6d1f01f091a5e77b3b826f58cbb8ec0c Mon Sep 17 00:00:00 2001 From: David Bloss Date: Wed, 9 Oct 2024 14:38:57 -0500 Subject: [PATCH 2/2] PR feedback, use id not alias --- opslevel/resource_opslevel_service.go | 4 ++-- submodules/opslevel-go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/opslevel/resource_opslevel_service.go b/opslevel/resource_opslevel_service.go index eed55529..6a011b84 100644 --- a/opslevel/resource_opslevel_service.go +++ b/opslevel/resource_opslevel_service.go @@ -72,7 +72,7 @@ func newServiceResourceModel(ctx context.Context, service opslevel.Service, give } else if string(service.Owner.Id) == givenModel.Owner.ValueString() || service.Owner.Alias == givenModel.Owner.ValueString() { serviceResourceModel.Owner = givenModel.Owner } else { - serviceResourceModel.Owner = OptionalStringValue(service.Owner.Alias) + serviceResourceModel.Owner = OptionalStringValue(string(service.Owner.Id)) } if service.Parent == nil { @@ -80,7 +80,7 @@ func newServiceResourceModel(ctx context.Context, service opslevel.Service, give } else if string(service.Parent.Id) == givenModel.Parent.ValueString() || slices.Contains(service.Parent.Aliases, givenModel.Parent.ValueString()) { serviceResourceModel.Parent = givenModel.Parent } else { - serviceResourceModel.Parent = OptionalStringValue(service.Parent.Aliases[0]) + serviceResourceModel.Parent = OptionalStringValue(string(service.Parent.Id)) } if givenModel.Aliases.IsNull() { diff --git a/submodules/opslevel-go b/submodules/opslevel-go index a05d27a2..be6cd2f2 160000 --- a/submodules/opslevel-go +++ b/submodules/opslevel-go @@ -1 +1 @@ -Subproject commit a05d27a21d24d397ae28789b9b05a384bfa1f821 +Subproject commit be6cd2f28a1c5551fac0017370264b4a5d131a92