eebf3b3334
Co-Authored-By: Claude Code <noreply@anthropic.com>
54 lines
1.9 KiB
TypeScript
54 lines
1.9 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest'
|
||
import { useAdminUserPages } from './useAdminUserPages'
|
||
|
||
const pageOf = (accounts: string[], total: number) => ({
|
||
items: accounts.map((account, i) => ({ id: `u${i}`, account })) as never,
|
||
nextCursor: null,
|
||
hasMore: false,
|
||
total
|
||
})
|
||
|
||
describe('useAdminUserPages 分页状态', () => {
|
||
it('loadPage 推进页码并落 items/total(透传 page/pageSize 给 fetch)', async () => {
|
||
const fetch = vi.fn().mockResolvedValue(pageOf(['a', 'b'], 35))
|
||
const state = useAdminUserPages(fetch)
|
||
await state.loadPage(2)
|
||
expect(fetch).toHaveBeenCalledWith(2, 20)
|
||
expect(state.page.value).toBe(2)
|
||
expect(state.items.value).toHaveLength(2)
|
||
expect(state.total.value).toBe(35)
|
||
})
|
||
|
||
it('total 缺省(旧响应形态)回退 items 长度,不抛错', async () => {
|
||
const fetch = vi.fn().mockResolvedValue({
|
||
items: [],
|
||
nextCursor: null,
|
||
hasMore: false
|
||
})
|
||
const state = useAdminUserPages(fetch)
|
||
await state.loadPage()
|
||
expect(state.total.value).toBe(0)
|
||
})
|
||
|
||
it('fetch 抛错 → error 捕获、loading 复位、页码不推进', async () => {
|
||
const fetch = vi.fn().mockRejectedValue(new Error('boom'))
|
||
const state = useAdminUserPages(fetch)
|
||
await state.loadPage(3)
|
||
expect(state.error.value?.message).toBe('boom')
|
||
expect(state.loading.value).toBe(false)
|
||
expect(state.page.value).toBe(1)
|
||
})
|
||
|
||
it('onSizeChange 回第 1 页;replaceItem 原地替换当前页条目', async () => {
|
||
const fetch = vi.fn().mockResolvedValue(pageOf(['a'], 5))
|
||
const state = useAdminUserPages(fetch)
|
||
await state.loadPage(2)
|
||
state.onSizeChange()
|
||
await Promise.resolve()
|
||
await Promise.resolve()
|
||
expect(fetch).toHaveBeenLastCalledWith(1, 20)
|
||
state.replaceItem(0, { id: 'u0', account: 'a2' } as never)
|
||
expect(state.items.value[0]?.account).toBe('a2')
|
||
})
|
||
})
|