Skip to content

Commit 9b479bf

Browse files
Playlist tests: Use OpenAPI client (#1140)
* Playlist tests: Use OpenAPI client Gets rid of the manually written checkers in favor of the new ones that use the OpenAPI client * Get by ID, for older versions * Add version restriction for org test
1 parent 77faf3f commit 9b479bf

File tree

2 files changed

+34
-73
lines changed

2 files changed

+34
-73
lines changed

internal/resources/grafana/common_check_exists_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/grafana/grafana-openapi-client-go/client/datasources"
1212
"github.com/grafana/grafana-openapi-client-go/client/folders"
1313
"github.com/grafana/grafana-openapi-client-go/client/library_elements"
14+
"github.com/grafana/grafana-openapi-client-go/client/playlists"
1415
"github.com/grafana/grafana-openapi-client-go/client/service_accounts"
1516
"github.com/grafana/grafana-openapi-client-go/client/teams"
1617
"github.com/grafana/grafana-openapi-client-go/client/users"
@@ -57,6 +58,19 @@ var (
5758
return payloadOrError(resp, err)
5859
},
5960
)
61+
playlistCheckExists = newCheckExistsHelper(
62+
func(p *models.Playlist) string {
63+
if p.UID == "" {
64+
return strconv.FormatInt(p.ID, 10)
65+
}
66+
return p.UID
67+
},
68+
func(client *goapi.GrafanaHTTPAPI, id string) (*models.Playlist, error) {
69+
params := playlists.NewGetPlaylistParams().WithUID(id)
70+
resp, err := client.Playlists.GetPlaylist(params, nil)
71+
return payloadOrError(resp, err)
72+
},
73+
)
6074
roleCheckExists = newCheckExistsHelper(
6175
func(r *models.RoleDTO) string { return r.UID },
6276
func(client *goapi.GrafanaHTTPAPI, id string) (*models.RoleDTO, error) {

internal/resources/grafana/resource_playlist_test.go

Lines changed: 20 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ package grafana_test
22

33
import (
44
"fmt"
5-
"strings"
65
"testing"
76

87
gapi "github.com/grafana/grafana-api-golang-client"
9-
"github.com/grafana/terraform-provider-grafana/internal/common"
8+
"github.com/grafana/grafana-openapi-client-go/client/playlists"
9+
"github.com/grafana/grafana-openapi-client-go/models"
1010
"github.com/grafana/terraform-provider-grafana/internal/resources/grafana"
1111
"github.com/grafana/terraform-provider-grafana/internal/testutils"
1212
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
@@ -20,15 +20,16 @@ func TestAccPlaylist_basic(t *testing.T) {
2020
testutils.CheckOSSTestsEnabled(t)
2121

2222
rName := acctest.RandomWithPrefix("tf-acc-test")
23+
var playlist models.Playlist
2324

2425
resource.ParallelTest(t, resource.TestCase{
2526
ProviderFactories: testutils.ProviderFactories,
26-
CheckDestroy: testAccPlaylistDestroy,
27+
CheckDestroy: playlistCheckExists.destroyed(&playlist, nil),
2728
Steps: []resource.TestStep{
2829
{
2930
Config: testAccPlaylistConfigBasic(rName, "5m"),
3031
Check: resource.ComposeTestCheckFunc(
31-
testAccPlaylistCheckExists(),
32+
playlistCheckExists.exists(paylistResource, &playlist),
3233
resource.TestMatchResourceAttr(paylistResource, "id", defaultOrgIDRegexp),
3334
resource.TestCheckResourceAttr(paylistResource, "name", rName),
3435
resource.TestCheckResourceAttr(paylistResource, "item.#", "2"),
@@ -56,29 +57,30 @@ func TestAccPlaylist_update(t *testing.T) {
5657

5758
rName := acctest.RandomWithPrefix("tf-acc-test")
5859
updatedName := "updated name"
60+
var playlist models.Playlist
5961

6062
resource.ParallelTest(t, resource.TestCase{
6163
ProviderFactories: testutils.ProviderFactories,
62-
CheckDestroy: testAccPlaylistDestroy,
64+
CheckDestroy: playlistCheckExists.destroyed(&playlist, nil),
6365
Steps: []resource.TestStep{
6466
{
6567
Config: testAccPlaylistConfigBasic(rName, "5m"),
6668
Check: resource.ComposeTestCheckFunc(
67-
testAccPlaylistCheckExists(),
69+
playlistCheckExists.exists(paylistResource, &playlist),
6870
resource.TestCheckResourceAttr(paylistResource, "interval", "5m"),
6971
),
7072
},
7173
{
7274
Config: testAccPlaylistConfigBasic(rName, "10m"),
7375
Check: resource.ComposeTestCheckFunc(
74-
testAccPlaylistCheckExists(),
76+
playlistCheckExists.exists(paylistResource, &playlist),
7577
resource.TestCheckResourceAttr(paylistResource, "interval", "10m"),
7678
),
7779
},
7880
{
7981
Config: testAccPlaylistConfigUpdate(updatedName),
8082
Check: resource.ComposeTestCheckFunc(
81-
testAccPlaylistCheckExists(),
83+
playlistCheckExists.exists(paylistResource, &playlist),
8284
resource.TestMatchResourceAttr(paylistResource, "id", defaultOrgIDRegexp),
8385
resource.TestCheckResourceAttr(paylistResource, "name", updatedName),
8486
resource.TestCheckResourceAttr(paylistResource, "item.#", "1"),
@@ -103,15 +105,16 @@ func TestAccPlaylist_disappears(t *testing.T) {
103105
testutils.CheckOSSTestsEnabled(t)
104106

105107
rName := acctest.RandomWithPrefix("tf-acc-test")
108+
var playlist models.Playlist
106109

107110
resource.ParallelTest(t, resource.TestCase{
108111
ProviderFactories: testutils.ProviderFactories,
109-
CheckDestroy: testAccPlaylistDestroy,
112+
CheckDestroy: playlistCheckExists.destroyed(&playlist, nil),
110113
Steps: []resource.TestStep{
111114
{
112115
Config: testAccPlaylistConfigBasic(rName, "5m"),
113116
Check: resource.ComposeTestCheckFunc(
114-
testAccPlaylistCheckExists(),
117+
playlistCheckExists.exists(paylistResource, &playlist),
115118
testAccPlaylistDisappears(),
116119
),
117120
ExpectNonEmptyPlan: true,
@@ -121,14 +124,15 @@ func TestAccPlaylist_disappears(t *testing.T) {
121124
}
122125

123126
func TestAccPlaylist_inOrg(t *testing.T) {
124-
testutils.CheckOSSTestsEnabled(t)
127+
testutils.CheckOSSTestsEnabled(t, ">=9.0.0") // Querying org-specific playlists is broken pre-9
125128

126129
rName := acctest.RandomWithPrefix("tf-acc-test")
127130
var org gapi.Org
131+
var playlist models.Playlist
128132

129133
resource.ParallelTest(t, resource.TestCase{
130134
ProviderFactories: testutils.ProviderFactories,
131-
CheckDestroy: testAccPlaylistDestroy,
135+
CheckDestroy: playlistCheckExists.destroyed(&playlist, &org),
132136
Steps: []resource.TestStep{
133137
{
134138
Config: testAccPlaylistConfigInOrg(rName, "5m"),
@@ -138,7 +142,7 @@ func TestAccPlaylist_inOrg(t *testing.T) {
138142
testAccOrganizationCheckExists("grafana_organization.test", &org),
139143
checkResourceIsInOrg(paylistResource, "grafana_organization.test"),
140144

141-
testAccPlaylistCheckExists(),
145+
playlistCheckExists.exists(paylistResource, &playlist),
142146
resource.TestCheckResourceAttr(paylistResource, "name", rName),
143147
resource.TestCheckResourceAttr(paylistResource, "item.#", "2"),
144148
resource.TestCheckTypeSetElemNestedAttrs(paylistResource, "item.*", map[string]string{
@@ -160,39 +164,6 @@ func TestAccPlaylist_inOrg(t *testing.T) {
160164
})
161165
}
162166

163-
func testAccPlaylistCheckExists() resource.TestCheckFunc {
164-
return func(s *terraform.State) error {
165-
rs, ok := s.RootModule().Resources[paylistResource]
166-
if !ok {
167-
return fmt.Errorf("resource not found: %s\n %#v", paylistResource, s.RootModule().Resources)
168-
}
169-
170-
if rs.Primary.ID == "" {
171-
return fmt.Errorf("resource id not set")
172-
}
173-
174-
client := testutils.Provider.Meta().(*common.Client).GrafanaAPI
175-
176-
orgID, playlistID := grafana.SplitOrgResourceID(rs.Primary.ID)
177-
178-
// If the org ID is set, check that the playlist doesn't exist in the default org
179-
if orgID > 1 {
180-
playlist, err := client.Playlist(playlistID)
181-
if err == nil || playlist != nil {
182-
return fmt.Errorf("expected no playlist with ID %s in default org but found one", playlistID)
183-
}
184-
client = client.WithOrgID(orgID)
185-
}
186-
187-
_, err := client.Playlist(playlistID)
188-
if err != nil {
189-
return fmt.Errorf("error getting playlist: %w", err)
190-
}
191-
192-
return nil
193-
}
194-
}
195-
196167
func testAccPlaylistDisappears() resource.TestCheckFunc {
197168
return func(s *terraform.State) error {
198169
rs, ok := s.RootModule().Resources[paylistResource]
@@ -204,36 +175,12 @@ func testAccPlaylistDisappears() resource.TestCheckFunc {
204175
return fmt.Errorf("resource id not set")
205176
}
206177

207-
client, _, playlistID := grafana.ClientFromExistingOrgResource(testutils.Provider.Meta(), rs.Primary.ID)
208-
209-
return client.DeletePlaylist(playlistID)
178+
client, _, playlistID := grafana.OAPIClientFromExistingOrgResource(testutils.Provider.Meta(), rs.Primary.ID)
179+
_, err := client.Playlists.DeletePlaylist(playlists.NewDeletePlaylistParams().WithUID(playlistID), nil)
180+
return err
210181
}
211182
}
212183

213-
func testAccPlaylistDestroy(s *terraform.State) error {
214-
for _, rs := range s.RootModule().Resources {
215-
if rs.Type != "grafana_playlist" {
216-
continue
217-
}
218-
219-
client, _, playlistID := grafana.ClientFromExistingOrgResource(testutils.Provider.Meta(), rs.Primary.ID)
220-
playlist, err := client.Playlist(playlistID)
221-
222-
if err != nil {
223-
if strings.HasPrefix(err.Error(), "status: 404") {
224-
continue
225-
}
226-
return err
227-
}
228-
229-
if playlist != nil && playlist.ID != 0 {
230-
return fmt.Errorf("Playlist still exists: %+v", playlist)
231-
}
232-
}
233-
234-
return nil
235-
}
236-
237184
func testAccPlaylistConfigBasic(name, interval string) string {
238185
return fmt.Sprintf(`
239186
resource "grafana_playlist" "test" {

0 commit comments

Comments
 (0)