Skip to content

Commit 519dd50

Browse files
author
Maksim Ryzhukhin
committed
test: add acceptance test for repeated registrant contact_id changes
Add TestAccRegisteredDomainResource_RepeatedRegistrantChange to cover the scenario where contact_id is updated multiple times. Previously, the second update would fail with 'unexpected unknown property value for registrantChange'. Also fix misleading comment in update.go about createRegistrantChange being called unconditionally after convergence. Signed-off-by: Maksim Ryzhukhin <mryzhukhin@rightandabove.com>
1 parent 5537836 commit 519dd50

2 files changed

Lines changed: 54 additions & 1 deletion

File tree

internal/framework/resources/registered_domain/resource_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,51 @@ func TestAccRegisteredDomainResource_RegistrantChange_WithExtendedAttrs(t *testi
142142
})
143143
}
144144

145+
func TestAccRegisteredDomainResource_RepeatedRegistrantChange(t *testing.T) {
146+
domainName := os.Getenv("DNSIMPLE_REGISTRANT_CHANGE_DOMAIN")
147+
contactID := os.Getenv("DNSIMPLE_REGISTRANT_CHANGE_CONTACT_ID")
148+
contactID2 := os.Getenv("DNSIMPLE_REGISTRANT_CHANGE_CONTACT_ID_2")
149+
resourceName := "dnsimple_registered_domain.test"
150+
151+
resource.Test(t, resource.TestCase{
152+
PreCheck: func() { testAccPreCheckRepeatedRegistrantChange(t) },
153+
ProtoV6ProviderFactories: test_utils.TestAccProtoV6ProviderFactories(),
154+
CheckDestroy: testAccCheckRegisteredDomainRegistrantChangeDestroy,
155+
Steps: []resource.TestStep{
156+
{
157+
// Import the existing domain
158+
ResourceName: resourceName,
159+
Config: testAccRegisteredDomainResourceConfig(domainName, "1234"),
160+
ImportStateId: domainName,
161+
ImportState: true,
162+
ImportStateVerify: false,
163+
ImportStatePersist: true,
164+
},
165+
{
166+
// First contact_id change
167+
Config: testAccRegisteredDomainResourceConfig(domainName, contactID),
168+
Check: resource.ComposeAggregateTestCheckFunc(
169+
resource.TestCheckResourceAttr(resourceName, "name", domainName),
170+
resource.TestCheckResourceAttrSet(resourceName, "registrant_change.id"),
171+
resource.TestCheckResourceAttr(resourceName, "registrant_change.contact_id", contactID),
172+
),
173+
ExpectNonEmptyPlan: true,
174+
},
175+
{
176+
// Second contact_id change - previously failed with:
177+
// "unexpected unknown property value for registrantChange"
178+
Config: testAccRegisteredDomainResourceConfig(domainName, contactID2),
179+
Check: resource.ComposeAggregateTestCheckFunc(
180+
resource.TestCheckResourceAttr(resourceName, "name", domainName),
181+
resource.TestCheckResourceAttrSet(resourceName, "registrant_change.id"),
182+
resource.TestCheckResourceAttr(resourceName, "registrant_change.contact_id", contactID2),
183+
),
184+
ExpectNonEmptyPlan: true,
185+
},
186+
},
187+
})
188+
}
189+
145190
func TestAccRegisteredDomainResource_WithOptions(t *testing.T) {
146191
domainName := utils.RandomName("com", "options")
147192
contactID := os.Getenv("DNSIMPLE_CONTACT_ID")
@@ -217,6 +262,13 @@ func testAccPreCheckRegistrantChange(t *testing.T) {
217262
}
218263
}
219264

265+
func testAccPreCheckRepeatedRegistrantChange(t *testing.T) {
266+
testAccPreCheckRegistrantChange(t)
267+
if os.Getenv("DNSIMPLE_REGISTRANT_CHANGE_CONTACT_ID_2") == "" {
268+
t.Fatal("DNSIMPLE_REGISTRANT_CHANGE_CONTACT_ID_2 must be set for acceptance tests")
269+
}
270+
}
271+
220272
func testAccRegisteredDomainImportStateIDFunc(resourceName string) resource.ImportStateIdFunc {
221273
return func(s *terraform.State) (string, error) {
222274
rs, ok := s.RootModule().Resources[resourceName]

internal/framework/resources/registered_domain/update.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@ func (r *RegisteredDomainResource) Update(ctx context.Context, req resource.Upda
156156
return
157157
}
158158
}
159-
// Create a new registrant change (either no previous change exists or previous one is already completed)
159+
// Pending registrant change has been converged or no pending change exists.
160+
// Always create a new registrant change when contact_id differs.
160161
createRegistrantChange(ctx, planData, r, resp)
161162
} else if !registrantChange.Id.IsNull() && registrantChange.State.ValueString() != consts.RegistrantChangeStateCompleted {
162163
registrantChangeResponse, err = r.config.Client.Registrar.GetRegistrantChange(ctx, r.config.AccountID, int(registrantChange.Id.ValueInt64()))

0 commit comments

Comments
 (0)