diff --git a/src/navidrome.ts b/src/navidrome.ts index 794153e..5fe8527 100644 --- a/src/navidrome.ts +++ b/src/navidrome.ts @@ -657,31 +657,34 @@ export class Navidrome implements MusicService { id, }) .then((it) => it.playlist) - .then((playlist) => ({ - id: playlist._id, - name: playlist._name, - entries: (playlist.entry || []).map((entry) => ({ - id: entry._id, - name: entry._title, - mimeType: entry._contentType, - duration: parseInt(entry._duration || "0"), - number: parseInt(entry._track || "0"), - genre: maybeAsGenre(entry._genre), - album: { - id: entry._albumId, - name: entry._album, - year: entry._year, + .then((playlist) => { + let trackNumber = 1; + return { + id: playlist._id, + name: playlist._name, + entries: (playlist.entry || []).map((entry) => ({ + id: entry._id, + name: entry._title, + mimeType: entry._contentType, + duration: parseInt(entry._duration || "0"), + number: trackNumber++, genre: maybeAsGenre(entry._genre), - - artistName: entry._artist, - artistId: entry._artistId, - }, - artist: { - id: entry._artistId, - name: entry._artist, - }, - })), - })), + album: { + id: entry._albumId, + name: entry._album, + year: entry._year, + genre: maybeAsGenre(entry._genre), + + artistName: entry._artist, + artistId: entry._artistId, + }, + artist: { + id: entry._artistId, + name: entry._artist, + }, + })), + } + }), }; return Promise.resolve(musicLibrary); diff --git a/tests/navidrome.test.ts b/tests/navidrome.test.ts index 3109798..ea5ffb9 100644 --- a/tests/navidrome.test.ts +++ b/tests/navidrome.test.ts @@ -3163,30 +3163,49 @@ describe("Navidrome", () => { describe("when there is a playlist with the id", () => { describe("and it has tracks", () => { it("should return the playlist with entries", async () => { - const playlist = aPlaylist({ - entries: [ - aTrack({ genre: { id: "pop", name: "pop" } }), - aTrack({ genre: { id: "rock", name: "rock" } }), - ], + const id = uuid(); + const name = "Great Playlist"; + const track1 = aTrack({ + genre: { id: "pop", name: "pop" }, + number: 66, + }); + const track2 = aTrack({ + genre: { id: "rock", name: "rock" }, + number: 77, }); mockGET .mockImplementationOnce(() => Promise.resolve(ok(PING_OK))) .mockImplementationOnce(() => - Promise.resolve(ok(getPlayList(playlist))) + Promise.resolve( + ok( + getPlayList({ + id, + name, + entries: [track1, track2], + }) + ) + ) ); const result = await navidrome .generateToken({ username, password }) .then((it) => it as AuthSuccess) .then((it) => navidrome.login(it.authToken)) - .then((it) => it.playlist(playlist.id)); + .then((it) => it.playlist(id)); - expect(result).toEqual(playlist); + expect(result).toEqual({ + id, + name, + entries: [ + { ...track1, number: 1 }, + { ...track2, number: 2 }, + ], + }); expect(mockGET).toHaveBeenCalledWith(`${url}/rest/getPlaylist`, { params: { - id: playlist.id, + id, ...authParams, }, headers,