diff --git a/next-ui/src/mocks/api/handlers.ts b/next-ui/src/mocks/api/handlers.ts index de8a6ca17..0b5f388d5 100644 --- a/next-ui/src/mocks/api/handlers.ts +++ b/next-ui/src/mocks/api/handlers.ts @@ -1,3 +1,4 @@ +import { announcementHandlers } from '@/mocks/api/handlers/announcements' import { releasesHandlers } from '@/mocks/api/handlers/releases' import { fromOpenApi } from '@mswjs/source/open-api' import type { OpenAPIV3 } from 'openapi-types' @@ -10,7 +11,7 @@ const doc = { } as unknown as OpenAPIV3.Document // manually defined handlers need to be before fromOpenApi -export const handlers = [...releasesHandlers, ...(await fromOpenApi(doc))] +export const handlers = [...announcementHandlers, ...releasesHandlers, ...(await fromOpenApi(doc))] export const response401Unauthorized = () => HttpResponse.json({ error: 'Unauthorized' }, { status: 401 }) diff --git a/next-ui/src/mocks/api/handlers/announcements.ts b/next-ui/src/mocks/api/handlers/announcements.ts new file mode 100644 index 000000000..deeeb40ed --- /dev/null +++ b/next-ui/src/mocks/api/handlers/announcements.ts @@ -0,0 +1,46 @@ +import { httpTyped } from '@/mocks/api/httpTyped' + +export const announcementsAllRead = { + version: 'https://jsonfeed.org/version/1', + title: 'Announcements', + home_page_url: 'https://komga.org/blog', + description: 'Latest Komga announcements', + items: [ + { + id: 'https://komga.org/blog/ebook-drop2', + url: 'https://komga.org/blog/ebook-drop2', + title: 'eBook drop 2', + summary: 'Version 1.9.0 contains the second feature drop for Ebooks support.', + content_html: '
A longer text…
', + date_modified: new Date('2023-12-15T00:00:00Z'), + author: { + name: 'gotson', + url: 'https://github.com/gotson', + }, + tags: ['upgrade', 'komga'], + _komga: { + read: true, + }, + }, + { + id: 'https://komga.org/blog/ebook-support', + url: 'https://komga.org/blog/ebook-support', + title: 'eBook support', + summary: 'Version 1.8.0 is bringing a long awaited feature: proper eBook support!', + content_html: 'A longer text…
', + date_modified: new Date('2023-11-29T00:00:00Z'), + author: { + name: 'gotson', + url: 'https://github.com/gotson', + }, + tags: ['upgrade', 'komga'], + _komga: { + read: true, + }, + }, + ], +} + +export const announcementHandlers = [ + httpTyped.put('/api/v1/announcements', ({ response }) => response(204).empty()), +] diff --git a/next-ui/src/mocks/api/handlers/releases.ts b/next-ui/src/mocks/api/handlers/releases.ts index 5405cf500..6bfd4aa03 100644 --- a/next-ui/src/mocks/api/handlers/releases.ts +++ b/next-ui/src/mocks/api/handlers/releases.ts @@ -28,6 +28,14 @@ export const releasesResponseOkNotLatest = [ preRelease: false, description: 'Truncated', }, + { + version: '1.21.2', + releaseDate: new Date('2025-03-12T04:19:30Z'), + url: 'https://github.com/gotson/komga/releases/tag/1.21.2', + latest: false, + preRelease: false, + description: 'Truncated', + }, ] export const releasesHandlers = [ diff --git a/next-ui/src/pages/server/announcements.stories.ts b/next-ui/src/pages/server/announcements.stories.ts new file mode 100644 index 000000000..edc24f231 --- /dev/null +++ b/next-ui/src/pages/server/announcements.stories.ts @@ -0,0 +1,69 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import announcements from './announcements.vue' +import { http, delay } from 'msw' + +import { response401Unauthorized } from '@/mocks/api/handlers' +import { httpTyped } from '@/mocks/api/httpTyped' +import { announcementsAllRead } from '@/mocks/api/handlers/announcements' +import { expect, waitFor } from 'storybook/test' + +const meta = { + component: announcements, + render: (args: object) => ({ + components: { announcements }, + setup() { + return { args } + }, + template: '