package lidarrrequests import ( "context" "encoding/json" "testing" "git.fabledsword.com/bvandeusen/minstrel/internal/db/dbq" "git.fabledsword.com/bvandeusen/minstrel/internal/lidarrconfig" "git.fabledsword.com/bvandeusen/minstrel/internal/notifications" ) // M489: an album request that arrives lands in the requester's inbox once, // linked to the album it matched. func TestReconciler_CompletionNotifiesRequester(t *testing.T) { pool := newPool(t) q := dbq.New(pool) ctx := context.Background() enableLidarrForPool(t, pool) user := seedUser(t, pool) artist := seedArtist(t, q, "Notify Artist", "notify-artist-mbid") album := seedAlbum(t, q, artist.ID, "Notify Album", "notify-album-mbid") _ = seedTrack(t, q, album.ID, artist.ID, "Notify Track", "/music/notify/01.flac") seedApprovedRequestDirect(t, q, user, CreateParams{ Kind: "album", LidarrArtistMBID: "notify-artist-mbid", LidarrAlbumMBID: "notify-album-mbid", ArtistName: "Notify Artist", AlbumTitle: "Notify Album", }) rec := NewReconciler(pool, lidarrconfig.New(pool), nil, newTestLogger(), nil) rec.SetNotifier(notifications.New(pool, nil, nil)) for i := 0; i < 2; i++ { // the second tick finds nothing left to complete if err := rec.tickOnce(ctx); err != nil { t.Fatalf("tickOnce: %v", err) } } rows, err := q.ListNotifications(ctx, dbq.ListNotificationsParams{UserID: user, PageLimit: 10}) if err != nil { t.Fatalf("list notifications: %v", err) } if len(rows) != 1 || rows[0].Kind != string(notifications.KindRequestCompleted) { t.Fatalf("inbox = %+v, want one request_completed", rows) } var p notifications.Payload if err := json.Unmarshal(rows[0].Payload, &p); err != nil { t.Fatal(err) } if p.Name != "Notify Artist – Notify Album" || p.AlbumID != formatUUIDForBus(album.ID) || p.ArtistID != "" { t.Errorf("payload = %+v", p) } }