From c7a43c504ebc10640d2822707601a1e48ba9715f Mon Sep 17 00:00:00 2001 From: Cristan Beskid <596554+sferra@users.noreply.github.com> Date: Sat, 10 Feb 2024 23:44:10 +0100 Subject: [PATCH 1/2] Fix Bandcamp plugin search aborting after the first page --- .../src/plugins/stream/BandcampPlugin.test.ts | 60 +++++++++++++++++++ .../core/src/plugins/stream/BandcampPlugin.ts | 2 +- 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 packages/core/src/plugins/stream/BandcampPlugin.test.ts diff --git a/packages/core/src/plugins/stream/BandcampPlugin.test.ts b/packages/core/src/plugins/stream/BandcampPlugin.test.ts new file mode 100644 index 0000000000..8f7bbe14e6 --- /dev/null +++ b/packages/core/src/plugins/stream/BandcampPlugin.test.ts @@ -0,0 +1,60 @@ +import {BandcampPlugin} from '.'; +import {Bandcamp} from '../../rest'; +import spyOn = jest.spyOn; +import {BandcampSearchResult} from '../../rest/Bandcamp'; + +describe('Bandcamp plugin tests', () => { + let plugin: BandcampPlugin; + + beforeEach(() => { + plugin = new BandcampPlugin(); + }); + + describe('find track URLs', () => { + const streamQuery = { + artist: 'Artist Name', + track: 'Track Name' + }; + const trackQuery = 'Track Name'; + const bandcampSearch = spyOn(Bandcamp, 'search'); + + afterEach(() => { + bandcampSearch.mockReset(); + }); + + test('finds track', async () => { + const matchingSearchResult: BandcampSearchResult = { + type: 'track', + artist: 'Artist Name', + name: 'Track Name', + url: null, + imageUrl: null, + tags: null + }; + bandcampSearch.mockResolvedValueOnce([]) + .mockResolvedValueOnce([]) + .mockResolvedValueOnce([]) + .mockResolvedValueOnce([]) + .mockResolvedValueOnce([matchingSearchResult]); + + await expect(plugin.findTrackUrls(streamQuery)) + .resolves.toEqual([matchingSearchResult]); + + expect(bandcampSearch).toHaveBeenCalledTimes(5); + expect(bandcampSearch).toHaveBeenNthCalledWith(1, trackQuery, 0); + expect(bandcampSearch).toHaveBeenNthCalledWith(2, trackQuery, 1); + expect(bandcampSearch).toHaveBeenNthCalledWith(3, trackQuery, 2); + expect(bandcampSearch).toHaveBeenNthCalledWith(4, trackQuery, 3); + expect(bandcampSearch).toHaveBeenNthCalledWith(5, trackQuery, 4); + }); + + test('doesn\'t find tracks', async () => { + bandcampSearch.mockResolvedValue([]); + + await expect(plugin.findTrackUrls(streamQuery)) + .resolves.toEqual([]); + + expect(bandcampSearch).toHaveBeenCalledTimes(5); + }); + }); +}); diff --git a/packages/core/src/plugins/stream/BandcampPlugin.ts b/packages/core/src/plugins/stream/BandcampPlugin.ts index 08d48b90cc..6e52e4bc3b 100644 --- a/packages/core/src/plugins/stream/BandcampPlugin.ts +++ b/packages/core/src/plugins/stream/BandcampPlugin.ts @@ -24,7 +24,7 @@ class BandcampPlugin extends StreamProviderPlugin { item.type === 'track' && item.artist.toLowerCase() === query.artist.toLowerCase() ); - if (tracks) { + if (tracks.length > 0) { break; } } From b8e60f3ea8ecf1b04a35519ffd79382d7b13aa13 Mon Sep 17 00:00:00 2001 From: Cristan Beskid <596554+sferra@users.noreply.github.com> Date: Sun, 11 Feb 2024 17:15:54 +0100 Subject: [PATCH 2/2] Fix formatting and incorrect value types --- .../core/src/plugins/stream/BandcampPlugin.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core/src/plugins/stream/BandcampPlugin.test.ts b/packages/core/src/plugins/stream/BandcampPlugin.test.ts index 8f7bbe14e6..06e59a1c8e 100644 --- a/packages/core/src/plugins/stream/BandcampPlugin.test.ts +++ b/packages/core/src/plugins/stream/BandcampPlugin.test.ts @@ -1,7 +1,7 @@ -import {BandcampPlugin} from '.'; -import {Bandcamp} from '../../rest'; +import { BandcampPlugin } from '.'; +import { Bandcamp } from '../../rest'; import spyOn = jest.spyOn; -import {BandcampSearchResult} from '../../rest/Bandcamp'; +import { BandcampSearchResult } from '../../rest/Bandcamp'; describe('Bandcamp plugin tests', () => { let plugin: BandcampPlugin; @@ -27,9 +27,9 @@ describe('Bandcamp plugin tests', () => { type: 'track', artist: 'Artist Name', name: 'Track Name', - url: null, - imageUrl: null, - tags: null + url: 'URL', + imageUrl: 'image URL', + tags: [] }; bandcampSearch.mockResolvedValueOnce([]) .mockResolvedValueOnce([])