Alerting: Return 404 when /api/ruler/grafana/api/v1/rules/{Namespace}/{Groupname} does not exist (#100264)

* Return a 404 when rule group doesn't exist

* Update tests

* Update swagger doc and tests
pull/100295/head^2
Fayzal Ghantiwala 5 months ago committed by GitHub
parent 9ce6c69996
commit 7ae8058c8b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 5
      pkg/services/ngalert/api/api_ruler.go
  2. 18
      pkg/services/ngalert/api/api_ruler_test.go
  3. 1
      pkg/services/ngalert/api/tooling/definitions/cortex-ruler.go
  4. 167
      pkg/tests/api/alerting/api_ruler_test.go
  5. 5
      pkg/tests/api/alerting/testing.go
  6. 6
      pkg/tests/apis/alerting/notifications/receivers/receiver_test.go
  7. 6
      pkg/tests/apis/alerting/notifications/timeinterval/timeinterval_test.go

@ -242,6 +242,10 @@ func (srv RulerSrv) RouteGetRulesGroupConfig(c *contextmodel.ReqContext, namespa
return errorToResponse(err) return errorToResponse(err)
} }
if len(rules) == 0 {
return ErrResp(http.StatusNotFound, errors.New("rule group does not exist"), "")
}
provenanceRecords, err := srv.provenanceStore.GetProvenances(c.Req.Context(), c.SignedInUser.GetOrgID(), (&ngmodels.AlertRule{}).ResourceType()) provenanceRecords, err := srv.provenanceStore.GetProvenances(c.Req.Context(), c.SignedInUser.GetOrgID(), (&ngmodels.AlertRule{}).ResourceType())
if err != nil { if err != nil {
return ErrResp(http.StatusInternalServerError, err, "failed to get group alert rules") return ErrResp(http.StatusInternalServerError, err, "failed to get group alert rules")
@ -251,6 +255,7 @@ func (srv RulerSrv) RouteGetRulesGroupConfig(c *contextmodel.ReqContext, namespa
// nolint:staticcheck // nolint:staticcheck
GettableRuleGroupConfig: toGettableRuleGroupConfig(finalRuleGroup, rules, provenanceRecords, srv.resolveUserIdToNameFn(c.Req.Context())), GettableRuleGroupConfig: toGettableRuleGroupConfig(finalRuleGroup, rules, provenanceRecords, srv.resolveUserIdToNameFn(c.Req.Context())),
} }
return response.JSON(http.StatusAccepted, result) return response.JSON(http.StatusAccepted, result)
} }

