Skip to content

Commit 931473a

Browse files
Add test for group membership
1 parent b9b5207 commit 931473a

File tree

1 file changed

+166
-0
lines changed

1 file changed

+166
-0
lines changed
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
package gitlab
2+
3+
import (
4+
"fmt"
5+
"strconv"
6+
"testing"
7+
8+
"github.com/hashicorp/terraform/helper/acctest"
9+
"github.com/hashicorp/terraform/helper/resource"
10+
"github.com/hashicorp/terraform/terraform"
11+
"github.com/xanzy/go-gitlab"
12+
)
13+
14+
func TestAccGitlabGroupMembership_basic(t *testing.T) {
15+
var membership gitlab.GroupMember
16+
rInt := acctest.RandInt()
17+
18+
resource.Test(t, resource.TestCase{PreCheck: func() { testAccPreCheck(t) },
19+
Providers: testAccProviders,
20+
CheckDestroy: testAccCheckGitlabGroupMembershipDestroy,
21+
Steps: []resource.TestStep{
22+
23+
// Assign member to the group as a developer
24+
{
25+
Config: testAccGitlabGroupMembershipConfig(rInt),
26+
Check: resource.ComposeTestCheckFunc(testAccCheckGitlabGroupMembershipExists("gitlab_group_membership.foo", &membership), testAccCheckGitlabGroupMembershipAttributes(&membership, &testAccGitlabGroupMembershipExpectedAttributes{
27+
access_level: fmt.Sprintf("developer"),
28+
})),
29+
},
30+
31+
// Update the group member to change the access level (use testAccGitlabGroupMembershipUpdateConfig for Config)
32+
{
33+
Config: testAccGitlabGroupMembershipUpdateConfig(rInt),
34+
Check: resource.ComposeTestCheckFunc(testAccCheckGitlabGroupMembershipExists("gitlab_group_membership.foo", &membership), testAccCheckGitlabGroupMembershipAttributes(&membership, &testAccGitlabGroupMembershipExpectedAttributes{
35+
access_level: fmt.Sprintf("guest"),
36+
})),
37+
},
38+
39+
// Update the group member to change the access level back
40+
{
41+
Config: testAccGitlabGroupMembershipConfig(rInt),
42+
Check: resource.ComposeTestCheckFunc(testAccCheckGitlabGroupMembershipExists("gitlab_group_membership.foo", &membership), testAccCheckGitlabGroupMembershipAttributes(&membership, &testAccGitlabGroupMembershipExpectedAttributes{
43+
access_level: fmt.Sprintf("developer"),
44+
})),
45+
},
46+
},
47+
})
48+
}
49+
50+
func testAccCheckGitlabGroupMembershipExists(n string, membership *gitlab.GroupMember) resource.TestCheckFunc {
51+
return func(s *terraform.State) error {
52+
rs, ok := s.RootModule().Resources[n]
53+
conn := testAccProvider.Meta().(*gitlab.Client)
54+
if !ok {
55+
return fmt.Errorf("Not found: %s", n)
56+
}
57+
58+
groupID := rs.Primary.Attributes["group_id"]
59+
if groupID == "" {
60+
return fmt.Errorf("No group ID is set")
61+
}
62+
63+
userID := rs.Primary.Attributes["user_id"]
64+
id, _ := strconv.Atoi(userID)
65+
if userID == "" {
66+
return fmt.Errorf("No user id is set")
67+
}
68+
69+
gotGroupMembership, _, err := conn.GroupMembers.GetGroupMember(groupID, id)
70+
if err != nil {
71+
return err
72+
}
73+
74+
*membership = *gotGroupMembership
75+
return nil
76+
}
77+
}
78+
79+
type testAccGitlabGroupMembershipExpectedAttributes struct {
80+
access_level string
81+
}
82+
83+
func testAccCheckGitlabGroupMembershipAttributes(membership *gitlab.GroupMember, want *testAccGitlabGroupMembershipExpectedAttributes) resource.TestCheckFunc {
84+
return func(s *terraform.State) error {
85+
86+
access_level_id, ok := accessLevel[membership.AccessLevel]
87+
if !ok {
88+
return fmt.Errorf("Invalid access level '%s'", access_level_id)
89+
}
90+
if access_level_id != want.access_level {
91+
return fmt.Errorf("got access level %s; want %s", access_level_id, want.access_level)
92+
}
93+
return nil
94+
}
95+
}
96+
97+
func testAccCheckGitlabGroupMembershipDestroy(s *terraform.State) error {
98+
conn := testAccProvider.Meta().(*gitlab.Client)
99+
100+
for _, rs := range s.RootModule().Resources {
101+
if rs.Type != "gitlab_group_membership" {
102+
continue
103+
}
104+
105+
groupID := rs.Primary.Attributes["group_id"]
106+
userID := rs.Primary.Attributes["user_id"]
107+
108+
// GetGroupMember needs int type for userID
109+
userIDI, err := strconv.Atoi(userID)
110+
gotMembership, resp, err := conn.GroupMembers.GetGroupMember(groupID, userIDI)
111+
if err != nil {
112+
if gotMembership != nil && fmt.Sprintf("%d", gotMembership.AccessLevel) == rs.Primary.Attributes["access_level"] {
113+
return fmt.Errorf("Group still has member.")
114+
}
115+
return nil
116+
}
117+
118+
if resp.StatusCode != 404 {
119+
return err
120+
}
121+
return nil
122+
}
123+
return nil
124+
}
125+
126+
func testAccGitlabGroupMembershipConfig(rInt int) string {
127+
return fmt.Sprintf(`resource "gitlab_group_membership" "foo" {
128+
group_id = "${gitlab_group.foo.id}"
129+
user_id = "${gitlab_user.test.id}"
130+
access_level = "developer"
131+
}
132+
133+
resource "gitlab_group" "foo" {
134+
name = "foo%d"
135+
path = "foo%d"
136+
}
137+
138+
resource "gitlab_user" "test" {
139+
name = "foo%d"
140+
username = "listest%d"
141+
password = "test%dtt"
142+
email = "listest%[email protected]"
143+
}
144+
`, rInt, rInt, rInt, rInt, rInt)
145+
}
146+
147+
func testAccGitlabGroupMembershipUpdateConfig(rInt int) string {
148+
return fmt.Sprintf(`resource "gitlab_group_membership" "foo" {
149+
group_id = "${gitlab_group.foo.id}"
150+
user_id = "${gitlab_user.test.id}"
151+
access_level = "guest"
152+
}
153+
154+
resource "gitlab_group" "foo" {
155+
name = "foo%d"
156+
path = "foo%d"
157+
}
158+
159+
resource "gitlab_user" "test" {
160+
name = "foo%d"
161+
username = "listest%d"
162+
password = "test%dtt"
163+
email = "listest%[email protected]"
164+
}
165+
`, rInt, rInt, rInt, rInt, rInt)
166+
}

0 commit comments

Comments
 (0)