This commit is contained in:
Santiago Hernández
2025-12-15 10:56:41 +01:00
parent 13ec5337f4
commit 099bf1dab4
+79
View File
@@ -65,6 +65,85 @@ func TestAlertRuleToModelsAlertRule(t *testing.T) {
})
}
func TestAlertRuleToModelsAlertRuleCompact(t *testing.T) {
t.Run("should only extract datasource UIDs in compact mode", func(t *testing.T) {
rule := alertRule{
ID: 1,
OrgID: 1,
UID: "test-uid",
Title: "Test Rule",
Condition: "A",
Data: `[{"datasourceUid":"ds1","refId":"A","queryType":"test","model":{"expr":"up"}},{"datasourceUid":"ds2","refId":"B","queryType":"test","model":{"expr":"down"}}]`,
IntervalSeconds: 60,
Version: 1,
NamespaceUID: "ns-uid",
RuleGroup: "test-group",
NoDataState: "NoData",
ExecErrState: "Error",
NotificationSettings: `[{"receiver":"test-receiver"}]`,
Metadata: `{"editor_settings":{"simplified_query_and_expressions_section":true}}`,
}
compactResult, err := alertRuleToModelsAlertRuleCompact(rule, &logtest.Fake{})
require.NoError(t, err)
// Should have datasource UIDs.
require.Len(t, compactResult.Data, 2)
require.Equal(t, "ds1", compactResult.Data[0].DatasourceUID)
require.Equal(t, "ds2", compactResult.Data[1].DatasourceUID)
// But should not have full query data (RefID, QueryType, Model should be empty).
require.Empty(t, compactResult.Data[0].RefID)
require.Empty(t, compactResult.Data[0].QueryType)
require.Nil(t, compactResult.Data[0].Model)
require.Empty(t, compactResult.Data[1].RefID)
require.Empty(t, compactResult.Data[1].QueryType)
require.Nil(t, compactResult.Data[1].Model)
// Should not have notification settings.
require.Empty(t, compactResult.NotificationSettings)
// Should not have metadata (should be zero value).
require.Equal(t, ngmodels.AlertRuleMetadata{}, compactResult.Metadata)
})
t.Run("should parse full data in non-compact mode", func(t *testing.T) {
rule := alertRule{
ID: 1,
OrgID: 1,
UID: "test-uid",
Title: "Test Rule",
Condition: "A",
Data: `[{"datasourceUid":"ds1","refId":"A","queryType":"test","model":{"expr":"up"}},{"datasourceUid":"ds2","refId":"B","queryType":"test","model":{"expr":"down"}}]`,
IntervalSeconds: 60,
Version: 1,
NamespaceUID: "ns-uid",
RuleGroup: "test-group",
NoDataState: "NoData",
ExecErrState: "Error",
NotificationSettings: `[{"receiver":"test-receiver"}]`,
Metadata: `{"editor_settings":{"simplified_query_and_expressions_section":true}}`,
}
fullResult, err := alertRuleToModelsAlertRule(rule, &logtest.Fake{})
require.NoError(t, err)
// Should have full query data.
require.Len(t, fullResult.Data, 2)
require.Equal(t, "ds1", fullResult.Data[0].DatasourceUID)
require.Equal(t, "A", fullResult.Data[0].RefID)
require.Equal(t, "test", fullResult.Data[0].QueryType)
require.NotNil(t, fullResult.Data[0].Model)
// Should have notification settings.
require.Len(t, fullResult.NotificationSettings, 1)
require.Equal(t, "test-receiver", fullResult.NotificationSettings[0].Receiver)
// Should have metadata (metadata is parsed from JSON to struct).
require.NotEqual(t, ngmodels.AlertRuleMetadata{}, fullResult.Metadata)
})
}
func TestAlertRuleVersionToAlertRule(t *testing.T) {
g := ngmodels.RuleGen