Files
expo-popcore-app/hooks/useWorksList.test.ts
imeepos 10ee380051 feat: integrate UI components into Works List with pagination and refresh
- Add useWorksList hook for data fetching with pagination support
- Integrate RefreshControl for pull-to-refresh functionality
- Add LoadingState for initial loading display
- Add ErrorState with retry functionality
- Add PaginationLoader for load more indication
- Update WorksGallery to support refresh control and pagination
- Add comprehensive tests for worksList screen and hook
- Use useMemo for performance optimization

TODO: Replace mock API with actual backend endpoint when available

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 12:15:53 +08:00

62 lines
1.6 KiB
TypeScript

import { renderHook, waitFor } from '@testing-library/react-native'
import { useWorksList } from './useWorksList'
describe('useWorksList', () => {
it('should load initial works data', async () => {
const { result } = renderHook(() => useWorksList())
expect(result.current.loading).toBe(true)
expect(result.current.works).toEqual([])
await waitFor(() => {
expect(result.current.loading).toBe(false)
})
expect(result.current.works.length).toBeGreaterThan(0)
expect(result.current.error).toBeNull()
})
it('should handle refresh', async () => {
const { result } = renderHook(() => useWorksList())
await waitFor(() => {
expect(result.current.loading).toBe(false)
})
const initialWorks = result.current.works
await result.current.refresh()
expect(result.current.refreshing).toBe(false)
expect(result.current.works).toEqual(initialWorks)
})
it('should load more works', async () => {
const { result } = renderHook(() => useWorksList())
await waitFor(() => {
expect(result.current.loading).toBe(false)
})
const initialCount = result.current.works.length
await result.current.loadMore()
expect(result.current.works.length).toBeGreaterThan(initialCount)
})
it('should set hasMore to false when no more data', async () => {
const { result } = renderHook(() => useWorksList())
await waitFor(() => {
expect(result.current.loading).toBe(false)
})
await result.current.loadMore()
await result.current.loadMore()
await result.current.loadMore()
expect(result.current.hasMore).toBe(false)
})
})