Alerting: Ensure failed query validation returns the proper error code (#110717)

Ensure presave error is a validation error
This commit is contained in:
William Wernert
2025-09-08 13:51:22 -04:00
committed by GitHub
parent 76976ef648
commit 61adae16f2
2 changed files with 23 additions and 1 deletions
@@ -673,6 +673,28 @@ func TestIntegrationProvisioningApi(t *testing.T) {
require.NotEmpty(t, response.Body())
require.Contains(t, string(response.Body()), "invalid alert rule")
})
t.Run("PUT returns 400 when the alert rule has invalid queries", func(t *testing.T) {
sut := createProvisioningSrvSut(t)
rc := createTestRequestCtx()
group := definitions.AlertRuleGroup{
Title: "test rule group",
Interval: 60,
Rules: []definitions.ProvisionedAlertRule{
createTestAlertRule("rule", 1),
},
}
// Set an invalid query model that will fail PreSave validation
// Invalid JSON should trigger unmarshal error in PreSave
group.Rules[0].Data[0].Model = json.RawMessage(`{invalid json`)
response := sut.RoutePutAlertRuleGroup(&rc, group, "folder-uid", group.Title)
require.Equal(t, 400, response.Status())
require.NotEmpty(t, response.Body())
require.Contains(t, string(response.Body()), "invalid alert rule")
require.Contains(t, string(response.Body()), "invalid alert query")
})
})
t.Run("have reached the rule quota, PUT returns 403", func(t *testing.T) {
+1 -1
View File
@@ -642,7 +642,7 @@ func (alertRule *AlertRule) PreSave(timeNow func() time.Time, userUID *UserUID)
for i, q := range alertRule.Data {
err := q.PreSave()
if err != nil {
return fmt.Errorf("invalid alert query %s: %w", q.RefID, err)
return errors.Join(ErrAlertRuleFailedValidation, fmt.Errorf("invalid alert query %s: %w", q.RefID, err))
}
alertRule.Data[i] = q
}