From 696a07dc05254810cd655f00c3217be5f5e9d1be Mon Sep 17 00:00:00 2001 From: Olga Bulat Date: Wed, 11 Oct 2023 09:53:34 +0300 Subject: [PATCH 1/3] Fix undefined in provider data --- frontend/src/data/media-provider-service.ts | 11 +++++++++-- frontend/src/stores/provider.ts | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/frontend/src/data/media-provider-service.ts b/frontend/src/data/media-provider-service.ts index 7e129c1fbaf..4b26cd7b665 100644 --- a/frontend/src/data/media-provider-service.ts +++ b/frontend/src/data/media-provider-service.ts @@ -2,6 +2,7 @@ import { AUDIO, IMAGE } from "~/constants/media" import type { AudioDetail, ImageDetail, Media } from "~/types/media" import { ApiService, createApiService } from "~/data/api-service" import type { MediaProvider } from "~/types/media-provider" +import { warn } from "~/utils/console" export class MediaProviderService { private readonly apiService: ApiService @@ -16,8 +17,14 @@ export class MediaProviderService { * Implements an endpoint to get audio provider statistics. * SSR-called */ - async getProviderStats(): Promise<{ data: MediaProvider[] }> { - return await this.apiService.get(this.mediaType, "stats") + async getProviderStats(): Promise { + const res = await this.apiService.get(this.mediaType, "stats") + if (res.data && Array.isArray(res.data)) { + return res.data + } else { + warn(`Invalid response from provider stats endpoint: ${res}`) + return [] + } } } diff --git a/frontend/src/stores/provider.ts b/frontend/src/stores/provider.ts index 7cd9970c643..1f50b66c34f 100644 --- a/frontend/src/stores/provider.ts +++ b/frontend/src/stores/provider.ts @@ -142,7 +142,7 @@ export const useProviderStore = defineStore("provider", { this.$nuxt?.$config?.apiAccessToken ) const res = await service.getProviderStats() - sortedProviders = sortProviders(res.data) + sortedProviders = sortProviders(res) this._updateFetchState(mediaType, "end") } catch (error: unknown) { const errorData = parseFetchingError(error, mediaType, "provider") From a35e1a8506379d386b36f0bbaa287959c3758357 Mon Sep 17 00:00:00 2001 From: Olga Bulat Date: Wed, 11 Oct 2023 13:02:37 +0300 Subject: [PATCH 2/3] Update unit test --- frontend/test/unit/specs/stores/provider.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/test/unit/specs/stores/provider.spec.js b/frontend/test/unit/specs/stores/provider.spec.js index 035851e07ad..4af16b838b2 100644 --- a/frontend/test/unit/specs/stores/provider.spec.js +++ b/frontend/test/unit/specs/stores/provider.spec.js @@ -39,7 +39,7 @@ const mockData = [ }, ] -const mockImplementation = () => Promise.resolve({ data: [...mockData] }) +const mockImplementation = () => Promise.resolve([...mockData]) const mock = jest.fn().mockImplementation(mockImplementation) jest.mock("~/data/media-provider-service", () => ({ initProviderServices: { From d8f97acdb08259fe21068d81f5f53ce319878035 Mon Sep 17 00:00:00 2001 From: Olga Bulat Date: Tue, 24 Oct 2023 06:25:34 +0300 Subject: [PATCH 3/3] Add unit test --- frontend/src/data/media-provider-service.ts | 8 +++++- .../specs/data/media-provider-service.spec.js | 28 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 frontend/test/unit/specs/data/media-provider-service.spec.js diff --git a/frontend/src/data/media-provider-service.ts b/frontend/src/data/media-provider-service.ts index 4b26cd7b665..0453d360457 100644 --- a/frontend/src/data/media-provider-service.ts +++ b/frontend/src/data/media-provider-service.ts @@ -22,7 +22,13 @@ export class MediaProviderService { if (res.data && Array.isArray(res.data)) { return res.data } else { - warn(`Invalid response from provider stats endpoint: ${res}`) + warn( + `Invalid response from provider stats endpoint: ${JSON.stringify( + res, + null, + 2 + )}` + ) return [] } } diff --git a/frontend/test/unit/specs/data/media-provider-service.spec.js b/frontend/test/unit/specs/data/media-provider-service.spec.js new file mode 100644 index 00000000000..e6ed4d0d0f3 --- /dev/null +++ b/frontend/test/unit/specs/data/media-provider-service.spec.js @@ -0,0 +1,28 @@ +import { initProviderServices } from "~/data/media-provider-service" +import { warn } from "~/utils/console" + +jest.mock("~/utils/console", () => ({ warn: jest.fn(), log: jest.fn() })) +let mockReturn = {} +jest.mock("~/data/api-service", () => ({ + createApiService: function () { + return { + get: async () => { + return mockReturn + }, + } + }, +})) + +describe("Media Provider Service", () => { + afterEach(() => { + warn.mockClear() + }) + it("No data in response", async () => { + const result = await initProviderServices.image().getProviderStats() + expect(result).toEqual([]) + expect(warn).toHaveBeenCalledTimes(1) + expect(warn).toHaveBeenCalledWith( + "Invalid response from provider stats endpoint: {}" + ) + }) +})