MG-389 - Return all values on alarm update (#390)

Signed-off-by: Felix Gateru <felix.gateru@gmail.com>
This commit is contained in:
Felix Gateru
2026-01-23 12:08:43 +03:00
committed by GitHub
parent f3ce37a80d
commit 2c37cfc53c
2 changed files with 97 additions and 88 deletions
+3 -1
View File
@@ -130,7 +130,9 @@ func (r *repository) UpdateAlarm(ctx context.Context, alarm alarms.Alarm) (alarm
}
q := fmt.Sprintf(`UPDATE alarms SET %s updated_by = :updated_by, updated_at = :updated_at WHERE id = :id
RETURNING id, rule_id, measurement, value, unit, cause, status, domain_id, assignee_id, metadata, created_at, updated_by, updated_at, resolved_by, resolved_at;`, upq)
RETURNING id, rule_id, domain_id, channel_id, client_id, subtopic, measurement, value, unit, threshold,
cause, status, severity, assignee_id, assigned_at, assigned_by, acknowledged_at, acknowledged_by,
resolved_by, resolved_at, metadata, created_at, updated_by, updated_at;`, upq)
dba, err := toDBAlarm(alarm)
if err != nil {
+94 -87
View File
@@ -34,11 +34,11 @@ func TestCreateAlarm(t *testing.T) {
repo := postgres.NewAlarmsRepo(db)
alarm := alarms.Alarm{
ID: generateUUID(&testing.T{}),
RuleID: generateUUID(&testing.T{}),
DomainID: generateUUID(&testing.T{}),
ChannelID: generateUUID(&testing.T{}),
ClientID: generateUUID(&testing.T{}),
ID: generateUUID(t),
RuleID: generateUUID(t),
DomainID: generateUUID(t),
ChannelID: generateUUID(t),
ClientID: generateUUID(t),
Subtopic: namegen.Generate(),
Measurement: namegen.Generate(),
Value: namegen.Generate(),
@@ -46,8 +46,8 @@ func TestCreateAlarm(t *testing.T) {
Threshold: namegen.Generate(),
Cause: namegen.Generate(),
Status: 0,
AssigneeID: generateUUID(&testing.T{}),
CreatedAt: time.Now().Local(),
AssigneeID: generateUUID(t),
CreatedAt: time.Now().UTC(),
Metadata: map[string]any{
"key": "value",
},
@@ -71,10 +71,10 @@ func TestCreateAlarm(t *testing.T) {
{
desc: "missing rule id",
alarm: alarms.Alarm{
ID: generateUUID(&testing.T{}),
DomainID: generateUUID(&testing.T{}),
ChannelID: generateUUID(&testing.T{}),
ClientID: generateUUID(&testing.T{}),
ID: generateUUID(t),
DomainID: generateUUID(t),
ChannelID: generateUUID(t),
ClientID: generateUUID(t),
Subtopic: namegen.Generate(),
Measurement: namegen.Generate(),
Value: namegen.Generate(),
@@ -82,8 +82,8 @@ func TestCreateAlarm(t *testing.T) {
Threshold: namegen.Generate(),
Cause: namegen.Generate(),
Status: 0,
AssigneeID: generateUUID(&testing.T{}),
CreatedAt: time.Now().Local(),
AssigneeID: generateUUID(t),
CreatedAt: time.Now().UTC(),
Metadata: map[string]any{
"key": "value",
@@ -94,10 +94,10 @@ func TestCreateAlarm(t *testing.T) {
{
desc: "invalid alarm",
alarm: alarms.Alarm{
ID: generateUUID(&testing.T{}),
DomainID: generateUUID(&testing.T{}),
ChannelID: generateUUID(&testing.T{}),
ClientID: generateUUID(&testing.T{}),
ID: generateUUID(t),
DomainID: generateUUID(t),
ChannelID: generateUUID(t),
ClientID: generateUUID(t),
Subtopic: namegen.Generate(),
Measurement: namegen.Generate(),
Value: namegen.Generate(),
@@ -105,8 +105,8 @@ func TestCreateAlarm(t *testing.T) {
Threshold: namegen.Generate(),
Cause: namegen.Generate(),
Status: 0,
AssigneeID: generateUUID(&testing.T{}),
CreatedAt: time.Now().Local(),
AssigneeID: generateUUID(t),
CreatedAt: time.Now().UTC(),
Metadata: map[string]any{
"key": make(chan int),
@@ -129,17 +129,17 @@ func TestCreateAlarm(t *testing.T) {
return
}
require.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
require.NotEmpty(t, alarm.ID)
require.Equal(t, tc.alarm.RuleID, alarm.RuleID)
require.Equal(t, tc.alarm.Measurement, alarm.Measurement)
require.Equal(t, tc.alarm.Value, alarm.Value)
require.Equal(t, tc.alarm.Unit, alarm.Unit)
require.Equal(t, tc.alarm.Cause, alarm.Cause)
require.Equal(t, tc.alarm.Status, alarm.Status)
require.Equal(t, tc.alarm.DomainID, alarm.DomainID)
require.Equal(t, tc.alarm.AssigneeID, alarm.AssigneeID)
require.Equal(t, tc.alarm.Metadata, alarm.Metadata)
assert.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
assert.NotEmpty(t, alarm.ID)
assert.Equal(t, tc.alarm.RuleID, alarm.RuleID)
assert.Equal(t, tc.alarm.Measurement, alarm.Measurement)
assert.Equal(t, tc.alarm.Value, alarm.Value)
assert.Equal(t, tc.alarm.Unit, alarm.Unit)
assert.Equal(t, tc.alarm.Cause, alarm.Cause)
assert.Equal(t, tc.alarm.Status, alarm.Status)
assert.Equal(t, tc.alarm.DomainID, alarm.DomainID)
assert.Equal(t, tc.alarm.AssigneeID, alarm.AssigneeID)
assert.Equal(t, tc.alarm.Metadata, alarm.Metadata)
})
}
}
@@ -153,19 +153,19 @@ func TestUpdateAlarm(t *testing.T) {
repo := postgres.NewAlarmsRepo(db)
alarm := alarms.Alarm{
ID: generateUUID(&testing.T{}),
RuleID: generateUUID(&testing.T{}),
DomainID: generateUUID(&testing.T{}),
ChannelID: generateUUID(&testing.T{}),
ClientID: generateUUID(&testing.T{}),
ID: generateUUID(t),
RuleID: generateUUID(t),
DomainID: generateUUID(t),
ChannelID: generateUUID(t),
ClientID: generateUUID(t),
Measurement: namegen.Generate(),
Value: namegen.Generate(),
Unit: namegen.Generate(),
Threshold: namegen.Generate(),
Cause: namegen.Generate(),
Status: 0,
AssigneeID: generateUUID(&testing.T{}),
CreatedAt: time.Now().Local(),
AssigneeID: generateUUID(t),
CreatedAt: time.Now().UTC(),
Metadata: map[string]any{
"key": "value",
},
@@ -181,15 +181,19 @@ func TestUpdateAlarm(t *testing.T) {
{
desc: "valid alarm",
alarm: alarms.Alarm{
ID: alarm.ID,
Status: alarms.ActiveStatus,
DomainID: alarm.DomainID,
AssigneeID: generateUUID(&testing.T{}),
CreatedAt: alarm.CreatedAt,
UpdatedAt: time.Now().Local(),
UpdatedBy: generateUUID(&testing.T{}),
ResolvedAt: time.Now().Local(),
ResolvedBy: generateUUID(&testing.T{}),
ID: alarm.ID,
Status: alarms.ClearedStatus,
DomainID: alarm.DomainID,
AssigneeID: generateUUID(t),
AssignedBy: generateUUID(t),
AssignedAt: time.Now().UTC(),
AcknowledgedBy: generateUUID(t),
AcknowledgedAt: time.Now().UTC(),
CreatedAt: alarm.CreatedAt,
UpdatedAt: time.Now().UTC(),
UpdatedBy: generateUUID(t),
ResolvedAt: time.Now().UTC(),
ResolvedBy: generateUUID(t),
Metadata: map[string]any{
"key": "value",
},
@@ -199,7 +203,7 @@ func TestUpdateAlarm(t *testing.T) {
{
desc: "non existing alarm",
alarm: alarms.Alarm{
ID: generateUUID(&testing.T{}),
ID: generateUUID(t),
},
err: repoerr.ErrNotFound,
},
@@ -207,11 +211,11 @@ func TestUpdateAlarm(t *testing.T) {
desc: "invalid alarm",
alarm: alarms.Alarm{
ID: alarm.ID,
RuleID: generateUUID(&testing.T{}),
RuleID: generateUUID(t),
Status: 0,
DomainID: generateUUID(&testing.T{}),
DomainID: generateUUID(t),
AssigneeID: strings.Repeat("a", 40),
CreatedAt: time.Now().Local(),
CreatedAt: time.Now().UTC(),
Metadata: map[string]any{
"key": "value",
},
@@ -233,12 +237,15 @@ func TestUpdateAlarm(t *testing.T) {
return
}
require.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
require.NotEmpty(t, alarm.ID)
require.Equal(t, tc.alarm.Status, alarm.Status)
require.Equal(t, tc.alarm.DomainID, alarm.DomainID)
require.Equal(t, tc.alarm.AssigneeID, alarm.AssigneeID)
require.Equal(t, tc.alarm.Metadata, alarm.Metadata)
assert.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
assert.NotEmpty(t, alarm.ID)
assert.Equal(t, tc.alarm.Status, alarm.Status)
assert.Equal(t, tc.alarm.DomainID, alarm.DomainID)
assert.Equal(t, tc.alarm.AssigneeID, alarm.AssigneeID)
assert.Equal(t, tc.alarm.UpdatedBy, alarm.UpdatedBy)
assert.Equal(t, tc.alarm.ResolvedBy, alarm.ResolvedBy)
assert.Equal(t, tc.alarm.AcknowledgedBy, alarm.AcknowledgedBy)
assert.Equal(t, tc.alarm.Metadata, alarm.Metadata)
})
}
}
@@ -252,19 +259,19 @@ func TestViewAlarm(t *testing.T) {
repo := postgres.NewAlarmsRepo(db)
alarm := alarms.Alarm{
ID: generateUUID(&testing.T{}),
RuleID: generateUUID(&testing.T{}),
DomainID: generateUUID(&testing.T{}),
ChannelID: generateUUID(&testing.T{}),
ClientID: generateUUID(&testing.T{}),
ID: generateUUID(t),
RuleID: generateUUID(t),
DomainID: generateUUID(t),
ChannelID: generateUUID(t),
ClientID: generateUUID(t),
Measurement: namegen.Generate(),
Value: namegen.Generate(),
Unit: namegen.Generate(),
Threshold: namegen.Generate(),
Cause: namegen.Generate(),
Status: 0,
AssigneeID: generateUUID(&testing.T{}),
CreatedAt: time.Now().Local(),
AssigneeID: generateUUID(t),
CreatedAt: time.Now().UTC(),
Metadata: map[string]any{
"key": "value",
},
@@ -286,14 +293,14 @@ func TestViewAlarm(t *testing.T) {
},
{
desc: "non existing alarm id",
id: generateUUID(&testing.T{}),
id: generateUUID(t),
domainID: alarm.DomainID,
err: repoerr.ErrNotFound,
},
{
desc: "non existing domain id",
id: alarm.ID,
domainID: generateUUID(&testing.T{}),
domainID: generateUUID(t),
err: repoerr.ErrNotFound,
},
}
@@ -306,9 +313,9 @@ func TestViewAlarm(t *testing.T) {
return
}
require.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
require.NotEmpty(t, alarm.ID)
require.Equal(t, tc.id, alarm.ID)
assert.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
assert.NotEmpty(t, alarm.ID)
assert.Equal(t, tc.id, alarm.ID)
})
}
}
@@ -322,19 +329,19 @@ func TestListAlarms(t *testing.T) {
items := make([]alarms.Alarm, 1000)
for i := range 1000 {
items[i] = alarms.Alarm{
ID: generateUUID(&testing.T{}),
RuleID: generateUUID(&testing.T{}),
DomainID: generateUUID(&testing.T{}),
ChannelID: generateUUID(&testing.T{}),
ClientID: generateUUID(&testing.T{}),
ID: generateUUID(t),
RuleID: generateUUID(t),
DomainID: generateUUID(t),
ChannelID: generateUUID(t),
ClientID: generateUUID(t),
Measurement: namegen.Generate(),
Value: namegen.Generate(),
Unit: namegen.Generate(),
Threshold: namegen.Generate(),
Cause: namegen.Generate(),
Status: 0,
AssigneeID: generateUUID(&testing.T{}),
CreatedAt: time.Now().Local(),
AssigneeID: generateUUID(t),
CreatedAt: time.Now().UTC(),
Metadata: map[string]any{
"key": "value",
},
@@ -388,7 +395,7 @@ func TestListAlarms(t *testing.T) {
pm: alarms.PageMetadata{
Offset: 0,
Limit: 10,
AssigneeID: generateUUID(&testing.T{}),
AssigneeID: generateUUID(t),
},
response: []alarms.Alarm{},
err: nil,
@@ -402,8 +409,8 @@ func TestListAlarms(t *testing.T) {
return
}
require.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
require.Equal(t, len(tc.response), len(alarms.Alarms))
assert.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
assert.Equal(t, len(tc.response), len(alarms.Alarms))
})
}
}
@@ -417,19 +424,19 @@ func TestDeleteAlarm(t *testing.T) {
repo := postgres.NewAlarmsRepo(db)
alarm := alarms.Alarm{
ID: generateUUID(&testing.T{}),
RuleID: generateUUID(&testing.T{}),
DomainID: generateUUID(&testing.T{}),
ChannelID: generateUUID(&testing.T{}),
ClientID: generateUUID(&testing.T{}),
ID: generateUUID(t),
RuleID: generateUUID(t),
DomainID: generateUUID(t),
ChannelID: generateUUID(t),
ClientID: generateUUID(t),
Measurement: namegen.Generate(),
Value: namegen.Generate(),
Unit: namegen.Generate(),
Threshold: namegen.Generate(),
Cause: namegen.Generate(),
Status: 0,
AssigneeID: generateUUID(&testing.T{}),
CreatedAt: time.Now().Local(),
AssigneeID: generateUUID(t),
CreatedAt: time.Now().UTC(),
Metadata: map[string]any{
"key": "value",
},
@@ -449,7 +456,7 @@ func TestDeleteAlarm(t *testing.T) {
},
{
desc: "non existing alarm",
id: generateUUID(&testing.T{}),
id: generateUUID(t),
err: repoerr.ErrNotFound,
},
}
@@ -462,7 +469,7 @@ func TestDeleteAlarm(t *testing.T) {
return
}
require.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
assert.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
})
}
}