Skip to content

Commit f20ff83

Browse files
authored
docker_hub_repository: handle missing state (#112)
fixes #111 also adds state upgrade tests to the acceptance tests Signed-off-by: Nick Santos <[email protected]>
1 parent 9ad98da commit f20ff83

3 files changed

Lines changed: 43 additions & 14 deletions

File tree

internal/provider/data_source_repository.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,11 +160,9 @@ func (d *RepositoryDataSource) Read(ctx context.Context, req datasource.ReadRequ
160160
data.FullDescription = types.StringValue(repository.FullDescription)
161161
data.Private = types.BoolValue(repository.IsPrivate)
162162
data.PullCount = types.Int64Value(repository.PullCount)
163-
164-
immutableTagsSettings := deserializeImmutableTagsSettings(
163+
data.ImmutableTagsSettings = deserializeImmutableTagsSettings(
165164
repository.ImmutableTagsSettings.Enabled,
166165
repository.ImmutableTagsSettings.Rules)
167-
data.ImmutableTagsSettings = &immutableTagsSettings
168166

169167
diags := resp.State.Set(ctx, &data)
170168
resp.Diagnostics.Append(diags...)

internal/provider/resource_repository.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,14 @@ type ImmutableTagsSettings struct {
5858
}
5959

6060
type RepositoryResourceModel struct {
61-
ID types.String `tfsdk:"id"`
62-
Namespace types.String `tfsdk:"namespace"`
63-
Name types.String `tfsdk:"name"`
64-
Description types.String `tfsdk:"description"`
65-
FullDescription types.String `tfsdk:"full_description"`
66-
Private types.Bool `tfsdk:"private"`
67-
PullCount types.Int64 `tfsdk:"pull_count"`
68-
ImmutableTagsSettings ImmutableTagsSettings `tfsdk:"immutable_tags_settings"`
61+
ID types.String `tfsdk:"id"`
62+
Namespace types.String `tfsdk:"namespace"`
63+
Name types.String `tfsdk:"name"`
64+
Description types.String `tfsdk:"description"`
65+
FullDescription types.String `tfsdk:"full_description"`
66+
Private types.Bool `tfsdk:"private"`
67+
PullCount types.Int64 `tfsdk:"pull_count"`
68+
ImmutableTagsSettings *ImmutableTagsSettings `tfsdk:"immutable_tags_settings"`
6969
}
7070

7171
func immutableTagsSettingsSchema() schema.SingleNestedAttribute {
@@ -435,14 +435,14 @@ func serializeImmutableTagsRules(plan RepositoryResourceModel) string {
435435
hubclient.ImmutableTagRulesSeparator)
436436
}
437437

438-
func deserializeImmutableTagsSettings(enabled bool, rules []string) ImmutableTagsSettings {
438+
func deserializeImmutableTagsSettings(enabled bool, rules []string) *ImmutableTagsSettings {
439439
if !enabled {
440-
return ImmutableTagsSettings{
440+
return &ImmutableTagsSettings{
441441
Enabled: types.BoolValue(false),
442442
Rules: types.ListValueMust(types.StringType, nil),
443443
}
444444
}
445-
return ImmutableTagsSettings{
445+
return &ImmutableTagsSettings{
446446
Enabled: types.BoolValue(true),
447447
Rules: typesListFromStringSlice(rules),
448448
}

internal/provider/resource_repository_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,37 @@ func TestAccRepositoryResource(t *testing.T) {
6464
})
6565
}
6666

67+
func TestAccRepositoryResource_Upgrade(t *testing.T) {
68+
namespace := os.Getenv("DOCKER_USERNAME")
69+
name := "example-repo" + randString(10)
70+
resource.Test(t, resource.TestCase{
71+
PreCheck: func() { testAccPreCheck(t) },
72+
Steps: []resource.TestStep{
73+
{
74+
ExternalProviders: map[string]resource.ExternalProvider{
75+
"docker": {
76+
VersionConstraint: "0.4.1",
77+
Source: "docker/docker",
78+
},
79+
},
80+
Config: testRepositoryResourceConfig(namespace, name),
81+
Check: resource.ComposeAggregateTestCheckFunc(
82+
resource.TestCheckResourceAttrSet("docker_hub_repository.test", "id"),
83+
),
84+
},
85+
{
86+
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories,
87+
Config: testRepositoryResourceConfigUpdated(namespace, name),
88+
Check: resource.ComposeAggregateTestCheckFunc(
89+
resource.TestCheckResourceAttrSet("docker_hub_repository.test", "id"),
90+
resource.TestCheckResourceAttr("docker_hub_repository.test", "description", "Updated example repository"),
91+
resource.TestCheckResourceAttr("docker_hub_repository.test", "immutable_tags_settings.enabled", "false"),
92+
),
93+
},
94+
},
95+
})
96+
}
97+
6798
func testRepositoryResourceConfig(namespace, name string) string {
6899
return fmt.Sprintf(`
69100
resource "docker_hub_repository" "test" {

0 commit comments

Comments
 (0)