@ -694,6 +694,24 @@ func TestRouteGetRulesGroupConfig(t *testing.T) {
} }
} }
}) })
t.Run("should return a 404 when fetching a group that doesn't exist", func(t *testing.T) {
orgID := rand.Int63()
folder := randFolder()
ruleStore := fakes.NewRuleStore(t)
ruleStore.Folders[orgID] = append(ruleStore.Folders[orgID], folder)
groupKey := models.GenerateGroupKey(orgID)
groupKey.NamespaceUID = folder.UID
expectedRules := gen.With(gen.WithGroupKey(groupKey), gen.WithUniqueGroupIndex()).GenerateManyRef(5, 10)
ruleStore.PutRule(context.Background(), expectedRules...)
perms := createPermissionsForRules(expectedRules, orgID)
req := createRequestContextWithPerms(orgID, perms, nil)
response := createService(ruleStore).RouteGetRulesGroupConfig(req, folder.UID, "non-existent-rule-group")
require.Equal(t, http.StatusNotFound, response.Status())
})
} }
func TestVerifyProvisionedRulesNotAffected(t *testing.T) { func TestVerifyProvisionedRulesNotAffected(t *testing.T) {

@ -167,6 +167,7 @@ import (
// Responses: // Responses:
// 202: RuleGroupConfigResponse // 202: RuleGroupConfigResponse
// 403: ForbiddenError // 403: ForbiddenError
// 404: NotFound
// swagger:route Get /ruler/{DatasourceUID}/api/v1/rules/{Namespace}/{Groupname} ruler RouteGetRulegGroupConfig // swagger:route Get /ruler/{DatasourceUID}/api/v1/rules/{Namespace}/{Groupname} ruler RouteGetRulegGroupConfig
// //

@ -157,7 +157,8 @@ func TestIntegrationAlertRulePermissions(t *testing.T) {
}) })
t.Run("Get group returns a single group", func(t *testing.T) { t.Run("Get group returns a single group", func(t *testing.T) {
rules := apiClient.GetRulesGroup(t, "folder2", allRules["folder2"][0].Name) rules, status := apiClient.GetRulesGroup(t, "folder2", allRules["folder2"][0].Name)
require.Equal(t, http.StatusAccepted, status)
cmp.Diff(allRules["folder2"][0], rules.GettableRuleGroupConfig) cmp.Diff(allRules["folder2"][0], rules.GettableRuleGroupConfig)
}) })
@ -482,7 +483,8 @@ func TestIntegrationAlertRuleNestedPermissions(t *testing.T) {
}) })
t.Run("Get group returns a single group", func(t *testing.T) { t.Run("Get group returns a single group", func(t *testing.T) {
rules := apiClient.GetRulesGroup(t, "folder2", allRules["folder2"][0].Name) rules, status := apiClient.GetRulesGroup(t, "folder2", allRules["folder2"][0].Name)
require.Equal(t, http.StatusAccepted, status)
cmp.Diff(allRules["folder2"][0], rules.GettableRuleGroupConfig) cmp.Diff(allRules["folder2"][0], rules.GettableRuleGroupConfig)
}) })
@ -839,10 +841,11 @@ func TestIntegrationAlertRuleEditorSettings(t *testing.T) {
} }
respModel, status, _ := apiClient.PostRulesGroupWithStatus(t, folderName, &rules) respModel, status, _ := apiClient.PostRulesGroupWithStatus(t, folderName, &rules)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
require.Len(t, respModel.Created, 1) require.Len(t, respModel.Created, 1)
createdRuleGroup := apiClient.GetRulesGroup(t, folderName, rules.Name).GettableRuleGroupConfig createdRuleGroup, status := apiClient.GetRulesGroup(t, folderName, rules.Name)
require.Equal(t, http.StatusAccepted, status)
require.Len(t, createdRuleGroup.Rules, 1) require.Len(t, createdRuleGroup.Rules, 1)
expectedMetadata := alertRule.GrafanaManagedAlert.Metadata expectedMetadata := alertRule.GrafanaManagedAlert.Metadata
@ -855,7 +858,7 @@ func TestIntegrationAlertRuleEditorSettings(t *testing.T) {
} }
require.Equal(t, expectedMetadata, createdRuleGroup.Rules[0].GrafanaManagedAlert.Metadata) require.Equal(t, expectedMetadata, createdRuleGroup.Rules[0].GrafanaManagedAlert.Metadata)
return createdRuleGroup return createdRuleGroup.GettableRuleGroupConfig
} }
t.Run("set simplified query editor in editor settings", func(t *testing.T) { t.Run("set simplified query editor in editor settings", func(t *testing.T) {
@ -870,9 +873,10 @@ func TestIntegrationAlertRuleEditorSettings(t *testing.T) {
rulesWithUID.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedQueryAndExpressionsSection = true rulesWithUID.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedQueryAndExpressionsSection = true
_, status, _ := apiClient.PostRulesGroupWithStatus(t, folderName, &rulesWithUID) _, status, _ := apiClient.PostRulesGroupWithStatus(t, folderName, &rulesWithUID)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
updatedRuleGroup := apiClient.GetRulesGroup(t, folderName, groupName).GettableRuleGroupConfig updatedRuleGroup, status := apiClient.GetRulesGroup(t, folderName, groupName)
require.Equal(t, http.StatusAccepted, status)
require.Len(t, updatedRuleGroup.Rules, 1) require.Len(t, updatedRuleGroup.Rules, 1)
require.True(t, updatedRuleGroup.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedQueryAndExpressionsSection) require.True(t, updatedRuleGroup.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedQueryAndExpressionsSection)
}) })
@ -891,9 +895,10 @@ func TestIntegrationAlertRuleEditorSettings(t *testing.T) {
rulesWithUID.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedQueryAndExpressionsSection = false rulesWithUID.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedQueryAndExpressionsSection = false
_, status, _ := apiClient.PostRulesGroupWithStatus(t, folderName, &rulesWithUID) _, status, _ := apiClient.PostRulesGroupWithStatus(t, folderName, &rulesWithUID)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
updatedRuleGroup := apiClient.GetRulesGroup(t, folderName, groupName).GettableRuleGroupConfig updatedRuleGroup, status := apiClient.GetRulesGroup(t, folderName, groupName)
require.Equal(t, http.StatusAccepted, status)
require.Len(t, updatedRuleGroup.Rules, 1) require.Len(t, updatedRuleGroup.Rules, 1)
require.False(t, updatedRuleGroup.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedQueryAndExpressionsSection) require.False(t, updatedRuleGroup.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedQueryAndExpressionsSection)
}) })
@ -910,9 +915,10 @@ func TestIntegrationAlertRuleEditorSettings(t *testing.T) {
rulesWithUID.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedNotificationsSection = true rulesWithUID.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedNotificationsSection = true
_, status, _ := apiClient.PostRulesGroupWithStatus(t, folderName, &rulesWithUID) _, status, _ := apiClient.PostRulesGroupWithStatus(t, folderName, &rulesWithUID)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
updatedRuleGroup := apiClient.GetRulesGroup(t, folderName, groupName).GettableRuleGroupConfig updatedRuleGroup, status := apiClient.GetRulesGroup(t, folderName, groupName)
require.Equal(t, http.StatusAccepted, status)
require.Len(t, updatedRuleGroup.Rules, 1) require.Len(t, updatedRuleGroup.Rules, 1)
require.True(t, updatedRuleGroup.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedNotificationsSection) require.True(t, updatedRuleGroup.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedNotificationsSection)
}) })
@ -931,9 +937,10 @@ func TestIntegrationAlertRuleEditorSettings(t *testing.T) {
rulesWithUID.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedNotificationsSection = false rulesWithUID.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedNotificationsSection = false
_, status, _ := apiClient.PostRulesGroupWithStatus(t, folderName, &rulesWithUID) _, status, _ := apiClient.PostRulesGroupWithStatus(t, folderName, &rulesWithUID)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
updatedRuleGroup := apiClient.GetRulesGroup(t, folderName, groupName).GettableRuleGroupConfig updatedRuleGroup, status := apiClient.GetRulesGroup(t, folderName, groupName)
require.Equal(t, http.StatusAccepted, status)
require.Len(t, updatedRuleGroup.Rules, 1) require.Len(t, updatedRuleGroup.Rules, 1)
require.False(t, updatedRuleGroup.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedNotificationsSection) require.False(t, updatedRuleGroup.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedNotificationsSection)
}) })
@ -941,7 +948,8 @@ func TestIntegrationAlertRuleEditorSettings(t *testing.T) {
t.Run("post alert without metadata", func(t *testing.T) { t.Run("post alert without metadata", func(t *testing.T) {
createAlertInGrafana(nil) createAlertInGrafana(nil)
createdRuleGroup := apiClient.GetRulesGroup(t, folderName, groupName).GettableRuleGroupConfig createdRuleGroup, status := apiClient.GetRulesGroup(t, folderName, groupName)
require.Equal(t, http.StatusAccepted, status)
require.Len(t, createdRuleGroup.Rules, 1) require.Len(t, createdRuleGroup.Rules, 1)
require.False(t, createdRuleGroup.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedQueryAndExpressionsSection) require.False(t, createdRuleGroup.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedQueryAndExpressionsSection)
}) })
@ -979,16 +987,17 @@ func TestIntegrationAlertRuleConflictingTitle(t *testing.T) {
rules := newTestingRuleConfig(t) rules := newTestingRuleConfig(t)
respModel, status, _ := apiClient.PostRulesGroupWithStatus(t, "folder1", &rules) respModel, status, _ := apiClient.PostRulesGroupWithStatus(t, "folder1", &rules)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
require.Len(t, respModel.Created, len(rules.Rules)) require.Len(t, respModel.Created, len(rules.Rules))
// fetch the created rules, so we can get the uid's and trigger // fetch the created rules, so we can get the uid's and trigger
// and update by reusing the uid's // and update by reusing the uid's
createdRuleGroup := apiClient.GetRulesGroup(t, "folder1", rules.Name).GettableRuleGroupConfig createdRuleGroup, status := apiClient.GetRulesGroup(t, "folder1", rules.Name)
require.Equal(t, http.StatusAccepted, status)
require.Len(t, createdRuleGroup.Rules, 2) require.Len(t, createdRuleGroup.Rules, 2)
t.Run("trying to create alert with same title under same folder should fail", func(t *testing.T) { t.Run("trying to create alert with same title under same folder should fail", func(t *testing.T) {
rulesWithUID := convertGettableRuleGroupToPostable(createdRuleGroup) rulesWithUID := convertGettableRuleGroupToPostable(createdRuleGroup.GettableRuleGroupConfig)
rulesWithUID.Rules = append(rulesWithUID.Rules, rules.Rules[0]) // Create new copy of first rule. rulesWithUID.Rules = append(rulesWithUID.Rules, rules.Rules[0]) // Create new copy of first rule.
_, status, body := apiClient.PostRulesGroupWithStatus(t, "folder1", &rulesWithUID) _, status, body := apiClient.PostRulesGroupWithStatus(t, "folder1", &rulesWithUID)
@ -1000,7 +1009,7 @@ func TestIntegrationAlertRuleConflictingTitle(t *testing.T) {
}) })
t.Run("trying to update an alert to the title of an existing alert in the same folder should fail", func(t *testing.T) { t.Run("trying to update an alert to the title of an existing alert in the same folder should fail", func(t *testing.T) {
rulesWithUID := convertGettableRuleGroupToPostable(createdRuleGroup) rulesWithUID := convertGettableRuleGroupToPostable(createdRuleGroup.GettableRuleGroupConfig)
rulesWithUID.Rules[1].GrafanaManagedAlert.Title = "AlwaysFiring" rulesWithUID.Rules[1].GrafanaManagedAlert.Title = "AlwaysFiring"
_, status, body := apiClient.PostRulesGroupWithStatus(t, "folder1", &rulesWithUID) _, status, body := apiClient.PostRulesGroupWithStatus(t, "folder1", &rulesWithUID)
@ -1014,29 +1023,29 @@ func TestIntegrationAlertRuleConflictingTitle(t *testing.T) {
t.Run("trying to create alert with same title under another folder should succeed", func(t *testing.T) { t.Run("trying to create alert with same title under another folder should succeed", func(t *testing.T) {
rules := newTestingRuleConfig(t) rules := newTestingRuleConfig(t)
resp, status, _ := apiClient.PostRulesGroupWithStatus(t, "folder2", &rules) resp, status, _ := apiClient.PostRulesGroupWithStatus(t, "folder2", &rules)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
require.Len(t, resp.Created, len(rules.Rules)) require.Len(t, resp.Created, len(rules.Rules))
}) })
t.Run("trying to swap titles of existing alerts in the same folder should work", func(t *testing.T) { t.Run("trying to swap titles of existing alerts in the same folder should work", func(t *testing.T) {
rulesWithUID := convertGettableRuleGroupToPostable(createdRuleGroup) rulesWithUID := convertGettableRuleGroupToPostable(createdRuleGroup.GettableRuleGroupConfig)
title0 := rulesWithUID.Rules[0].GrafanaManagedAlert.Title title0 := rulesWithUID.Rules[0].GrafanaManagedAlert.Title
title1 := rulesWithUID.Rules[1].GrafanaManagedAlert.Title title1 := rulesWithUID.Rules[1].GrafanaManagedAlert.Title
rulesWithUID.Rules[0].GrafanaManagedAlert.Title = title1 rulesWithUID.Rules[0].GrafanaManagedAlert.Title = title1
rulesWithUID.Rules[1].GrafanaManagedAlert.Title = title0 rulesWithUID.Rules[1].GrafanaManagedAlert.Title = title0
resp, status, _ := apiClient.PostRulesGroupWithStatus(t, "folder1", &rulesWithUID) resp, status, _ := apiClient.PostRulesGroupWithStatus(t, "folder1", &rulesWithUID)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
require.Len(t, resp.Updated, 2) require.Len(t, resp.Updated, 2)
}) })
t.Run("trying to update titles of existing alerts in a chain in the same folder should work", func(t *testing.T) { t.Run("trying to update titles of existing alerts in a chain in the same folder should work", func(t *testing.T) {
rulesWithUID := convertGettableRuleGroupToPostable(createdRuleGroup) rulesWithUID := convertGettableRuleGroupToPostable(createdRuleGroup.GettableRuleGroupConfig)
rulesWithUID.Rules[0].GrafanaManagedAlert.Title = rulesWithUID.Rules[1].GrafanaManagedAlert.Title rulesWithUID.Rules[0].GrafanaManagedAlert.Title = rulesWithUID.Rules[1].GrafanaManagedAlert.Title
rulesWithUID.Rules[1].GrafanaManagedAlert.Title = "something new" rulesWithUID.Rules[1].GrafanaManagedAlert.Title = "something new"
resp, status, _ := apiClient.PostRulesGroupWithStatus(t, "folder1", &rulesWithUID) resp, status, _ := apiClient.PostRulesGroupWithStatus(t, "folder1", &rulesWithUID)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
require.Len(t, resp.Updated, len(rulesWithUID.Rules)) require.Len(t, resp.Updated, len(rulesWithUID.Rules))
}) })
} }
@ -1126,7 +1135,7 @@ func TestIntegrationRulerRulesFilterByDashboard(t *testing.T) {
}, },
} }
resp, status, _ := apiClient.PostRulesGroupWithStatus(t, "default", &rules) resp, status, _ := apiClient.PostRulesGroupWithStatus(t, "default", &rules)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
require.Len(t, resp.Created, len(rules.Rules)) require.Len(t, resp.Created, len(rules.Rules))
} }
@ -1438,7 +1447,8 @@ func TestIntegrationRuleGroupSequence(t *testing.T) {
require.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
t.Run("should persist order of the rules in a group", func(t *testing.T) { t.Run("should persist order of the rules in a group", func(t *testing.T) {
group1Get := client.GetRulesGroup(t, folderUID, group1.Name) group1Get, status := client.GetRulesGroup(t, folderUID, group1.Name)
require.Equal(t, http.StatusAccepted, status)
assert.Equal(t, group1.Name, group1Get.Name) assert.Equal(t, group1.Name, group1Get.Name)
assert.Equal(t, group1.Interval, group1Get.Interval) assert.Equal(t, group1.Interval, group1Get.Interval)
assert.Len(t, group1Get.Rules, len(group1.Rules)) assert.Len(t, group1Get.Rules, len(group1.Rules))
@ -1457,10 +1467,11 @@ func TestIntegrationRuleGroupSequence(t *testing.T) {
for _, rule := range postableGroup1.Rules { for _, rule := range postableGroup1.Rules {
expectedUids = append(expectedUids, rule.GrafanaManagedAlert.UID) expectedUids = append(expectedUids, rule.GrafanaManagedAlert.UID)
} }
_, status, _ := client.PostRulesGroupWithStatus(t, folderUID, &postableGroup1) _, status, _ = client.PostRulesGroupWithStatus(t, folderUID, &postableGroup1)
require.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
group1Get = client.GetRulesGroup(t, folderUID, group1.Name) group1Get, status = client.GetRulesGroup(t, folderUID, group1.Name)
require.Equal(t, http.StatusAccepted, status)
require.Len(t, group1Get.Rules, len(postableGroup1.Rules)) require.Len(t, group1Get.Rules, len(postableGroup1.Rules))
@ -1472,8 +1483,10 @@ func TestIntegrationRuleGroupSequence(t *testing.T) {
}) })
t.Run("should be able to move a rule from another group in a specific position", func(t *testing.T) { t.Run("should be able to move a rule from another group in a specific position", func(t *testing.T) {
group1Get := client.GetRulesGroup(t, folderUID, group1.Name) group1Get, status := client.GetRulesGroup(t, folderUID, group1.Name)
group2Get := client.GetRulesGroup(t, folderUID, group2.Name) require.Equal(t, http.StatusAccepted, status)
group2Get, status := client.GetRulesGroup(t, folderUID, group2.Name)
require.Equal(t, http.StatusAccepted, status)
movedRule := convertGettableRuleToPostable(group2Get.Rules[3]) movedRule := convertGettableRuleToPostable(group2Get.Rules[3])
// now shuffle the rules // now shuffle the rules
@ -1483,10 +1496,11 @@ func TestIntegrationRuleGroupSequence(t *testing.T) {
for _, rule := range postableGroup1.Rules { for _, rule := range postableGroup1.Rules {
expectedUids = append(expectedUids, rule.GrafanaManagedAlert.UID) expectedUids = append(expectedUids, rule.GrafanaManagedAlert.UID)
} }
_, status, _ := client.PostRulesGroupWithStatus(t, folderUID, &postableGroup1) _, status, _ = client.PostRulesGroupWithStatus(t, folderUID, &postableGroup1)
require.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
group1Get = client.GetRulesGroup(t, folderUID, group1.Name) group1Get, status = client.GetRulesGroup(t, folderUID, group1.Name)
require.Equal(t, http.StatusAccepted, status)
require.Len(t, group1Get.Rules, len(postableGroup1.Rules)) require.Len(t, group1Get.Rules, len(postableGroup1.Rules))
@ -1496,7 +1510,8 @@ func TestIntegrationRuleGroupSequence(t *testing.T) {
} }
assert.Equal(t, expectedUids, actualUids) assert.Equal(t, expectedUids, actualUids)
group2Get = client.GetRulesGroup(t, folderUID, group2.Name) group2Get, status = client.GetRulesGroup(t, folderUID, group2.Name)
require.Equal(t, http.StatusAccepted, status)
assert.Len(t, group2Get.Rules, len(group2.Rules)-1) assert.Len(t, group2Get.Rules, len(group2.Rules)-1)
for _, rule := range group2Get.Rules { for _, rule := range group2Get.Rules {
require.NotEqual(t, movedRule.GrafanaManagedAlert.UID, rule.GrafanaManagedAlert.UID) require.NotEqual(t, movedRule.GrafanaManagedAlert.UID, rule.GrafanaManagedAlert.UID)
@ -1696,7 +1711,8 @@ func TestIntegrationRuleUpdate(t *testing.T) {
_, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group) _, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group)
require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body)
getGroup := client.GetRulesGroup(t, folderUID, group.Name) getGroup, status := client.GetRulesGroup(t, folderUID, group.Name)
require.Equal(t, http.StatusAccepted, status)
require.Equal(t, expected, *getGroup.Rules[0].ApiRuleNode.For) require.Equal(t, expected, *getGroup.Rules[0].ApiRuleNode.For)
group = convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig) group = convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig)
@ -1705,7 +1721,8 @@ func TestIntegrationRuleUpdate(t *testing.T) {
_, status, body = client.PostRulesGroupWithStatus(t, folderUID, &group) _, status, body = client.PostRulesGroupWithStatus(t, folderUID, &group)
require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body)
getGroup = client.GetRulesGroup(t, folderUID, group.Name) getGroup, status = client.GetRulesGroup(t, folderUID, group.Name)
require.Equal(t, http.StatusAccepted, status)
require.Equal(t, expected, *getGroup.Rules[0].ApiRuleNode.For) require.Equal(t, expected, *getGroup.Rules[0].ApiRuleNode.For)
}) })
t.Run("when data source missing", func(t *testing.T) { t.Run("when data source missing", func(t *testing.T) {
@ -1717,7 +1734,8 @@ func TestIntegrationRuleUpdate(t *testing.T) {
_, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group) _, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group)
require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body)
getGroup := client.GetRulesGroup(t, folderUID, group.Name) getGroup, status := client.GetRulesGroup(t, folderUID, group.Name)
require.Equal(t, http.StatusAccepted, status)
group = convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig) group = convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig)
require.Len(t, group.Rules, 3) require.Len(t, group.Rules, 3)
@ -1731,14 +1749,16 @@ func TestIntegrationRuleUpdate(t *testing.T) {
} }
t.Run("noop should not fail", func(t *testing.T) { t.Run("noop should not fail", func(t *testing.T) {
getGroup := client.GetRulesGroup(t, folderUID, groupName) getGroup, status := client.GetRulesGroup(t, folderUID, groupName)
require.Equal(t, http.StatusAccepted, status)
group := convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig) group := convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig)
_, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group) _, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group)
require.Equalf(t, http.StatusAccepted, status, "failed to post noop rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to post noop rule group. Response: %s", body)
}) })
t.Run("should not let update rule if it does not fix datasource", func(t *testing.T) { t.Run("should not let update rule if it does not fix datasource", func(t *testing.T) {
getGroup := client.GetRulesGroup(t, folderUID, groupName) getGroup, status := client.GetRulesGroup(t, folderUID, groupName)
require.Equal(t, http.StatusAccepted, status)
group := convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig) group := convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig)
group.Rules[0].GrafanaManagedAlert.Title = uuid.NewString() group.Rules[0].GrafanaManagedAlert.Title = uuid.NewString()
@ -1746,14 +1766,16 @@ func TestIntegrationRuleUpdate(t *testing.T) {
if status == http.StatusAccepted { if status == http.StatusAccepted {
assert.Len(t, resp.Deleted, 1) assert.Len(t, resp.Deleted, 1)
getGroup = client.GetRulesGroup(t, folderUID, group.Name) getGroup, status = client.GetRulesGroup(t, folderUID, group.Name)
require.Equal(t, http.StatusAccepted, status)
assert.NotEqualf(t, group.Rules[0].GrafanaManagedAlert.Title, getGroup.Rules[0].GrafanaManagedAlert.Title, "group was updated") assert.NotEqualf(t, group.Rules[0].GrafanaManagedAlert.Title, getGroup.Rules[0].GrafanaManagedAlert.Title, "group was updated")
} }
require.Equalf(t, http.StatusBadRequest, status, "expected BadRequest. Response: %s", body) require.Equalf(t, http.StatusBadRequest, status, "expected BadRequest. Response: %s", body)
assert.Contains(t, body, "data source not found") assert.Contains(t, body, "data source not found")
}) })
t.Run("should let delete broken rule", func(t *testing.T) { t.Run("should let delete broken rule", func(t *testing.T) {
getGroup := client.GetRulesGroup(t, folderUID, groupName) getGroup, status := client.GetRulesGroup(t, folderUID, groupName)
require.Equal(t, http.StatusAccepted, status)
group := convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig) group := convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig)
// remove the last rule. // remove the last rule.
@ -1762,12 +1784,14 @@ func TestIntegrationRuleUpdate(t *testing.T) {
require.Equalf(t, http.StatusAccepted, status, "failed to delete last rule from group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to delete last rule from group. Response: %s", body)
assert.Len(t, resp.Deleted, 1) assert.Len(t, resp.Deleted, 1)
getGroup = client.GetRulesGroup(t, folderUID, group.Name) getGroup, status = client.GetRulesGroup(t, folderUID, group.Name)
require.Equal(t, http.StatusAccepted, status)
group = convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig) group = convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig)
require.Len(t, group.Rules, 2) require.Len(t, group.Rules, 2)
}) })
t.Run("should let fix single rule", func(t *testing.T) { t.Run("should let fix single rule", func(t *testing.T) {
getGroup := client.GetRulesGroup(t, folderUID, groupName) getGroup, status := client.GetRulesGroup(t, folderUID, groupName)
require.Equal(t, http.StatusAccepted, status)
group := convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig) group := convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig)
ds2 := adminClient.CreateTestDatasource(t) ds2 := adminClient.CreateTestDatasource(t)
@ -1778,7 +1802,8 @@ func TestIntegrationRuleUpdate(t *testing.T) {
assert.Len(t, resp.Updated, 2) assert.Len(t, resp.Updated, 2)
assert.Len(t, resp.Created, 0) assert.Len(t, resp.Created, 0)
getGroup = client.GetRulesGroup(t, folderUID, group.Name) getGroup, status = client.GetRulesGroup(t, folderUID, group.Name)
require.Equal(t, http.StatusAccepted, status)
group = convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig) group = convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig)
require.Equal(t, ds2.Body.Datasource.UID, group.Rules[0].GrafanaManagedAlert.Data[0].DatasourceUID) require.Equal(t, ds2.Body.Datasource.UID, group.Rules[0].GrafanaManagedAlert.Data[0].DatasourceUID)
}) })
@ -1794,7 +1819,8 @@ func TestIntegrationRuleUpdate(t *testing.T) {
_, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group) _, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group)
require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body)
getGroup := client.GetRulesGroup(t, folderUID, group.Name) getGroup, status := client.GetRulesGroup(t, folderUID, group.Name)
require.Equal(t, http.StatusAccepted, status)
require.NotNil(t, getGroup.Rules[0].GrafanaManagedAlert.UpdatedBy) require.NotNil(t, getGroup.Rules[0].GrafanaManagedAlert.UpdatedBy)
assert.NotEmpty(t, getGroup.Rules[0].GrafanaManagedAlert.UpdatedBy.UID) assert.NotEmpty(t, getGroup.Rules[0].GrafanaManagedAlert.UpdatedBy.UID)
assert.Equal(t, "grafana", getGroup.Rules[0].GrafanaManagedAlert.UpdatedBy.Name) assert.Equal(t, "grafana", getGroup.Rules[0].GrafanaManagedAlert.UpdatedBy.Name)
@ -1928,7 +1954,7 @@ func TestIntegrationAlertAndGroupsQuery(t *testing.T) {
} }
_, status, _ := apiClient.PostRulesGroupWithStatus(t, "default", &rules) _, status, _ := apiClient.PostRulesGroupWithStatus(t, "default", &rules)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
} }
// Eventually, we'll get an alert with its state being active. // Eventually, we'll get an alert with its state being active.
@ -2486,7 +2512,7 @@ func TestIntegrationQuota(t *testing.T) {
} }
respModel, status, _ := apiClient.PostRulesGroupWithStatus(t, "default", &rules) respModel, status, _ := apiClient.PostRulesGroupWithStatus(t, "default", &rules)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
require.Len(t, respModel.Updated, 1) require.Len(t, respModel.Updated, 1)
// let's make sure that rule definitions are updated correctly. // let's make sure that rule definitions are updated correctly.
@ -2654,7 +2680,7 @@ func TestIntegrationDeleteFolderWithRules(t *testing.T) {
"updated": "2021-02-21T01:10:30Z", "updated": "2021-02-21T01:10:30Z",
"updated_by" : { "updated_by" : {
"uid": "uid", "uid": "uid",
"name": "editor" "name": "editor"
}, },
"intervalSeconds": 60, "intervalSeconds": 60,
"is_paused": false, "is_paused": false,
@ -3065,7 +3091,7 @@ func TestIntegrationAlertRuleCRUD(t *testing.T) {
}, },
} }
resp, status, _ := apiClient.PostRulesGroupWithStatus(t, "default", &rules) resp, status, _ := apiClient.PostRulesGroupWithStatus(t, "default", &rules)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
require.Equal(t, "rule group updated successfully", resp.Message) require.Equal(t, "rule group updated successfully", resp.Message)
assert.Len(t, resp.Created, 2) assert.Len(t, resp.Created, 2)
assert.Empty(t, resp.Updated) assert.Empty(t, resp.Updated)
@ -3134,7 +3160,7 @@ func TestIntegrationAlertRuleCRUD(t *testing.T) {
], ],
"updated":"2021-02-21T01:10:30Z", "updated":"2021-02-21T01:10:30Z",
"updated_by": { "updated_by": {
"uid": "uid", "uid": "uid",
"name": "grafana" "name": "grafana"
}, },
"intervalSeconds":60, "intervalSeconds":60,
@ -3178,7 +3204,7 @@ func TestIntegrationAlertRuleCRUD(t *testing.T) {
], ],
"updated":"2021-02-21T01:10:30Z", "updated":"2021-02-21T01:10:30Z",
"updated_by": { "updated_by": {
"uid": "uid", "uid": "uid",
"name": "grafana" "name": "grafana"
}, },
"intervalSeconds":60, "intervalSeconds":60,
@ -3431,7 +3457,7 @@ func TestIntegrationAlertRuleCRUD(t *testing.T) {
Interval: interval, Interval: interval,
} }
respModel, status, _ := apiClient.PostRulesGroupWithStatus(t, "default", &rules) respModel, status, _ := apiClient.PostRulesGroupWithStatus(t, "default", &rules)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
require.Equal(t, respModel.Updated, []string{ruleUID}) require.Equal(t, respModel.Updated, []string{ruleUID})
require.Len(t, respModel.Deleted, 1) require.Len(t, respModel.Deleted, 1)
@ -3494,7 +3520,7 @@ func TestIntegrationAlertRuleCRUD(t *testing.T) {
], ],
"updated":"2021-02-21T01:10:30Z", "updated":"2021-02-21T01:10:30Z",
"updated_by": { "updated_by": {
"uid": "uid", "uid": "uid",
"name": "grafana" "name": "grafana"
}, },
"intervalSeconds":60, "intervalSeconds":60,
@ -3557,7 +3583,7 @@ func TestIntegrationAlertRuleCRUD(t *testing.T) {
Interval: interval, Interval: interval,
} }
respModel, status, _ := apiClient.PostRulesGroupWithStatus(t, "default", &rules) respModel, status, _ := apiClient.PostRulesGroupWithStatus(t, "default", &rules)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
require.Equal(t, respModel.Updated, []string{ruleUID}) require.Equal(t, respModel.Updated, []string{ruleUID})
// let's make sure that rule definitions are updated correctly. // let's make sure that rule definitions are updated correctly.
@ -3611,7 +3637,7 @@ func TestIntegrationAlertRuleCRUD(t *testing.T) {
], ],
"updated":"2021-02-21T01:10:30Z", "updated":"2021-02-21T01:10:30Z",
"updated_by": { "updated_by": {
"uid": "uid", "uid": "uid",
"name": "grafana" "name": "grafana"
}, },
"intervalSeconds":60, "intervalSeconds":60,
@ -3650,7 +3676,7 @@ func TestIntegrationAlertRuleCRUD(t *testing.T) {
Interval: interval, Interval: interval,
} }
respModel, status, _ := apiClient.PostRulesGroupWithStatus(t, "default", &rules) respModel, status, _ := apiClient.PostRulesGroupWithStatus(t, "default", &rules)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
require.Equal(t, "no changes detected in the rule group", respModel.Message) require.Equal(t, "no changes detected in the rule group", respModel.Message)
assert.Empty(t, respModel.Created) assert.Empty(t, respModel.Created)
assert.Empty(t, respModel.Updated) assert.Empty(t, respModel.Updated)
@ -3707,7 +3733,7 @@ func TestIntegrationAlertRuleCRUD(t *testing.T) {
], ],
"updated":"2021-02-21T01:10:30Z", "updated":"2021-02-21T01:10:30Z",
"updated_by": { "updated_by": {
"uid": "uid", "uid": "uid",
"name": "grafana" "name": "grafana"
}, },
"intervalSeconds":60, "intervalSeconds":60,
@ -3804,7 +3830,8 @@ func TestIntegrationRulePause(t *testing.T) {
resp, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group) resp, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group)
require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body)
require.Len(t, resp.Created, 1) require.Len(t, resp.Created, 1)
getGroup := client.GetRulesGroup(t, folderUID, group.Name) getGroup, status := client.GetRulesGroup(t, folderUID, group.Name)
require.Equal(t, http.StatusAccepted, status)
require.Equalf(t, http.StatusAccepted, status, "failed to get rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to get rule group. Response: %s", body)
require.Equal(t, expectedIsPaused, getGroup.Rules[0].GrafanaManagedAlert.IsPaused) require.Equal(t, expectedIsPaused, getGroup.Rules[0].GrafanaManagedAlert.IsPaused)
}) })
@ -3817,7 +3844,8 @@ func TestIntegrationRulePause(t *testing.T) {
resp, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group) resp, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group)
require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body)
require.Len(t, resp.Created, 1) require.Len(t, resp.Created, 1)
getGroup := client.GetRulesGroup(t, folderUID, group.Name) getGroup, status := client.GetRulesGroup(t, folderUID, group.Name)
require.Equal(t, http.StatusAccepted, status)
require.Equalf(t, http.StatusAccepted, status, "failed to get rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to get rule group. Response: %s", body)
require.Equal(t, expectedIsPaused, getGroup.Rules[0].GrafanaManagedAlert.IsPaused) require.Equal(t, expectedIsPaused, getGroup.Rules[0].GrafanaManagedAlert.IsPaused)
}) })
@ -3829,7 +3857,7 @@ func TestIntegrationRulePause(t *testing.T) {
resp, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group) resp, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group)
require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body)
require.Len(t, resp.Created, 1) require.Len(t, resp.Created, 1)
getGroup := client.GetRulesGroup(t, folderUID, group.Name) getGroup, status := client.GetRulesGroup(t, folderUID, group.Name)
require.Equalf(t, http.StatusAccepted, status, "failed to get rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to get rule group. Response: %s", body)
require.False(t, getGroup.Rules[0].GrafanaManagedAlert.IsPaused) require.False(t, getGroup.Rules[0].GrafanaManagedAlert.IsPaused)
}) })
@ -3886,7 +3914,7 @@ func TestIntegrationRulePause(t *testing.T) {
_, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group) _, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group)
require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body)
getGroup := client.GetRulesGroup(t, folderUID, group.Name) getGroup, status := client.GetRulesGroup(t, folderUID, group.Name)
require.Equalf(t, http.StatusAccepted, status, "failed to get rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to get rule group. Response: %s", body)
group = convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig) group = convertGettableRuleGroupToPostable(getGroup.GettableRuleGroupConfig)
@ -3894,7 +3922,8 @@ func TestIntegrationRulePause(t *testing.T) {
_, status, body = client.PostRulesGroupWithStatus(t, folderUID, &group) _, status, body = client.PostRulesGroupWithStatus(t, folderUID, &group)
require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body)
getGroup = client.GetRulesGroup(t, folderUID, group.Name) getGroup, status = client.GetRulesGroup(t, folderUID, group.Name)
require.Equal(t, http.StatusAccepted, status)
require.Equal(t, tc.expectedIsPausedInDb, getGroup.Rules[0].GrafanaManagedAlert.IsPaused) require.Equal(t, tc.expectedIsPausedInDb, getGroup.Rules[0].GrafanaManagedAlert.IsPaused)
}) })
} }
@ -4284,7 +4313,8 @@ func TestIntegrationRuleUpdateAllDatabases(t *testing.T) {
_, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group) _, status, body := client.PostRulesGroupWithStatus(t, folderUID, &group)
require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body)
getGroup := client.GetRulesGroup(t, folderUID, group.Name) getGroup, status := client.GetRulesGroup(t, folderUID, group.Name)
require.Equal(t, http.StatusAccepted, status)
require.Lenf(t, getGroup.Rules, 3, "expected 3 rules in group") require.Lenf(t, getGroup.Rules, 3, "expected 3 rules in group")
require.Equal(t, groupName, getGroup.Rules[0].GrafanaManagedAlert.RuleGroup) require.Equal(t, groupName, getGroup.Rules[0].GrafanaManagedAlert.RuleGroup)
@ -4294,7 +4324,8 @@ func TestIntegrationRuleUpdateAllDatabases(t *testing.T) {
_, status, body = client.PostRulesGroupWithStatus(t, folderUID, &group) _, status, body = client.PostRulesGroupWithStatus(t, folderUID, &group)
require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to post rule group. Response: %s", body)
getGroup = client.GetRulesGroup(t, folderUID, group.Name) getGroup, status = client.GetRulesGroup(t, folderUID, group.Name)
require.Equal(t, http.StatusAccepted, status)
require.Lenf(t, getGroup.Rules, 3, "expected 3 rules in group") require.Lenf(t, getGroup.Rules, 3, "expected 3 rules in group")
require.Equal(t, newGroup, getGroup.Rules[0].GrafanaManagedAlert.RuleGroup) require.Equal(t, newGroup, getGroup.Rules[0].GrafanaManagedAlert.RuleGroup)
@ -4302,11 +4333,12 @@ func TestIntegrationRuleUpdateAllDatabases(t *testing.T) {
require.Equalf(t, http.StatusAccepted, status, "failed to post noop rule group. Response: %s", body) require.Equalf(t, http.StatusAccepted, status, "failed to post noop rule group. Response: %s", body)
// Old group is gone. // Old group is gone.
getGroup = client.GetRulesGroup(t, folderUID, groupName) getGroup, status = client.GetRulesGroup(t, folderUID, groupName)
require.Lenf(t, getGroup.Rules, 0, "expected no rules") require.Equal(t, http.StatusNotFound, status)
// New group still exists. // New group still exists.
getGroup = client.GetRulesGroup(t, folderUID, newGroup) getGroup, status = client.GetRulesGroup(t, folderUID, newGroup)
require.Equal(t, http.StatusAccepted, status)
require.Lenf(t, getGroup.Rules, 3, "expected 3 rules in group") require.Lenf(t, getGroup.Rules, 3, "expected 3 rules in group")
require.Equal(t, newGroup, getGroup.Rules[0].GrafanaManagedAlert.RuleGroup) require.Equal(t, newGroup, getGroup.Rules[0].GrafanaManagedAlert.RuleGroup)
}) })
@ -4357,7 +4389,8 @@ func TestIntegrationRuleVersions(t *testing.T) {
assert.Equal(t, ruleV1, versions[0]) assert.Equal(t, ruleV1, versions[0])
}) })
group1Gettable := apiClient.GetRulesGroup(t, "folder1", group1.Name) group1Gettable, status := apiClient.GetRulesGroup(t, "folder1", group1.Name)
require.Equal(t, http.StatusAccepted, status)
group1 = convertGettableRuleGroupToPostable(group1Gettable.GettableRuleGroupConfig) group1 = convertGettableRuleGroupToPostable(group1Gettable.GettableRuleGroupConfig)
group1.Rules[0].Annotations[util.GenerateShortUID()] = util.GenerateShortUID() group1.Rules[0].Annotations[util.GenerateShortUID()] = util.GenerateShortUID()
@ -4538,7 +4571,7 @@ func createRule(t *testing.T, client apiClient, folder string) (apimodels.Postab
}, },
} }
resp, status, _ := client.PostRulesGroupWithStatus(t, folder, &rules) resp, status, _ := client.PostRulesGroupWithStatus(t, folder, &rules)
assert.Equal(t, http.StatusAccepted, status) require.Equal(t, http.StatusAccepted, status)
require.Len(t, resp.Created, 1) require.Len(t, resp.Created, 1)
return rules, resp.Created[0] return rules, resp.Created[0]
} }

