Extract admin dashboard from ghabilee-frontend2 into a dedicated Next.js app for backoffice.ghabilee.ir (no SEO indexing / Clarity).
66 lines
2.2 KiB
TypeScript
66 lines
2.2 KiB
TypeScript
import { act, render, waitFor } from '@testing-library/react'
|
|
import { createRef } from 'react'
|
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
import PaginatedList, { type PaginatedListHandle } from '@/components/paginated-list/PaginatedListImpl'
|
|
|
|
const renderWithQuery = (ui: React.ReactElement) => {
|
|
const client = new QueryClient({
|
|
defaultOptions: { queries: { retry: false }, mutations: { retry: false } },
|
|
})
|
|
|
|
return render(<QueryClientProvider client={client}>{ui}</QueryClientProvider>)
|
|
}
|
|
|
|
const fetchPaginatedList = vi.fn()
|
|
const replace = vi.fn()
|
|
|
|
vi.mock('next/navigation', () => ({
|
|
usePathname: () => '/test',
|
|
useRouter: () => ({ replace }),
|
|
}))
|
|
vi.mock('@/hooks/useQueryParams', () => ({ default: () => ({}) }))
|
|
vi.mock('@/components/paginated-list/PaginatedListFilterModal', () => ({ default: () => null }))
|
|
vi.mock('@/components/paginated-list/PaginatedListPagination', () => ({
|
|
default: () => null,
|
|
ROWS_PER_PAGE_OPTIONS: [{ code: '20', name: '20' }],
|
|
}))
|
|
vi.mock('@/components/paginated-list/PaginatedListTable', () => ({ default: () => null }))
|
|
vi.mock('@/components/paginated-list/PaginatedListToolbar', () => ({ default: () => null }))
|
|
vi.mock('@/components/paginated-list/paginatedListApi', () => ({
|
|
fetchPaginatedList: (...args: unknown[]) => fetchPaginatedList(...args),
|
|
fetchPaginatedListExport: vi.fn(),
|
|
}))
|
|
|
|
describe('PaginatedList refresh handle', () => {
|
|
beforeEach(() => {
|
|
replace.mockClear()
|
|
fetchPaginatedList.mockReset()
|
|
fetchPaginatedList.mockResolvedValue({ items: [], pagination: { page: 1, pageSize: 20, totalItems: 0 } })
|
|
})
|
|
|
|
it('fetches the current list again when refresh is called', async () => {
|
|
const ref = createRef<PaginatedListHandle>()
|
|
|
|
renderWithQuery(
|
|
<PaginatedList
|
|
ref={ref}
|
|
columns={[{ field: 'id', label: 'شناسه' }]}
|
|
url="/items"
|
|
/>
|
|
)
|
|
|
|
await waitFor(() => {
|
|
expect(fetchPaginatedList).toHaveBeenCalled()
|
|
})
|
|
const initialCalls = fetchPaginatedList.mock.calls.length
|
|
|
|
act(() => ref.current?.refresh())
|
|
|
|
await waitFor(() => {
|
|
expect(fetchPaginatedList.mock.calls.length).toBeGreaterThan(initialCalls)
|
|
})
|
|
})
|
|
})
|