fix(server/m7-353): log retry-missing errors + tighten 404 test + cover EnrichRetryMissing

This commit is contained in:
2026-05-04 15:04:23 -04:00
parent 78994a60cf
commit 64475d45dc
2 changed files with 66 additions and 2 deletions
+4 -1
View File
@@ -144,7 +144,10 @@ func (e *Enricher) EnrichRetryMissing(ctx context.Context, limit int) (int, erro
if ctx.Err() != nil {
return processed, ctx.Err()
}
_ = e.EnrichAlbum(ctx, r.ID)
if err := e.EnrichAlbum(ctx, r.ID); err != nil {
e.logger.Warn("coverart: retry-missing entry failed",
"album_id", uuidString(r.ID), "err", err)
}
processed++
}
return processed, nil
+62 -1
View File
@@ -164,7 +164,9 @@ func TestEnrichAlbum_MBCAA404_RecordsNone(t *testing.T) {
f := NewFetcher(FetcherConfig{BaseURL: upstream.URL, UserAgent: "test", MinPeriod: 0, HTTPClient: upstream.Client()})
e := NewEnricher(pool, discardLogger(), f, true)
_ = e.EnrichAlbum(context.Background(), id)
if err := e.EnrichAlbum(context.Background(), id); err != nil {
t.Fatalf("enrich: %v", err)
}
row, err := dbq.New(pool).GetAlbumWithFirstTrackPath(context.Background(), id)
if err != nil {
@@ -267,3 +269,62 @@ func TestRetryAlbum_DeletesMbcaaFileAndRefetches(t *testing.T) {
t.Errorf("source after retry = %v, want 'mbcaa'", row.CoverArtSource)
}
}
func TestEnrichRetryMissing_DrainsNullAndNone(t *testing.T) {
pool := newPool(t)
// Three albums:
// id1: NULL source, has sidecar → drains, becomes 'sidecar'.
// id2: 'none' source, has sidecar → cleared then drained, becomes 'sidecar'.
// id3: 'sidecar' source already → NOT touched.
id1, dir1 := seedAlbumWithTrack(t, pool, "RM1", "A", "")
if err := os.WriteFile(filepath.Join(dir1, "cover.jpg"), []byte("c1"), 0o644); err != nil {
t.Fatal(err)
}
id2, dir2 := seedAlbumWithTrack(t, pool, "RM2", "B", "")
if err := os.WriteFile(filepath.Join(dir2, "cover.jpg"), []byte("c2"), 0o644); err != nil {
t.Fatal(err)
}
none := "none"
if err := dbq.New(pool).SetAlbumCover(context.Background(), dbq.SetAlbumCoverParams{
ID: id2, Column2: "", CoverArtSource: &none,
}); err != nil {
t.Fatal(err)
}
id3, dir3 := seedAlbumWithTrack(t, pool, "RM3", "C", "")
if err := os.WriteFile(filepath.Join(dir3, "cover.jpg"), []byte("c3"), 0o644); err != nil {
t.Fatal(err)
}
sidecar := "sidecar"
preservedPath := filepath.Join(dir3, "cover.jpg")
if err := dbq.New(pool).SetAlbumCover(context.Background(), dbq.SetAlbumCoverParams{
ID: id3, Column2: preservedPath, CoverArtSource: &sidecar,
}); err != nil {
t.Fatal(err)
}
e := NewEnricher(pool, discardLogger(), nil, false)
processed, err := e.EnrichRetryMissing(context.Background(), 100)
if err != nil {
t.Fatalf("retry missing: %v", err)
}
if processed != 2 {
t.Errorf("processed = %d, want 2 (id1 NULL + id2 'none'; id3 already 'sidecar' not touched)", processed)
}
q := dbq.New(pool)
for _, c := range []struct {
id pgtype.UUID
want string
}{
{id1, "sidecar"},
{id2, "sidecar"},
{id3, "sidecar"},
} {
row, _ := q.GetAlbumWithFirstTrackPath(context.Background(), c.id)
if row.CoverArtSource == nil || *row.CoverArtSource != c.want {
t.Errorf("album %v source = %v, want %q", c.id, row.CoverArtSource, c.want)
}
}
}