@@ -4,9 +4,11 @@ import (
44 "fmt"
55 "testing"
66
7+ "github.com/grafana/grafana-openapi-client-go/client/folders"
78 "github.com/grafana/grafana-openapi-client-go/models"
89 "github.com/grafana/terraform-provider-grafana/internal/resources/grafana"
910 "github.com/grafana/terraform-provider-grafana/internal/testutils"
11+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
1012 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1113 "github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
1214)
@@ -15,17 +17,18 @@ func TestAccFolderPermission_basic(t *testing.T) {
1517 testutils .CheckOSSTestsEnabled (t , ">=9.0.0" ) // Folder permissions only work for service accounts in Grafana 9+, so we're just not testing versions before 9.
1618
1719 var (
18- folder models.Folder
19- team models.TeamDTO
20- user models.UserProfileDTO
21- sa models.ServiceAccountDTO
20+ folder models.Folder
21+ team models.TeamDTO
22+ user models.UserProfileDTO
23+ sa models.ServiceAccountDTO
24+ randomName = acctest .RandString (6 )
2225 )
2326
2427 resource .ParallelTest (t , resource.TestCase {
2528 ProviderFactories : testutils .ProviderFactories ,
2629 Steps : []resource.TestStep {
2730 {
28- Config : testAccFolderPermissionConfig_Basic ,
31+ Config : testAccFolderPermissionConfig_Basic ( randomName ) ,
2932 Check : resource .ComposeAggregateTestCheckFunc (
3033 folderCheckExists .exists ("grafana_folder.testFolder" , & folder ),
3134 teamCheckExists .exists ("grafana_team.testTeam" , & team ),
@@ -40,9 +43,30 @@ func TestAccFolderPermission_basic(t *testing.T) {
4043 ImportState : true ,
4144 ImportStateVerify : true ,
4245 },
46+ // Test delete the folder and check that TF sees a difference
47+ {
48+ PreConfig : func () {
49+ client := grafana .OAPIGlobalClient (testutils .Provider .Meta ())
50+ params := folders .NewDeleteFolderParams ().WithFolderUID (folder .UID )
51+ _ , err := client .Folders .DeleteFolder (params )
52+ if err != nil {
53+ t .Fatalf ("error deleting folder: %s" , err )
54+ }
55+ },
56+ RefreshState : true ,
57+ ExpectNonEmptyPlan : true ,
58+ },
59+ // Write back the folder to check that TF can reconcile
60+ {
61+ Config : testAccFolderPermissionConfig_Basic (randomName ),
62+ Check : resource .ComposeAggregateTestCheckFunc (
63+ folderCheckExists .exists ("grafana_folder.testFolder" , & folder ),
64+ resource .TestCheckResourceAttr ("grafana_folder_permission.testPermission" , "permissions.#" , "5" ),
65+ ),
66+ },
4367 // Test remove permissions by not setting any permissions
4468 {
45- Config : testAccFolderPermissionConfig_NoPermissions ,
69+ Config : testAccFolderPermissionConfig_NoPermissions ( randomName ) ,
4670 Check : resource .ComposeAggregateTestCheckFunc (
4771 folderCheckExists .exists ("grafana_folder.testFolder" , & folder ),
4872 resource .TestCheckResourceAttr ("grafana_folder_permission.testPermission" , "permissions.#" , "0" ),
@@ -51,7 +75,7 @@ func TestAccFolderPermission_basic(t *testing.T) {
5175 },
5276 // Reapply permissions
5377 {
54- Config : testAccFolderPermissionConfig_Basic ,
78+ Config : testAccFolderPermissionConfig_Basic ( randomName ) ,
5579 Check : resource .ComposeAggregateTestCheckFunc (
5680 folderCheckExists .exists ("grafana_folder.testFolder" , & folder ),
5781 teamCheckExists .exists ("grafana_team.testTeam" , & team ),
@@ -63,7 +87,7 @@ func TestAccFolderPermission_basic(t *testing.T) {
6387 },
6488 // Test remove permissions by removing the resource
6589 {
66- Config : testutils .WithoutResource (t , testAccFolderPermissionConfig_Basic , "grafana_folder_permission.testPermission" ),
90+ Config : testutils .WithoutResource (t , testAccFolderPermissionConfig_Basic ( randomName ) , "grafana_folder_permission.testPermission" ),
6791 Check : resource .ComposeAggregateTestCheckFunc (
6892 folderCheckExists .exists ("grafana_folder.testFolder" , & folder ),
6993 checkFolderPermissionsEmpty (& folder ),
@@ -139,30 +163,33 @@ func checkFolderPermissions(folder *models.Folder, expectedPerms []*models.Dashb
139163 return nil
140164}
141165
142- const testAccFolderPermissionConfig_Common = `
166+ func testAccFolderPermissionConfig_Common (name string ) string {
167+ return fmt .Sprintf (`
143168resource "grafana_folder" "testFolder" {
144- title = "terraform-test-folder-permissions "
169+ title = "%[1]s "
145170 }
146171
147172 resource "grafana_team" "testTeam" {
148- name = "terraform-test-team-permissions "
173+ name = "%[1]s "
149174 }
150175
151176 resource "grafana_user" "testAdminUser" {
152- email = "terraform-test-permissions @localhost"
153- name = "Terraform Test Permissions "
154- login = "ttp "
177+ email = "%[1]s @localhost"
178+ name = "%[1]s "
179+ login = "%[1]s "
155180 password = "zyx987"
156181 }
157182
158183 resource "grafana_service_account" "test" {
159- name = "terraform-test-service-account-folder-perms "
184+ name = "%[1]s "
160185 role = "Editor"
161186 is_disabled = false
162187 }
163- `
188+ ` , name )
189+ }
164190
165- const testAccFolderPermissionConfig_Basic = testAccFolderPermissionConfig_Common + `
191+ func testAccFolderPermissionConfig_Basic (name string ) string {
192+ return testAccFolderPermissionConfig_Common (name ) + `
166193resource "grafana_folder_permission" "testPermission" {
167194 folder_uid = grafana_folder.testFolder.uid
168195 permissions {
@@ -187,9 +214,12 @@ resource "grafana_folder_permission" "testPermission" {
187214 }
188215}
189216`
217+ }
190218
191- const testAccFolderPermissionConfig_NoPermissions = testAccFolderPermissionConfig_Common + `
192- resource "grafana_folder_permission" "testPermission" {
193- folder_uid = grafana_folder.testFolder.uid
219+ func testAccFolderPermissionConfig_NoPermissions (name string ) string {
220+ return testAccFolderPermissionConfig_Common (name ) + `
221+ resource "grafana_folder_permission" "testPermission" {
222+ folder_uid = grafana_folder.testFolder.uid
223+ }
224+ `
194225}
195- `
0 commit comments