fix: paginer entièrement le sitemap et retirer le lien mort /pwopose

This commit is contained in:
2026-07-04 01:27:56 +04:00
parent c4dca87b61
commit c7104c6a0b
3 changed files with 84 additions and 26 deletions
+58
View File
@@ -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)
})
})
+26 -22
View File
@@ -171,32 +171,36 @@ export async function jwennTeks() {
return data
}
export async function jwennAwtisSlug() {
const query = qs.stringify({
sort: ['createdAt:desc'],
pagination: {
pageSize: 200
}
}, {
encodeValuesOnly: true
})
async function jwennTouSlug(endpoint) {
const pageSize = 200
const slugs = []
let page = 1
let hasMore = true
const {data} = await request(`/artistes?${query}`, headers)
return data.map(({slug}) => slug)
while (hasMore) {
const query = qs.stringify({
sort: ['createdAt:desc'],
fields: ['slug'],
pagination: {page, pageSize}
}, {
encodeValuesOnly: true
})
const {data} = await request(`/${endpoint}?${query}`, headers)
slugs.push(...data.map(({slug}) => slug))
hasMore = data.length === pageSize
page += 1
}
return slugs
}
export async function jwennAwtisSlug() {
return jwennTouSlug('artistes')
}
export async function jwennTeksSlug() {
const query = qs.stringify({
sort: ['createdAt:desc'],
pagination: {
pageSize: 200
}
}, {
encodeValuesOnly: true
})
const {data} = await request(`/paroles?${query}`, headers)
return data.map(({slug}) => slug)
return jwennTouSlug('paroles')
}
export async function jwennDenyeTeks() {