@@ -3,9 +3,11 @@ package grafana
33import (
44 "fmt"
55 "strconv"
6+ "strings"
67 "testing"
78
89 gapi "github.com/grafana/grafana-api-golang-client"
10+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
911 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1012 "github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
1113)
@@ -14,37 +16,29 @@ func TestAccTeam_basic(t *testing.T) {
1416 CheckOSSTestsEnabled (t )
1517
1618 var team gapi.Team
19+ teamName := acctest .RandString (5 )
20+ teamNameUpdated := acctest .RandString (5 )
1721
18- // TODO: Make parallelizable
19- resource .Test (t , resource.TestCase {
22+ resource .ParallelTest (t , resource.TestCase {
2023 ProviderFactories : testAccProviderFactories ,
2124 CheckDestroy : testAccTeamCheckDestroy (& team ),
2225 Steps : []resource.TestStep {
2326 {
24- Config : testAccTeamConfig_basic ,
27+ Config : testAccTeamDefinition ( teamName , nil ) ,
2528 Check : resource .ComposeTestCheckFunc (
2629 testAccTeamCheckExists ("grafana_team.test" , & team ),
27- resource .TestCheckResourceAttr (
28- "grafana_team.test" , "name" , "terraform-acc-test" ,
29- ),
30- resource .TestCheckResourceAttr (
31- "grafana_team.test" ,
"email" ,
"[email protected] " ,
32- ),
33- resource .TestMatchResourceAttr (
34- "grafana_team.test" , "id" , idRegexp ,
35- ),
30+ resource .TestCheckResourceAttr ("grafana_team.test" , "name" , teamName ),
31+ resource .TestCheckResourceAttr ("grafana_team.test" , "email" , teamName + "@example.com" ),
32+ resource .TestMatchResourceAttr ("grafana_team.test" , "id" , idRegexp ),
3633 ),
3734 },
3835 {
39- Config : testAccTeamConfig_updateName ,
36+ Config : testAccTeamDefinition ( teamNameUpdated , nil ) ,
4037 Check : resource .ComposeTestCheckFunc (
4138 testAccTeamCheckExists ("grafana_team.test" , & team ),
42- resource .TestCheckResourceAttr (
43- "grafana_team.test" , "name" , "terraform-acc-test-update" ,
44- ),
45- resource .TestCheckResourceAttr (
46- "grafana_team.test" ,
"email" ,
"[email protected] " ,
47- ),
39+ resource .TestCheckResourceAttr ("grafana_team.test" , "name" , teamNameUpdated ),
40+ resource .TestCheckResourceAttr ("grafana_team.test" , "email" , teamNameUpdated + "@example.com" ),
41+ resource .TestMatchResourceAttr ("grafana_team.test" , "id" , idRegexp ),
4842 ),
4943 },
5044 {
@@ -61,46 +55,47 @@ func TestAccTeam_Members(t *testing.T) {
6155 CheckOSSTestsEnabled (t )
6256
6357 var team gapi.Team
58+ teamName := acctest .RandString (5 )
6459
65- // TODO: Make parallelizable
66- resource .Test (t , resource.TestCase {
60+ resource .ParallelTest (t , resource.TestCase {
6761 ProviderFactories : testAccProviderFactories ,
6862 CheckDestroy : testAccTeamCheckDestroy (& team ),
6963 Steps : []resource.TestStep {
7064 {
71- Config : testAccTeamConfig_memberAdd ,
65+ Config : testAccTeamDefinition (teamName , []string {
66+ "grafana_user.users.0.email" ,
67+ "grafana_user.users.1.email" ,
68+ }),
7269 Check : resource .ComposeTestCheckFunc (
7370 testAccTeamCheckExists ("grafana_team.test" , & team ),
74- resource .TestCheckResourceAttr (
75- "grafana_team.test" , "name" , "terraform-acc-test" ,
76- ),
77- resource .TestCheckResourceAttr (
78- "grafana_team.test" , "members.#" , "2" ,
79- ),
80- resource .TestCheckResourceAttr (
81- "grafana_team.test" ,
"members.0" ,
"[email protected] " ,
82- ),
83- resource .TestCheckResourceAttr (
84- "grafana_team.test" ,
"members.1" ,
"[email protected] " ,
85- ),
71+ resource .TestCheckResourceAttr ("grafana_team.test" , "name" , teamName ),
72+ resource .TestCheckResourceAttr ("grafana_team.test" , "members.#" , "2" ),
73+ resource .
TestCheckResourceAttr (
"grafana_team.test" ,
"members.0" ,
teamName + "[email protected] " ),
74+ resource .
TestCheckResourceAttr (
"grafana_team.test" ,
"members.1" ,
teamName + "[email protected] " ),
8675 ),
8776 },
77+ // Reorder members but only plan changes. There should be no changes.
8878 {
89- Config : testAccTeamConfig_memberReorder ,
79+ Config : testAccTeamDefinition (teamName , []string {
80+ "grafana_user.users.1.email" ,
81+ "grafana_user.users.0.email" ,
82+ }),
83+ PlanOnly : true ,
84+ },
85+ // When adding a new member, the state should be updated and re-sorted.
86+ {
87+ Config : testAccTeamDefinition (teamName , []string {
88+ "grafana_user.users.1.email" ,
89+ "grafana_user.users.0.email" ,
90+ "grafana_user.users.2.email" ,
91+ }),
9092 Check : resource .ComposeTestCheckFunc (
9193 testAccTeamCheckExists ("grafana_team.test" , & team ),
92- resource .TestCheckResourceAttr (
93- "grafana_team.test" , "name" , "terraform-acc-test" ,
94- ),
95- resource .TestCheckResourceAttr (
96- "grafana_team.test" , "members.#" , "2" ,
97- ),
98- resource .TestCheckResourceAttr (
99- "grafana_team.test" ,
"members.0" ,
"[email protected] " ,
100- ),
101- resource .TestCheckResourceAttr (
102- "grafana_team.test" ,
"members.1" ,
"[email protected] " ,
103- ),
94+ resource .TestCheckResourceAttr ("grafana_team.test" , "name" , teamName ),
95+ resource .TestCheckResourceAttr ("grafana_team.test" , "members.#" , "3" ),
96+ resource .
TestCheckResourceAttr (
"grafana_team.test" ,
"members.0" ,
teamName + "[email protected] " ),
97+ resource .
TestCheckResourceAttr (
"grafana_team.test" ,
"members.1" ,
teamName + "[email protected] " ),
98+ resource .
TestCheckResourceAttr (
"grafana_team.test" ,
"members.2" ,
teamName + "[email protected] " ),
10499 ),
105100 },
106101 // Test the import with members
@@ -111,15 +106,11 @@ func TestAccTeam_Members(t *testing.T) {
111106 ImportStateVerifyIgnore : []string {"ignore_externally_synced_members" },
112107 },
113108 {
114- Config : testAccTeamConfig_memberRemove ,
109+ Config : testAccTeamDefinition ( teamName , nil ) ,
115110 Check : resource .ComposeTestCheckFunc (
116111 testAccTeamCheckExists ("grafana_team.test" , & team ),
117- resource .TestCheckResourceAttr (
118- "grafana_team.test" , "name" , "terraform-acc-test" ,
119- ),
120- resource .TestCheckResourceAttr (
121- "grafana_team.test" , "members.#" , "0" ,
122- ),
112+ resource .TestCheckResourceAttr ("grafana_team.test" , "name" , teamName ),
113+ resource .TestCheckResourceAttr ("grafana_team.test" , "members.#" , "0" ),
123114 ),
124115 },
125116 },
@@ -133,9 +124,9 @@ func TestAccTeam_RemoveUnexistingMember(t *testing.T) {
133124
134125 var team gapi.Team
135126 var userID int64 = - 1
127+ teamName := acctest .RandString (5 )
136128
137- // TODO: Make parallelizable
138- resource .Test (t , resource.TestCase {
129+ resource .ParallelTest (t , resource.TestCase {
139130 ProviderFactories : testAccProviderFactories ,
140131 CheckDestroy : testAccTeamCheckDestroy (& team ),
141132 Steps : []resource.TestStep {
@@ -154,7 +145,7 @@ func TestAccTeam_RemoveUnexistingMember(t *testing.T) {
154145 t .Fatal (err )
155146 }
156147 },
157- Config :
testAccTeam_withMember ( "[email protected] " ),
148+ Config :
testAccTeamDefinition ( teamName , [] string { ` "[email protected] "` } ),
158149 Check : resource .ComposeTestCheckFunc (
159150 testAccTeamCheckExists ("grafana_team.test" , & team ),
160151 resource .TestCheckResourceAttr ("grafana_team.test" , "members.#" , "1" ),
@@ -168,7 +159,7 @@ func TestAccTeam_RemoveUnexistingMember(t *testing.T) {
168159 t .Fatal (err )
169160 }
170161 },
171- Config : testAccTeamConfig_basic ,
162+ Config : testAccTeamDefinition ( teamName , nil ) ,
172163 Check : resource .ComposeTestCheckFunc (
173164 testAccTeamCheckExists ("grafana_team.test" , & team ),
174165 resource .TestCheckResourceAttr ("grafana_team.test" , "members.#" , "0" ),
@@ -216,71 +207,29 @@ func testAccTeamCheckDestroy(a *gapi.Team) resource.TestCheckFunc {
216207 }
217208}
218209
219- const testAccTeamConfig_basic = `
220- resource "grafana_team" "test" {
221- name = "terraform-acc-test"
222- 223- }
224- `
225- const testAccTeamConfig_updateName = `
210+ func testAccTeamDefinition (name string , teamMembers []string ) string {
211+ definition := fmt .Sprintf (`
226212resource "grafana_team" "test" {
227- name = "terraform-acc-test-update"
228- 229- }
230- `
231- const testAccTeam_users = `
232- resource "grafana_user" "user_one" {
233- 234- name = "Team Test User 1"
235- login = "test-team-1"
236- password = "my-password"
237- is_admin = false
213+ name = "%[1]s"
214+ 215+ members = [ %[2]s ]
238216}
217+ ` , name , strings .Join (teamMembers , `, ` ))
239218
240- resource "grafana_user" "user_two" {
241- 242- name = "Team Test User 2"
243- login = "test-team-2"
219+ // If we're referencing a grafana_user resource, we need to create those users
220+ if len (teamMembers ) > 0 && strings .Contains (teamMembers [0 ], "grafana_user" ) {
221+ definition += fmt .Sprintf (`
222+ resource "grafana_user" "users" {
223+ count = 3
224+
225+ email = "%[1]s-user-${count.index}@example.com"
226+ name = "%[1]s-user-${count.index}"
227+ login = "%[1]s-user-${count.index}"
244228 password = "my-password"
245229 is_admin = false
246230}
247- `
248-
249- const testAccTeamConfig_memberAdd = testAccTeam_users + `
250- resource "grafana_team" "test" {
251- name = "terraform-acc-test"
252- 253- members = [
254- grafana_user.user_one.email,
255- grafana_user.user_two.email,
256- ]
257- }
258- `
259-
260- const testAccTeamConfig_memberReorder = testAccTeam_users + `
261- resource "grafana_team" "test" {
262- name = "terraform-acc-test"
263- 264- members = [
265- grafana_user.user_two.email,
266- grafana_user.user_one.email,
267- ]
268- }
269- `
270-
271- const testAccTeamConfig_memberRemove = testAccTeam_users + `
272- resource "grafana_team" "test" {
273- name = "terraform-acc-test"
274- 275- members = [ ]
276- }
277- `
231+ ` , name )
232+ }
278233
279- func testAccTeam_withMember (user string ) string {
280- return fmt .Sprintf (`
281- resource "grafana_team" "test" {
282- name = "terraform-acc-test"
283- 284- members = ["%s"]
285- }` , user )
234+ return definition
286235}
0 commit comments