Skip to content

Commit 23d4536

Browse files
authored
Hotfix for undefined in Nuxt provider data (#3185)
* Fix undefined in provider data * Update unit test * Add unit test
1 parent 7cb0b90 commit 23d4536

File tree

4 files changed

+45
-4
lines changed

4 files changed

+45
-4
lines changed

frontend/src/data/media-provider-service.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { AUDIO, IMAGE } from "~/constants/media"
22
import type { AudioDetail, ImageDetail, Media } from "~/types/media"
33
import { ApiService, createApiService } from "~/data/api-service"
44
import type { MediaProvider } from "~/types/media-provider"
5+
import { warn } from "~/utils/console"
56

67
export class MediaProviderService<T extends Media> {
78
private readonly apiService: ApiService
@@ -16,8 +17,20 @@ export class MediaProviderService<T extends Media> {
1617
* Implements an endpoint to get audio provider statistics.
1718
* SSR-called
1819
*/
19-
async getProviderStats(): Promise<{ data: MediaProvider[] }> {
20-
return await this.apiService.get(this.mediaType, "stats")
20+
async getProviderStats(): Promise<MediaProvider[]> {
21+
const res = await this.apiService.get(this.mediaType, "stats")
22+
if (res.data && Array.isArray(res.data)) {
23+
return res.data
24+
} else {
25+
warn(
26+
`Invalid response from provider stats endpoint: ${JSON.stringify(
27+
res,
28+
null,
29+
2
30+
)}`
31+
)
32+
return []
33+
}
2134
}
2235
}
2336

frontend/src/stores/provider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ export const useProviderStore = defineStore("provider", {
142142
this.$nuxt?.$config?.apiAccessToken
143143
)
144144
const res = await service.getProviderStats()
145-
sortedProviders = sortProviders(res.data)
145+
sortedProviders = sortProviders(res)
146146
this._updateFetchState(mediaType, "end")
147147
} catch (error: unknown) {
148148
const errorData = parseFetchingError(error, mediaType, "provider")
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { initProviderServices } from "~/data/media-provider-service"
2+
import { warn } from "~/utils/console"
3+
4+
jest.mock("~/utils/console", () => ({ warn: jest.fn(), log: jest.fn() }))
5+
let mockReturn = {}
6+
jest.mock("~/data/api-service", () => ({
7+
createApiService: function () {
8+
return {
9+
get: async () => {
10+
return mockReturn
11+
},
12+
}
13+
},
14+
}))
15+
16+
describe("Media Provider Service", () => {
17+
afterEach(() => {
18+
warn.mockClear()
19+
})
20+
it("No data in response", async () => {
21+
const result = await initProviderServices.image().getProviderStats()
22+
expect(result).toEqual([])
23+
expect(warn).toHaveBeenCalledTimes(1)
24+
expect(warn).toHaveBeenCalledWith(
25+
"Invalid response from provider stats endpoint: {}"
26+
)
27+
})
28+
})

frontend/test/unit/specs/stores/provider.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ const mockData = [
3939
},
4040
]
4141

42-
const mockImplementation = () => Promise.resolve({ data: [...mockData] })
42+
const mockImplementation = () => Promise.resolve([...mockData])
4343
const mock = jest.fn().mockImplementation(mockImplementation)
4444
jest.mock("~/data/media-provider-service", () => ({
4545
initProviderServices: {

0 commit comments

Comments
 (0)