@ -582,10 +582,9 @@ func (a apiClient) DeleteSilence(t *testing.T, id string) (any, int, string) {
return sendRequest[dynamic](t, req, http.StatusOK) return sendRequest[dynamic](t, req, http.StatusOK)
} }
func (a apiClient) GetRulesGroup(t *testing.T, folder string, group string) apimodels.RuleGroupConfigResponse { func (a apiClient) GetRulesGroup(t *testing.T, folder string, group string) (apimodels.RuleGroupConfigResponse, int) {
result, status, _ := a.GetRulesGroupWithStatus(t, folder, group) result, status, _ := a.GetRulesGroupWithStatus(t, folder, group)
require.Equal(t, http.StatusAccepted, status) return result, status
return result
} }
func (a apiClient) GetRulesGroupWithStatus(t *testing.T, folder string, group string) (apimodels.RuleGroupConfigResponse, int, []byte) { func (a apiClient) GetRulesGroupWithStatus(t *testing.T, folder string, group string) (apimodels.RuleGroupConfigResponse, int, []byte) {

@ -1199,7 +1199,8 @@ func TestIntegrationReferentialIntegrity(t *testing.T) {
receiver := receivers.Items[idx] receiver := receivers.Items[idx]
currentRoute := legacyCli.GetRoute(t) currentRoute := legacyCli.GetRoute(t)
currentRuleGroup := legacyCli.GetRulesGroup(t, folderUID, ruleGroup.Name) currentRuleGroup, status := legacyCli.GetRulesGroup(t, folderUID, ruleGroup.Name)
require.Equal(t, http.StatusAccepted, status)
t.Run("Update", func(t *testing.T) { t.Run("Update", func(t *testing.T) {
t.Run("should rename all references if name changes", func(t *testing.T) { t.Run("should rename all references if name changes", func(t *testing.T) {
@ -1210,7 +1211,8 @@ func TestIntegrationReferentialIntegrity(t *testing.T) {
actual, err := adminClient.Update(ctx, renamed, v1.UpdateOptions{}) actual, err := adminClient.Update(ctx, renamed, v1.UpdateOptions{})
require.NoError(t, err) require.NoError(t, err)
updatedRuleGroup := legacyCli.GetRulesGroup(t, folderUID, ruleGroup.Name) updatedRuleGroup, status := legacyCli.GetRulesGroup(t, folderUID, ruleGroup.Name)
require.Equal(t, http.StatusAccepted, status)
for idx, rule := range updatedRuleGroup.Rules { for idx, rule := range updatedRuleGroup.Rules {
assert.Equalf(t, expectedTitle, rule.GrafanaManagedAlert.NotificationSettings.Receiver, "receiver in rule %d should have been renamed but it did not", idx) assert.Equalf(t, expectedTitle, rule.GrafanaManagedAlert.NotificationSettings.Receiver, "receiver in rule %d should have been renamed but it did not", idx)
} }

@ -664,7 +664,8 @@ func TestIntegrationTimeIntervalReferentialIntegrity(t *testing.T) {
require.Equalf(t, http.StatusAccepted, status, "Failed to post Rule: %s", data) require.Equalf(t, http.StatusAccepted, status, "Failed to post Rule: %s", data)
currentRoute := legacyCli.GetRoute(t) currentRoute := legacyCli.GetRoute(t)
currentRuleGroup := legacyCli.GetRulesGroup(t, folderUID, ruleGroup.Name) currentRuleGroup, status := legacyCli.GetRulesGroup(t, folderUID, ruleGroup.Name)
require.Equal(t, http.StatusAccepted, status)
adminClient := newClient(t, helper.Org1.Admin) adminClient := newClient(t, helper.Org1.Admin)
@ -696,7 +697,8 @@ func TestIntegrationTimeIntervalReferentialIntegrity(t *testing.T) {
actual, err := adminClient.Update(ctx, renamed, v1.UpdateOptions{}) actual, err := adminClient.Update(ctx, renamed, v1.UpdateOptions{})
require.NoError(t, err) require.NoError(t, err)
updatedRuleGroup := legacyCli.GetRulesGroup(t, folderUID, ruleGroup.Name) updatedRuleGroup, status := legacyCli.GetRulesGroup(t, folderUID, ruleGroup.Name)
require.Equal(t, http.StatusAccepted, status)
for idx, rule := range updatedRuleGroup.Rules { for idx, rule := range updatedRuleGroup.Rules {
expectedTimeIntervals := currentRuleGroup.Rules[idx].GrafanaManagedAlert.NotificationSettings.MuteTimeIntervals expectedTimeIntervals := currentRuleGroup.Rules[idx].GrafanaManagedAlert.NotificationSettings.MuteTimeIntervals
expectedTimeIntervals = replace(expectedTimeIntervals, interval.Spec.Name, actual.Spec.Name) expectedTimeIntervals = replace(expectedTimeIntervals, interval.Spec.Name, actual.Spec.Name)

Loading…
Cancel
Save