Files
restic-manager/internal/store/notification_channels_test.go
T

97 lines
2.6 KiB
Go

package store
import (
"context"
"path/filepath"
"testing"
"time"
"github.com/oklog/ulid/v2"
)
func TestNotificationChannelCRUD(t *testing.T) {
t.Parallel()
dir := t.TempDir()
st, err := Open(context.Background(), filepath.Join(dir, "rm.db"))
if err != nil {
t.Fatalf("open: %v", err)
}
defer st.Close()
ctx := context.Background()
ch := NotificationChannel{
ID: ulid.Make().String(), Kind: "webhook", Name: "team-slack",
Enabled: true, Config: []byte("encrypted-blob"),
CreatedAt: time.Now().UTC(), UpdatedAt: time.Now().UTC(),
}
if err := st.CreateNotificationChannel(ctx, ch); err != nil {
t.Fatalf("create: %v", err)
}
got, err := st.GetNotificationChannel(ctx, ch.ID)
if err != nil {
t.Fatalf("get: %v", err)
}
if got.Name != ch.Name || got.Kind != "webhook" || string(got.Config) != "encrypted-blob" {
t.Fatalf("got %+v", got)
}
got.Name = "team-slack-renamed"
got.Enabled = false
got.UpdatedAt = time.Now().UTC()
if err := st.UpdateNotificationChannel(ctx, *got); err != nil {
t.Fatalf("update: %v", err)
}
got2, _ := st.GetNotificationChannel(ctx, ch.ID)
if got2.Name != "team-slack-renamed" || got2.Enabled {
t.Fatalf("update not applied: %+v", got2)
}
all, _ := st.ListEnabledNotificationChannels(ctx)
if len(all) != 0 {
t.Errorf("disabled channel returned by ListEnabled: %d", len(all))
}
if err := st.DeleteNotificationChannel(ctx, ch.ID); err != nil {
t.Fatalf("delete: %v", err)
}
if _, err := st.GetNotificationChannel(ctx, ch.ID); err == nil {
t.Errorf("expected ErrNotFound after delete")
}
}
func TestAppendNotificationLog(t *testing.T) {
t.Parallel()
dir := t.TempDir()
st, _ := Open(context.Background(), filepath.Join(dir, "rm.db"))
defer st.Close()
ctx := context.Background()
chID := ulid.Make().String()
if err := st.CreateNotificationChannel(ctx, NotificationChannel{
ID: chID, Kind: "ntfy", Name: "n", Enabled: true,
Config: []byte{1, 2, 3},
CreatedAt: time.Now().UTC(), UpdatedAt: time.Now().UTC(),
}); err != nil {
t.Fatalf("create channel: %v", err)
}
code := 200
lat := 287
if err := st.AppendNotificationLog(ctx, NotificationLogEntry{
ID: ulid.Make().String(), ChannelID: chID, Event: "alert.test",
OK: true, StatusCode: &code, LatencyMS: &lat,
FiredAt: time.Now().UTC(),
}); err != nil {
t.Fatalf("append: %v", err)
}
// LastFiredAt projection: the channel's last_fired_at is updated
// either by the append helper or by the callers; if you choose the
// helper does the bump, assert it.
got, _ := st.GetNotificationChannel(ctx, chID)
if got.LastFiredAt == nil {
t.Errorf("last_fired_at should bump on AppendNotificationLog success")
}
}