package subsonic import ( "os" "path/filepath" "testing" "github.com/jackc/pgx/v5/pgtype" ) func TestFindSidecarCover(t *testing.T) { dir := t.TempDir() track := filepath.Join(dir, "01 - song.mp3") if err := os.WriteFile(track, []byte("audio"), 0o644); err != nil { t.Fatalf("write track: %v", err) } // Empty dir first: no cover. if got := findSidecarCover(track); got != "" { t.Errorf("no sidecar → %q, want empty", got) } // folder.jpg lower priority than cover.jpg: add folder first, expect hit; // then add cover.jpg, expect cover to win. folder := filepath.Join(dir, "folder.jpg") if err := os.WriteFile(folder, []byte("jpg"), 0o644); err != nil { t.Fatal(err) } if got := findSidecarCover(track); got != folder { t.Errorf("folder.jpg fallback = %q, want %q", got, folder) } cover := filepath.Join(dir, "cover.jpg") if err := os.WriteFile(cover, []byte("jpg"), 0o644); err != nil { t.Fatal(err) } if got := findSidecarCover(track); got != cover { t.Errorf("cover.jpg priority = %q, want %q", got, cover) } } func TestImageContentType(t *testing.T) { cases := map[string]string{ "cover.jpg": "image/jpeg", "cover.JPEG": "image/jpeg", "art.png": "image/png", "thumb.gif": "image/gif", "square.webp": "image/webp", "unknown.tiff": "application/octet-stream", } for in, want := range cases { if got := imageContentType(in); got != want { t.Errorf("imageContentType(%q) = %q, want %q", in, got, want) } } } func TestNowPlayingMap(t *testing.T) { m := newNowPlayingMap() user := "user-1" if _, ok := m.Get(user); ok { t.Fatalf("unexpected entry on fresh map") } var trackID pgtype.UUID _ = trackID.Scan("6ba7b810-9dad-11d1-80b4-00c04fd430c8") m.Set(user, trackID) entry, ok := m.Get(user) if !ok { t.Fatalf("Set did not persist") } if uuidToID(entry.TrackID) != "6ba7b810-9dad-11d1-80b4-00c04fd430c8" { t.Errorf("trackID round-trip broke: %q", uuidToID(entry.TrackID)) } if entry.At.IsZero() { t.Errorf("At timestamp not set") } }