fix: paginer entièrement le sitemap et retirer le lien mort /pwopose
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import {describe, it, expect, vi, afterEach} from 'vitest'
|
||||
import {jwennTeksSlug} from '../oki-api'
|
||||
|
||||
function fakeEntry(i) {
|
||||
return {slug: `slug-${i}`}
|
||||
}
|
||||
|
||||
describe('jwennTeksSlug (full pagination)', () => {
|
||||
const originalFetch = global.fetch
|
||||
|
||||
afterEach(() => {
|
||||
global.fetch = originalFetch
|
||||
vi.restoreAllMocks()
|
||||
})
|
||||
|
||||
it('walks every page instead of stopping at the first pageSize chunk', async () => {
|
||||
const pageSize = 200
|
||||
const totalRecords = 250
|
||||
|
||||
let calls = 0
|
||||
global.fetch = vi.fn(async url => {
|
||||
calls++
|
||||
if (calls > 5) {
|
||||
throw new Error('too many pagination calls, likely an infinite loop')
|
||||
}
|
||||
|
||||
const pageMatch = url.match(/pagination\[page]=(\d+)/)
|
||||
const page = pageMatch ? Number(pageMatch[1]) : 1
|
||||
const start = (page - 1) * pageSize
|
||||
const end = Math.min(start + pageSize, totalRecords)
|
||||
const data = Array.from({length: Math.max(end - start, 0)}, (_, i) => fakeEntry(start + i))
|
||||
|
||||
return {
|
||||
ok: true,
|
||||
json: async () => ({data})
|
||||
}
|
||||
})
|
||||
|
||||
const slugs = await jwennTeksSlug()
|
||||
|
||||
expect(slugs).toHaveLength(totalRecords)
|
||||
expect(slugs[0]).toBe('slug-0')
|
||||
expect(slugs.at(-1)).toBe('slug-249')
|
||||
expect(global.fetch).toHaveBeenCalledTimes(2)
|
||||
})
|
||||
|
||||
it('stops after a single page when there are fewer records than pageSize', async () => {
|
||||
global.fetch = vi.fn(async () => ({
|
||||
ok: true,
|
||||
json: async () => ({data: [fakeEntry(1), fakeEntry(2)]})
|
||||
}))
|
||||
|
||||
const slugs = await jwennTeksSlug()
|
||||
|
||||
expect(slugs).toEqual(['slug-1', 'slug-2'])
|
||||
expect(global.fetch).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user