diff --git a/pkg/tests/apis/provisioning/export_resources_test.go b/pkg/tests/apis/provisioning/export_resources_test.go index 90318883a98..48763d01556 100644 --- a/pkg/tests/apis/provisioning/export_resources_test.go +++ b/pkg/tests/apis/provisioning/export_resources_test.go @@ -389,123 +389,4 @@ func TestIntegrationProvisioning_ExportSpecificResourcesWithFolderStructure(t *t require.Equal(t, "test-v1", val) } -func TestIntegrationProvisioning_ExportSpecificResourcesEmptyList(t *testing.T) { - testutil.SkipIntegrationTestInShortMode(t) - helper := runGrafana(t) - ctx := context.Background() - - // Create repository with folder sync target (for empty resources test) - const repo = "export-empty-resources-test-repo" - testRepo := TestRepo{ - Name: repo, - Target: "folder", - Copies: map[string]string{}, - ExpectedDashboards: 0, - ExpectedFolders: 0, - } - helper.CreateRepo(t, testRepo) - - // Try to export with empty resources list (should fail validation with folder target) - // Empty resources list means the old API path (using Folder), which doesn't apply here - spec := provisioning.JobSpec{ - Action: provisioning.JobActionPush, - Push: &provisioning.ExportJobOptions{ - Resources: []provisioning.ResourceRef{}, - }, - } - - // This should fail validation (empty resources triggers specific resource validation) - body := asJSON(spec) - result := helper.AdminREST.Post(). - Namespace("default"). - Resource("repositories"). - Name(repo). - SubResource("jobs"). - Body(body). - SetHeader("Content-Type", "application/json"). - Do(ctx) - - // Wait for job to complete and check it failed - obj, err := result.Get() - require.NoError(t, err, "job should be created") - unstruct, ok := obj.(*unstructured.Unstructured) - require.True(t, ok, "should get unstructured object") - - // Wait for job to complete - job := helper.AwaitJob(t, ctx, unstruct) - lastState := mustNestedString(job.Object, "status", "state") - lastErrors := mustNestedStringSlice(job.Object, "status", "errors") - - // Job should fail with error about empty resources - require.Equal(t, string(provisioning.JobStateError), lastState, "job should fail") - require.NotEmpty(t, lastErrors, "job should have errors") - require.Contains(t, lastErrors[0], "no resources specified", "error should mention no resources specified") -} - -func TestIntegrationProvisioning_ExportSpecificResourcesRejectsInstanceTarget(t *testing.T) { - testutil.SkipIntegrationTestInShortMode(t) - - helper := runGrafana(t) - ctx := context.Background() - - // Create an unmanaged dashboard - dashboard := helper.LoadYAMLOrJSONFile("exportunifiedtorepository/dashboard-test-v1.yaml") - dashboardObj, err := helper.DashboardsV1.Resource.Create(ctx, dashboard, metav1.CreateOptions{}) - require.NoError(t, err, "should be able to create dashboard") - dashboardName := dashboardObj.GetName() - - // Create repository with INSTANCE sync target (should reject specific resource export) - const repo = "export-instance-target-reject-test-repo" - testRepo := TestRepo{ - Name: repo, - Target: "instance", // Instance target should reject specific resource export - Copies: map[string]string{}, - ExpectedDashboards: 0, - ExpectedFolders: 0, - SkipResourceAssertions: true, - } - helper.CreateRepo(t, testRepo) - - // Try to export specific resource with instance target (should fail) - spec := provisioning.JobSpec{ - Action: provisioning.JobActionPush, - Push: &provisioning.ExportJobOptions{ - Resources: []provisioning.ResourceRef{ - { - Name: dashboardName, - Kind: "Dashboard", - Group: "dashboard.grafana.app", - }, - }, - }, - } - - // This should fail with validation error about instance target - body := asJSON(spec) - result := helper.AdminREST.Post(). - Namespace("default"). - Resource("repositories"). - Name(repo). - SubResource("jobs"). - Body(body). - SetHeader("Content-Type", "application/json"). - Do(ctx) - - // Wait for job to complete and check it failed - obj, err := result.Get() - require.NoError(t, err, "job should be created") - unstruct, ok := obj.(*unstructured.Unstructured) - require.True(t, ok, "should get unstructured object") - - // Wait for job to complete - job := helper.AwaitJob(t, ctx, unstruct) - lastState := mustNestedString(job.Object, "status", "state") - lastErrors := mustNestedStringSlice(job.Object, "status", "errors") - - // Job should fail with error about instance target not supporting specific resources - require.Equal(t, string(provisioning.JobStateError), lastState, "job should fail") - require.NotEmpty(t, lastErrors, "job should have errors") - require.Contains(t, lastErrors[0], "folder sync targets", "error should mention folder sync targets required") - require.Contains(t, lastErrors[0], "instance", "error should mention instance target") -}