Skip to content

Commit 38e1d42

Browse files
committed
resource/gitlab_project_badge: refactor tests to adhere to new guidelines
1 parent ec4f5ea commit 38e1d42

File tree

2 files changed

+61
-129
lines changed

2 files changed

+61
-129
lines changed

internal/provider/resource_gitlab_project_badge.go

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package provider
22

33
import (
44
"context"
5+
"fmt"
56
"log"
67
"strconv"
78
"strings"
@@ -85,9 +86,7 @@ func resourceGitlabProjectBadgeCreate(ctx context.Context, d *schema.ResourceDat
8586

8687
func resourceGitlabProjectBadgeRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
8788
client := meta.(*gitlab.Client)
88-
ids := strings.Split(d.Id(), ":")
89-
projectID := ids[0]
90-
badgeID, err := strconv.Atoi(ids[1])
89+
projectID, badgeID, err := resourceGitlabProjectBadgeParseID(d.Id())
9190
if err != nil {
9291
return diag.FromErr(err)
9392
}
@@ -110,9 +109,7 @@ func resourceGitlabProjectBadgeRead(ctx context.Context, d *schema.ResourceData,
110109

111110
func resourceGitlabProjectBadgeUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
112111
client := meta.(*gitlab.Client)
113-
ids := strings.Split(d.Id(), ":")
114-
projectID := ids[0]
115-
badgeID, err := strconv.Atoi(ids[1])
112+
projectID, badgeID, err := resourceGitlabProjectBadgeParseID(d.Id())
116113
if err != nil {
117114
return diag.FromErr(err)
118115
}
@@ -135,9 +132,7 @@ func resourceGitlabProjectBadgeUpdate(ctx context.Context, d *schema.ResourceDat
135132

136133
func resourceGitlabProjectBadgeDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
137134
client := meta.(*gitlab.Client)
138-
ids := strings.Split(d.Id(), ":")
139-
projectID := ids[0]
140-
badgeID, err := strconv.Atoi(ids[1])
135+
projectID, badgeID, err := resourceGitlabProjectBadgeParseID(d.Id())
141136
if err != nil {
142137
return diag.FromErr(err)
143138
}
@@ -160,3 +155,16 @@ func resourceGitlabProjectBadgeSetToState(d *schema.ResourceData, badge *gitlab.
160155
d.Set("rendered_image_url", badge.RenderedImageURL)
161156
d.Set("project", projectID)
162157
}
158+
159+
func resourceGitlabProjectBadgeParseID(id string) (string, int, error) {
160+
ids := strings.Split(id, ":")
161+
if len(ids) != 2 {
162+
return "", 0, fmt.Errorf("unexpected format of ID (%s), expected 'project:badge_id'", id)
163+
}
164+
projectID := ids[0]
165+
badgeID, err := strconv.Atoi(ids[1])
166+
if err != nil {
167+
return "", 0, fmt.Errorf("unexpected format of ID (%s), expected 'project:badge_id'", id)
168+
}
169+
return projectID, badgeID, nil
170+
}

internal/provider/resource_gitlab_project_badge_test.go

Lines changed: 44 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -2,168 +2,92 @@ package provider
22

33
import (
44
"fmt"
5-
"strconv"
6-
"strings"
75
"testing"
86

9-
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
107
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
118
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
12-
"github.com/xanzy/go-gitlab"
139
)
1410

1511
func TestAccGitlabProjectBadge_basic(t *testing.T) {
16-
var badge gitlab.ProjectBadge
17-
rInt := acctest.RandInt()
12+
testAccCheck(t)
13+
14+
testProject := testAccCreateProject(t)
1815

1916
resource.Test(t, resource.TestCase{
2017
PreCheck: func() { testAccPreCheck(t) },
2118
ProviderFactories: providerFactories,
2219
CheckDestroy: testAccCheckGitlabProjectBadgeDestroy,
2320
Steps: []resource.TestStep{
24-
// Create a project and badge
21+
// Create a project badge
2522
{
26-
Config: testAccGitlabProjectBadgeConfig(rInt),
23+
Config: fmt.Sprintf(`
24+
resource "gitlab_project_badge" "this" {
25+
project = "%d"
26+
link_url = "https://example.com/badge"
27+
image_url = "https://example.com/badge.svg"
28+
name = "badge"
29+
}
30+
`, testProject.ID),
2731
Check: resource.ComposeTestCheckFunc(
28-
testAccCheckGitlabProjectBadgeExists("gitlab_project_badge.foo", &badge),
29-
testAccCheckGitlabProjectBadgeAttributes(&badge, &testAccGitlabProjectBadgeExpectedAttributes{
30-
LinkURL: fmt.Sprintf("https://example.com/badge-%d", rInt),
31-
ImageURL: fmt.Sprintf("https://example.com/badge-%d.svg", rInt),
32-
Name: fmt.Sprintf("badge-%d", rInt),
33-
}),
32+
resource.TestCheckResourceAttrSet("gitlab_project_badge.this", "rendered_link_url"),
33+
resource.TestCheckResourceAttrSet("gitlab_project_badge.this", "rendered_image_url"),
3434
),
3535
},
36-
// Test ImportState
36+
// Verify Import
3737
{
38-
ResourceName: "gitlab_project_badge.foo",
38+
ResourceName: "gitlab_project_badge.this",
3939
ImportState: true,
4040
ImportStateVerify: true,
4141
},
4242
// Update the project badge
4343
{
44-
Config: testAccGitlabProjectBadgeUpdateConfig(rInt),
44+
Config: fmt.Sprintf(`
45+
resource "gitlab_project_badge" "this" {
46+
project = "%d"
47+
link_url = "https://example.com/badge-updated"
48+
image_url = "https://example.com/badge-updated.svg"
49+
name = "badge-updated"
50+
}
51+
`, testProject.ID),
4552
Check: resource.ComposeTestCheckFunc(
46-
testAccCheckGitlabProjectBadgeExists("gitlab_project_badge.foo", &badge),
47-
testAccCheckGitlabProjectBadgeAttributes(&badge, &testAccGitlabProjectBadgeExpectedAttributes{
48-
LinkURL: fmt.Sprintf("https://example.com/badge-%d", rInt),
49-
ImageURL: fmt.Sprintf("https://example.com/badge-%d.svg", rInt),
50-
Name: fmt.Sprintf("badge-%d", rInt),
51-
}),
53+
resource.TestCheckResourceAttrSet("gitlab_project_badge.this", "rendered_link_url"),
54+
resource.TestCheckResourceAttrSet("gitlab_project_badge.this", "rendered_image_url"),
5255
),
5356
},
57+
// Verify Import
58+
{
59+
ResourceName: "gitlab_project_badge.this",
60+
ImportState: true,
61+
ImportStateVerify: true,
62+
},
5463
},
5564
})
5665
}
5766

58-
func testAccCheckGitlabProjectBadgeExists(n string, badge *gitlab.ProjectBadge) resource.TestCheckFunc {
59-
return func(s *terraform.State) error {
60-
rs, ok := s.RootModule().Resources[n]
61-
if !ok {
62-
return fmt.Errorf("Not Found: %s", n)
67+
func testAccCheckGitlabProjectBadgeDestroy(s *terraform.State) error {
68+
for _, rs := range s.RootModule().Resources {
69+
if rs.Type != "gitlab_project_badge" {
70+
continue
6371
}
6472

65-
splitID := strings.Split(rs.Primary.ID, ":")
66-
67-
badgeID, err := strconv.Atoi(splitID[len(splitID)-1])
73+
projectID, badgeID, err := resourceGitlabProjectBadgeParseID(rs.Primary.ID)
6874
if err != nil {
6975
return err
7076
}
71-
repoName := rs.Primary.Attributes["project"]
72-
if repoName == "" {
73-
return fmt.Errorf("No project ID is set")
74-
}
7577

76-
gotBadge, _, err := testGitlabClient.ProjectBadges.GetProjectBadge(repoName, badgeID)
78+
gotBadge, _, err := testGitlabClient.ProjectBadges.GetProjectBadge(projectID, badgeID)
7779
if err != nil {
78-
return err
79-
}
80-
*badge = *gotBadge
81-
return nil
82-
}
83-
}
84-
85-
type testAccGitlabProjectBadgeExpectedAttributes struct {
86-
LinkURL string
87-
ImageURL string
88-
Name string
89-
}
90-
91-
func testAccCheckGitlabProjectBadgeAttributes(badge *gitlab.ProjectBadge, want *testAccGitlabProjectBadgeExpectedAttributes) resource.TestCheckFunc {
92-
return func(s *terraform.State) error {
93-
if badge.LinkURL != want.LinkURL {
94-
return fmt.Errorf("got link_url %q; want %q", badge.LinkURL, want.LinkURL)
95-
}
96-
97-
if badge.ImageURL != want.ImageURL {
98-
return fmt.Errorf("got image_url %s; want %s", badge.ImageURL, want.ImageURL)
99-
}
100-
101-
if badge.Name != want.Name {
102-
return fmt.Errorf("got name %q; want %q", badge.Name, want.Name)
80+
if !is404(err) {
81+
return err
82+
}
83+
return nil
10384
}
10485

105-
return nil
106-
}
107-
}
108-
109-
func testAccCheckGitlabProjectBadgeDestroy(s *terraform.State) error {
110-
for _, rs := range s.RootModule().Resources {
111-
if rs.Type != "gitlab_project" {
112-
continue
86+
if gotBadge != nil {
87+
return fmt.Errorf("Badge still exists")
11388
}
11489

115-
gotRepo, resp, err := testGitlabClient.Projects.GetProject(rs.Primary.ID, nil)
116-
if err == nil {
117-
if gotRepo != nil && fmt.Sprintf("%d", gotRepo.ID) == rs.Primary.ID {
118-
if gotRepo.MarkedForDeletionAt == nil {
119-
return fmt.Errorf("Repository still exists")
120-
}
121-
}
122-
}
123-
if resp.StatusCode != 404 {
124-
return err
125-
}
12690
return nil
12791
}
12892
return nil
12993
}
130-
131-
func testAccGitlabProjectBadgeConfig(rInt int) string {
132-
return fmt.Sprintf(`
133-
resource "gitlab_project" "foo" {
134-
name = "foo-%d"
135-
description = "Terraform acceptance tests"
136-
137-
# So that acceptance tests can be run in a gitlab organization
138-
# with no billing
139-
visibility_level = "public"
140-
}
141-
142-
resource "gitlab_project_badge" "foo" {
143-
project = "${gitlab_project.foo.id}"
144-
link_url = "https://example.com/badge-%d"
145-
image_url = "https://example.com/badge-%d.svg"
146-
name = "badge-%d"
147-
}
148-
`, rInt, rInt, rInt, rInt)
149-
}
150-
151-
func testAccGitlabProjectBadgeUpdateConfig(rInt int) string {
152-
return fmt.Sprintf(`
153-
resource "gitlab_project" "foo" {
154-
name = "foo-%d"
155-
description = "Terraform acceptance tests"
156-
157-
# So that acceptance tests can be run in a gitlab organization
158-
# with no billing
159-
visibility_level = "public"
160-
}
161-
162-
resource "gitlab_project_badge" "foo" {
163-
project = "${gitlab_project.foo.id}"
164-
link_url = "https://example.com/badge-%d"
165-
image_url = "https://example.com/badge-%d.svg"
166-
name = "badge-%d"
167-
}
168-
`, rInt, rInt, rInt, rInt)
169-
}

0 commit comments

Comments
 (0)