@@ -2,168 +2,92 @@ package provider
2
2
3
3
import (
4
4
"fmt"
5
- "strconv"
6
- "strings"
7
5
"testing"
8
6
9
- "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
10
7
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
11
8
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
12
- "github.com/xanzy/go-gitlab"
13
9
)
14
10
15
11
func TestAccGitlabProjectBadge_basic (t * testing.T ) {
16
- var badge gitlab.ProjectBadge
17
- rInt := acctest .RandInt ()
12
+ testAccCheck (t )
13
+
14
+ testProject := testAccCreateProject (t )
18
15
19
16
resource .Test (t , resource.TestCase {
20
17
PreCheck : func () { testAccPreCheck (t ) },
21
18
ProviderFactories : providerFactories ,
22
19
CheckDestroy : testAccCheckGitlabProjectBadgeDestroy ,
23
20
Steps : []resource.TestStep {
24
- // Create a project and badge
21
+ // Create a project badge
25
22
{
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 ),
27
31
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" ),
34
34
),
35
35
},
36
- // Test ImportState
36
+ // Verify Import
37
37
{
38
- ResourceName : "gitlab_project_badge.foo " ,
38
+ ResourceName : "gitlab_project_badge.this " ,
39
39
ImportState : true ,
40
40
ImportStateVerify : true ,
41
41
},
42
42
// Update the project badge
43
43
{
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 ),
45
52
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" ),
52
55
),
53
56
},
57
+ // Verify Import
58
+ {
59
+ ResourceName : "gitlab_project_badge.this" ,
60
+ ImportState : true ,
61
+ ImportStateVerify : true ,
62
+ },
54
63
},
55
64
})
56
65
}
57
66
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
63
71
}
64
72
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 )
68
74
if err != nil {
69
75
return err
70
76
}
71
- repoName := rs .Primary .Attributes ["project" ]
72
- if repoName == "" {
73
- return fmt .Errorf ("No project ID is set" )
74
- }
75
77
76
- gotBadge , _ , err := testGitlabClient .ProjectBadges .GetProjectBadge (repoName , badgeID )
78
+ gotBadge , _ , err := testGitlabClient .ProjectBadges .GetProjectBadge (projectID , badgeID )
77
79
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
103
84
}
104
85
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" )
113
88
}
114
89
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
- }
126
90
return nil
127
91
}
128
92
return nil
129
93
}
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