diff --git a/next-ui/src/colada/queries/actuator-info.test.ts b/next-ui/src/colada/queries/actuator-info.test.ts index 9a0b2c1d..ff436441 100644 --- a/next-ui/src/colada/queries/actuator-info.test.ts +++ b/next-ui/src/colada/queries/actuator-info.test.ts @@ -1,14 +1,21 @@ -import { afterAll, afterEach, beforeAll, expect, test } from 'vitest' +import { afterAll, afterEach, beforeAll, beforeEach, expect, test } from 'vitest' import { server } from '@/mocks/api/node' import { useActuatorInfo } from '@/colada/queries/actuator-info' -import { mockPiniaColada } from '@/mocks/pinia-colada' +import { createMockColada } from '@/mocks/pinia-colada' +import { http, HttpResponse } from 'msw' +import { baseUrl } from '@/mocks/api/handlers/base' +import { VueWrapper } from '@vue/test-utils' +let mock: VueWrapper beforeAll(() => server.listen()) -afterEach(() => server.resetHandlers()) -afterAll(() => { - server.close() - mockPiniaColada.unmount() +beforeEach(() => { + mock = createMockColada() }) +afterEach(() => { + server.resetHandlers() + mock.unmount() +}) +afterAll(() => server.close()) test('when getting actuator-info then values are correct', async () => { const { buildVersion, commitId, refresh } = useActuatorInfo() @@ -17,3 +24,17 @@ test('when getting actuator-info then values are correct', async () => { expect(buildVersion.value).toBe('9.9.9') expect(commitId.value).toBe('ABC123') }) + +test('when failing to get actuator-info then values are undefined', async () => { + server.use( + http.get(baseUrl + 'actuator/info', () => { + return HttpResponse.json({ error: 'Unauthorized' }, { status: 401 }) + }), + ) + + const { buildVersion, commitId, refresh } = useActuatorInfo() + + await refresh() + expect(buildVersion.value).toBeUndefined() + expect(commitId.value).toBeUndefined() +}) diff --git a/next-ui/src/colada/queries/announcements.test.ts b/next-ui/src/colada/queries/announcements.test.ts index 1983eb0a..86fd56de 100644 --- a/next-ui/src/colada/queries/announcements.test.ts +++ b/next-ui/src/colada/queries/announcements.test.ts @@ -1,14 +1,19 @@ -import { afterAll, afterEach, beforeAll, expect, test } from 'vitest' +import { afterAll, afterEach, beforeAll, beforeEach, expect, test } from 'vitest' import { server } from '@/mocks/api/node' -import { mockPiniaColada } from '@/mocks/pinia-colada' +import { createMockColada } from '@/mocks/pinia-colada' import { useAnnouncements } from '@/colada/queries/announcements' +import { VueWrapper } from '@vue/test-utils' +let mock: VueWrapper beforeAll(() => server.listen()) -afterEach(() => server.resetHandlers()) -afterAll(() => { - server.close() - mockPiniaColada.unmount() +beforeEach(() => { + mock = createMockColada() }) +afterEach(() => { + server.resetHandlers() + mock.unmount() +}) +afterAll(() => server.close()) test('when getting announcements then values are correct', async () => { const { unreadCount, refresh } = useAnnouncements() diff --git a/next-ui/src/colada/queries/app-releases.test.ts b/next-ui/src/colada/queries/app-releases.test.ts index 80be7f03..5a0df62a 100644 --- a/next-ui/src/colada/queries/app-releases.test.ts +++ b/next-ui/src/colada/queries/app-releases.test.ts @@ -1,14 +1,19 @@ -import { afterAll, afterEach, beforeAll, expect, test } from 'vitest' +import { afterAll, afterEach, beforeAll, beforeEach, expect, test } from 'vitest' import { server } from '@/mocks/api/node' -import { mockPiniaColada } from '@/mocks/pinia-colada' +import { createMockColada } from '@/mocks/pinia-colada' import { useAppReleases } from '@/colada/queries/app-releases' +import { VueWrapper } from '@vue/test-utils' +let mock: VueWrapper beforeAll(() => server.listen()) -afterEach(() => server.resetHandlers()) -afterAll(() => { - server.close() - mockPiniaColada.unmount() +beforeEach(() => { + mock = createMockColada() }) +afterEach(() => { + server.resetHandlers() + mock.unmount() +}) +afterAll(() => server.close()) test('when getting app releases then values are correct', async () => { const { latestRelease, isLatestVersion, refresh } = useAppReleases() diff --git a/next-ui/src/mocks/api/handlers/actuator.ts b/next-ui/src/mocks/api/handlers/actuator.ts index f518f21c..877323b6 100644 --- a/next-ui/src/mocks/api/handlers/actuator.ts +++ b/next-ui/src/mocks/api/handlers/actuator.ts @@ -1,43 +1,45 @@ import { http, HttpResponse } from 'msw' import { baseUrl } from '@/mocks/api/handlers/base' +export const actuatorResponseOk = { + git: { + branch: 'master', + commit: { + id: 'ABC123', + time: '2025-05-16T03:26:50Z', + }, + }, + build: { + artifact: 'komga', + name: 'komga', + version: '9.9.9', + group: 'komga', + }, + java: { + version: '23.0.2', + vendor: { + name: 'Eclipse Adoptium', + version: 'Temurin-23.0.2+7', + }, + runtime: { + name: 'OpenJDK Runtime Environment', + version: '23.0.2+7', + }, + jvm: { + name: 'OpenJDK 64-Bit Server VM', + vendor: 'Eclipse Adoptium', + version: '23.0.2+7', + }, + }, + os: { + name: 'Linux', + version: '6.8.0-57-generic', + arch: 'amd64', + }, +} + export const actuatorHandlers = [ http.get(baseUrl + 'actuator/info', () => { - return HttpResponse.json({ - git: { - branch: 'master', - commit: { - id: 'ABC123', - time: '2025-05-16T03:26:50Z', - }, - }, - build: { - artifact: 'komga', - name: 'komga', - version: '9.9.9', - group: 'komga', - }, - java: { - version: '23.0.2', - vendor: { - name: 'Eclipse Adoptium', - version: 'Temurin-23.0.2+7', - }, - runtime: { - name: 'OpenJDK Runtime Environment', - version: '23.0.2+7', - }, - jvm: { - name: 'OpenJDK 64-Bit Server VM', - vendor: 'Eclipse Adoptium', - version: '23.0.2+7', - }, - }, - os: { - name: 'Linux', - version: '6.8.0-57-generic', - arch: 'amd64', - }, - }) + return HttpResponse.json(actuatorResponseOk) }), ] diff --git a/next-ui/src/mocks/api/handlers/base.ts b/next-ui/src/mocks/api/handlers/base.ts index 0b4acb4b..c48ec99c 100644 --- a/next-ui/src/mocks/api/handlers/base.ts +++ b/next-ui/src/mocks/api/handlers/base.ts @@ -1 +1,6 @@ +import { HttpResponse } from 'msw' + export const baseUrl = import.meta.env.VITE_KOMGA_API_URL + '/' + +export const response401Unauthorized = () => + HttpResponse.json({ error: 'Unauthorized' }, { status: 401 }) diff --git a/next-ui/src/mocks/api/handlers/releases.ts b/next-ui/src/mocks/api/handlers/releases.ts index 51e0d1ea..8731b0a2 100644 --- a/next-ui/src/mocks/api/handlers/releases.ts +++ b/next-ui/src/mocks/api/handlers/releases.ts @@ -1,33 +1,46 @@ import { http, HttpResponse } from 'msw' import { baseUrl } from '@/mocks/api/handlers/base' +export const releasesResponseOk = [ + { + version: '9.9.9', + releaseDate: '2025-05-16T04:31:05Z', + url: 'https://github.com/gotson/komga/releases/tag/1.21.3', + latest: true, + preRelease: false, + description: 'Truncated', + }, + { + version: '1.21.2', + releaseDate: '2025-03-12T04:19:30Z', + url: 'https://github.com/gotson/komga/releases/tag/1.21.2', + latest: false, + preRelease: false, + description: 'Truncated', + }, + { + version: '1.21.1', + releaseDate: '2025-03-06T07:31:00Z', + url: 'https://github.com/gotson/komga/releases/tag/1.21.1', + latest: false, + preRelease: false, + description: 'Truncated', + }, +] + +export const releasesResponseOkNotLatest = [ + { + version: '9.9.9', + releaseDate: '2025-05-16T04:31:05Z', + url: 'https://github.com/gotson/komga/releases/tag/1.21.3', + latest: false, + preRelease: false, + description: 'Truncated', + }, +] + export const releasesHandlers = [ http.get(baseUrl + 'api/v1/releases', () => { - return HttpResponse.json([ - { - version: '9.9.9', - releaseDate: '2025-05-16T04:31:05Z', - url: 'https://github.com/gotson/komga/releases/tag/1.21.3', - latest: true, - preRelease: false, - description: 'Truncated', - }, - { - version: '1.21.2', - releaseDate: '2025-03-12T04:19:30Z', - url: 'https://github.com/gotson/komga/releases/tag/1.21.2', - latest: false, - preRelease: false, - description: 'Truncated', - }, - { - version: '1.21.1', - releaseDate: '2025-03-06T07:31:00Z', - url: 'https://github.com/gotson/komga/releases/tag/1.21.1', - latest: false, - preRelease: false, - description: 'Truncated', - }, - ]) + return HttpResponse.json(releasesResponseOk) }), ] diff --git a/next-ui/src/mocks/pinia-colada.ts b/next-ui/src/mocks/pinia-colada.ts index 4df2b984..3bfa6ef6 100644 --- a/next-ui/src/mocks/pinia-colada.ts +++ b/next-ui/src/mocks/pinia-colada.ts @@ -6,9 +6,9 @@ const DummyComponent = { template: '

', } -const pinia = createPinia() -export const mockPiniaColada = mount(DummyComponent, { - global: { - plugins: [pinia, [PiniaColada, {}]], - }, -}) +export const createMockColada = () => + mount(DummyComponent, { + global: { + plugins: [createPinia(), [PiniaColada, {}]], + }, + })