49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
import { fetchWikiPage, fetchWikiPageByTitle, fetchWikiPages } from '@/lib/wiki'
|
|
|
|
const api = vi.hoisted (() => ({
|
|
apiGet: vi.fn (),
|
|
}))
|
|
|
|
vi.mock ('@/lib/api', () => api)
|
|
|
|
describe ('wiki API functions', () => {
|
|
beforeEach (() => {
|
|
vi.clearAllMocks ()
|
|
})
|
|
|
|
it ('fetches wiki index and show pages with expected parameters', async () => {
|
|
api.apiGet.mockResolvedValueOnce ([])
|
|
api.apiGet.mockResolvedValueOnce ({ id: 1 })
|
|
|
|
await fetchWikiPages ({ title: '虹' })
|
|
await fetchWikiPage ('1', { version: '3' })
|
|
|
|
expect (api.apiGet).toHaveBeenNthCalledWith (
|
|
1,
|
|
'/wiki',
|
|
{ params: { title: '虹' } },
|
|
)
|
|
expect (api.apiGet).toHaveBeenNthCalledWith (
|
|
2,
|
|
'/wiki/1',
|
|
{ params: { version: '3' } },
|
|
)
|
|
})
|
|
|
|
it ('encodes title path segments and returns null on misses', async () => {
|
|
api.apiGet.mockResolvedValueOnce ({ id: 2 })
|
|
api.apiGet.mockRejectedValueOnce (new Error ('missing'))
|
|
|
|
await fetchWikiPageByTitle ('a/b c', { version: undefined })
|
|
await expect (fetchWikiPageByTitle ('missing', {})).resolves.toBeNull ()
|
|
|
|
expect (api.apiGet).toHaveBeenNthCalledWith (
|
|
1,
|
|
'/wiki/title/a%2Fb%20c',
|
|
{ params: { version: undefined } },
|
|
)
|
|
})
|
|
})
|