-
Notifications
You must be signed in to change notification settings - Fork 251
/
Copy pathresource_cloud_org_member_test.go
118 lines (104 loc) · 3.71 KB
/
resource_cloud_org_member_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package cloud_test
import (
"context"
"fmt"
"os"
"testing"
"github.com/grafana/terraform-provider-grafana/v3/internal/common"
"github.com/grafana/terraform-provider-grafana/v3/internal/testutils"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
)
// We need an actual user to test the org member resource
// This is a user created from my personal email, but it can be replaced by any existing user
const testOrgMemberUser = "julienduchesne1"
func TestAccResourceOrgMember(t *testing.T) {
testutils.CheckCloudAPITestsEnabled(t)
org := os.Getenv("GRAFANA_CLOUD_ORG")
resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccDeleteExistingOrgMember(t, org, testOrgMemberUser) },
ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
Steps: []resource.TestStep{
{
Config: testAccCloudOrgMember(org, testOrgMemberUser, "Admin", true),
Check: resource.ComposeTestCheckFunc(
testAccCheckOrgMember(org, testOrgMemberUser, true),
resource.TestCheckResourceAttr("grafana_cloud_org_member.test", "org", org),
resource.TestCheckResourceAttr("grafana_cloud_org_member.test", "user", testOrgMemberUser),
resource.TestCheckResourceAttr("grafana_cloud_org_member.test", "role", "Admin"),
resource.TestCheckResourceAttr("grafana_cloud_org_member.test", "receive_billing_emails", "true"),
),
},
{
Config: testAccCloudOrgMember(org, testOrgMemberUser, "Editor", false),
Check: resource.ComposeTestCheckFunc(
testAccCheckOrgMember(org, testOrgMemberUser, true),
resource.TestCheckResourceAttr("grafana_cloud_org_member.test", "org", org),
resource.TestCheckResourceAttr("grafana_cloud_org_member.test", "user", testOrgMemberUser),
resource.TestCheckResourceAttr("grafana_cloud_org_member.test", "role", "Editor"),
resource.TestCheckResourceAttr("grafana_cloud_org_member.test", "receive_billing_emails", "false"),
),
},
{
ResourceName: "grafana_cloud_org_member.test",
ImportState: true,
ImportStateVerify: true,
},
},
CheckDestroy: testAccCheckOrgMember(org, testOrgMemberUser, false),
})
}
func testAccCheckOrgMember(org, user string, shouldExist bool) resource.TestCheckFunc {
return func(s *terraform.State) error {
commonClient, ok := testutils.Provider.Meta().(*common.Client)
if !ok {
return fmt.Errorf("failed to get common client")
}
if commonClient.GrafanaCloudAPI == nil {
return fmt.Errorf("GrafanaCloudAPI is nil")
}
client := commonClient.GrafanaCloudAPI
resp, _, err := client.OrgsAPI.GetOrgMembers(context.Background(), org).Execute()
if err != nil {
return err
}
for _, member := range resp.Items {
if member.UserName == user {
if !shouldExist {
return fmt.Errorf("org member %s still exists", user)
}
return nil
}
}
if shouldExist {
return fmt.Errorf("org member %s does not exist", user)
}
return nil
}
}
func testAccDeleteExistingOrgMember(t *testing.T, org, name string) {
t.Helper()
client := testutils.Provider.Meta().(*common.Client).GrafanaCloudAPI
resp, _, err := client.OrgsAPI.GetOrgMembers(context.Background(), org).Execute()
if err != nil {
t.Error(err)
}
for _, member := range resp.Items {
if member.UserName == name {
_, err := client.OrgsAPI.DeleteOrgMember(context.Background(), org, member.UserName).Execute()
if err != nil {
t.Error(err)
}
}
}
}
func testAccCloudOrgMember(org string, user string, role string, receiveBillingEmails bool) string {
return fmt.Sprintf(`
resource "grafana_cloud_org_member" "test" {
org = "%s"
user = "%s"
role = "%s"
receive_billing_emails = %t
}
`, org, user, role, receiveBillingEmails)
}