From e2e73209a2cb55a57fa05e444879c9e43a5d13d0 Mon Sep 17 00:00:00 2001 From: simojenki Date: Sun, 29 Aug 2021 08:14:23 +1000 Subject: [PATCH] Fix bug where no genres caused error --- src/navidrome.ts | 2 +- tests/navidrome.test.ts | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/navidrome.ts b/src/navidrome.ts index 54baac8..a66c3cc 100644 --- a/src/navidrome.ts +++ b/src/navidrome.ts @@ -537,7 +537,7 @@ export class Navidrome implements MusicService { .getJSON(credentials, "/rest/getGenres") .then((it) => pipe( - it.genres.genre, + it.genres.genre || [], A.map((it) => it.__text), A.sort(ordString), A.map((it) => ({ id: it, name: it })) diff --git a/tests/navidrome.test.ts b/tests/navidrome.test.ts index 28b3511..e9c7bc2 100644 --- a/tests/navidrome.test.ts +++ b/tests/navidrome.test.ts @@ -453,6 +453,29 @@ describe("Navidrome", () => { }); describe("getting genres", () => { + describe("when there are none", () => { + beforeEach(() => { + mockGET + .mockImplementationOnce(() => Promise.resolve(ok(PING_OK))) + .mockImplementationOnce(() => Promise.resolve(ok(genresXml([])))); + }); + + it("should return them alphabetically sorted", async () => { + const result = await navidrome + .generateToken({ username, password }) + .then((it) => it as AuthSuccess) + .then((it) => navidrome.login(it.authToken)) + .then((it) => it.genres()); + + expect(result).toEqual([]); + + expect(axios.get).toHaveBeenCalledWith(`${url}/rest/getGenres`, { + params: asURLSearchParams(authParams), + headers, + }); + }); + }); + describe("when there is only 1", () => { const genres = ["genre1"];