admin/lib/seo/serverApi.test.ts
alisaza e1eaf5eff5 feat: initial ghabilee-admin backoffice app
Extract admin dashboard from ghabilee-frontend2 into a dedicated Next.js
app for backoffice.ghabilee.ir (no SEO indexing / Clarity).
2026-09-05 13:12:59 +03:30

46 lines
1.3 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from 'vitest'
import { fetchAllSeoDiscoveryEvents } from '@/lib/seo/serverApi'
describe('fetchAllSeoDiscoveryEvents', () => {
afterEach(() => {
vi.unstubAllEnvs()
vi.unstubAllGlobals()
})
it('loads every API page while excluding seed placeholders', async () => {
vi.stubEnv('NEXT_PUBLIC_API_URL', 'https://example.test/api/v1')
const fetchMock = vi.fn(async (input: string | URL | Request) => {
const url = new URL(String(input))
const page = Number(url.searchParams.get('page'))
const items =
page === 1
? [
{ slug: 'real-event-one', title: 'رویداد اول' },
{ slug: 'generated-seed123', title: 'Seed event' },
]
: [{ slug: 'real-event-two', title: 'رویداد دوم' }]
return {
ok: true,
status: 200,
json: async () => ({
success: true,
data: {
items,
response: { totalItemsCount: 3 },
},
}),
} as Response
})
vi.stubGlobal('fetch', fetchMock)
const events = await fetchAllSeoDiscoveryEvents(2)
expect(fetchMock).toHaveBeenCalledTimes(2)
expect(events.map((event) => event.slug)).toEqual(['real-event-one', 'real-event-two'])
})
})