Add Unit & Integration Tests epic with subtasks
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
---
|
||||
# nuzlocke-tracker-0arz
|
||||
title: Integration tests for Runs & Encounters API
|
||||
status: draft
|
||||
type: task
|
||||
created_at: 2026-02-10T09:33:21Z
|
||||
updated_at: 2026-02-10T09:33:21Z
|
||||
parent: nuzlocke-tracker-yzpb
|
||||
---
|
||||
|
||||
Write integration tests for the core run tracking and encounter API endpoints. This is the heart of the application.
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Test run CRUD operations (create, list, get, update, delete)
|
||||
- [ ] Test run creation with rules configuration (JSONB field)
|
||||
- [ ] Test encounter logging on a run (create encounter on a route)
|
||||
- [ ] Test encounter status changes (alive → dead, alive → retired, etc.)
|
||||
- [ ] Test duplicate encounter prevention (dupes clause logic)
|
||||
- [ ] Test shiny encounter handling
|
||||
- [ ] Test egg encounter handling
|
||||
- [ ] Test ending a run (completion/failure)
|
||||
- [ ] Test error cases (encounter on invalid route, duplicate route encounters, etc.)
|
||||
|
||||
## Notes
|
||||
|
||||
- Run endpoints: `backend/src/app/api/runs.py`
|
||||
- Encounter endpoints: `backend/src/app/api/encounters.py`
|
||||
- This is the most critical area — Nuzlocke rules enforcement should be thoroughly tested
|
||||
- Tests need game + pokemon + route fixtures as prerequisites
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
# nuzlocke-tracker-1guz
|
||||
title: Component tests for key frontend components
|
||||
status: draft
|
||||
type: task
|
||||
created_at: 2026-02-10T09:33:45Z
|
||||
updated_at: 2026-02-10T09:33:45Z
|
||||
parent: nuzlocke-tracker-yzpb
|
||||
---
|
||||
|
||||
Write component tests for the most important frontend React components, focusing on user interactions and rendering correctness.
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Test `EncounterModal` — form submission, validation, Pokemon selection
|
||||
- [ ] Test `StatusChangeModal` — status transitions, confirmation flow
|
||||
- [ ] Test `EndRunModal` — run completion/failure flow
|
||||
- [ ] Test `GameGrid` — game selection rendering, click handling
|
||||
- [ ] Test `RulesConfiguration` — rules toggle interactions, state management
|
||||
- [ ] Test `Layout` — navigation rendering, responsive behavior
|
||||
- [ ] Test admin form modals (GameFormModal, RouteFormModal, PokemonFormModal) — CRUD form flows
|
||||
- [ ] Test `AdminTable` — sorting, filtering, action buttons
|
||||
|
||||
## Notes
|
||||
|
||||
- Focus on user-facing behavior, not implementation details
|
||||
- Use @testing-library/user-event for simulating clicks, typing, etc.
|
||||
- Mock API responses for components that fetch data
|
||||
- Don't aim for 100% coverage — prioritise the most complex/interactive components
|
||||
- Page components (RunEncounters, RunDashboard, etc.) are large and complex — consider testing their sub-components instead
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
# nuzlocke-tracker-9c66
|
||||
title: Integration tests for Genlockes & Bosses API
|
||||
status: draft
|
||||
type: task
|
||||
created_at: 2026-02-10T09:33:26Z
|
||||
updated_at: 2026-02-10T09:33:26Z
|
||||
parent: nuzlocke-tracker-yzpb
|
||||
---
|
||||
|
||||
Write integration tests for the genlocke challenge and boss battle API endpoints.
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Test genlocke CRUD operations (create, list, get, update, delete)
|
||||
- [ ] Test leg management (add/remove legs to a genlocke)
|
||||
- [ ] Test Pokemon transfers between genlocke legs
|
||||
- [ ] Test boss battle CRUD (create, list, update, delete per game)
|
||||
- [ ] Test boss battle results per run (record win/loss)
|
||||
- [ ] Test stats endpoint for run statistics
|
||||
- [ ] Test export endpoint
|
||||
- [ ] Test error cases (invalid transfers, boss results for wrong game, etc.)
|
||||
|
||||
## Notes
|
||||
|
||||
- Genlocke endpoints: `backend/src/app/api/genlockes.py`
|
||||
- Boss endpoints: `backend/src/app/api/bosses.py`
|
||||
- Stats endpoints: `backend/src/app/api/stats.py`
|
||||
- Export endpoints: `backend/src/app/api/export.py`
|
||||
- Genlocke tests require multiple runs as fixtures
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
# nuzlocke-tracker-ch77
|
||||
title: Integration tests for Games & Routes API
|
||||
status: draft
|
||||
type: task
|
||||
created_at: 2026-02-10T09:33:13Z
|
||||
updated_at: 2026-02-10T09:33:13Z
|
||||
parent: nuzlocke-tracker-yzpb
|
||||
---
|
||||
|
||||
Write integration tests for the games and routes API endpoints in `backend/src/app/api/games.py`.
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Test CRUD operations for games (create, list, get, update, delete)
|
||||
- [ ] Test route management within a game (create, list, reorder, update, delete)
|
||||
- [ ] Test route encounter management (add/remove Pokemon to routes)
|
||||
- [ ] Test bulk import functionality
|
||||
- [ ] Test region grouping/filtering
|
||||
- [ ] Test error cases (404 for missing games, validation errors, duplicate handling)
|
||||
|
||||
## Notes
|
||||
|
||||
- Use the httpx AsyncClient fixture from the test infrastructure task
|
||||
- Each test should be independent — use fixtures to set up required data
|
||||
- Test both success and error response codes and bodies
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
# nuzlocke-tracker-d8cp
|
||||
title: Set up frontend test infrastructure
|
||||
status: draft
|
||||
type: task
|
||||
priority: normal
|
||||
created_at: 2026-02-10T09:33:33Z
|
||||
updated_at: 2026-02-10T09:34:00Z
|
||||
parent: nuzlocke-tracker-yzpb
|
||||
blocking:
|
||||
- nuzlocke-tracker-ee9s
|
||||
- nuzlocke-tracker-1guz
|
||||
---
|
||||
|
||||
Set up the test infrastructure for the React/TypeScript frontend. No testing tooling currently exists.
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Install Vitest, @testing-library/react, @testing-library/jest-dom, @testing-library/user-event, jsdom
|
||||
- [ ] Configure Vitest in `vite.config.ts` or a dedicated `vitest.config.ts`
|
||||
- [ ] Set up jsdom as the test environment
|
||||
- [ ] Create a test setup file (e.g. `src/test/setup.ts`) that imports @testing-library/jest-dom matchers
|
||||
- [ ] Create test utility helpers (e.g. render wrapper with providers — QueryClientProvider, BrowserRouter)
|
||||
- [ ] Add a \`test\` script to package.json
|
||||
- [ ] Verify the setup by writing a simple smoke test
|
||||
- [ ] Set up MSW (Mock Service Worker) or a similar API mocking strategy for hook/component tests
|
||||
|
||||
## Notes
|
||||
|
||||
- Vitest integrates natively with Vite, which the project already uses
|
||||
- React Testing Library is the standard for testing React components
|
||||
- The app uses React Query (TanStack Query) and React Router — the test wrapper needs to provide these contexts
|
||||
- MSW is recommended for mocking API calls in hook and component tests, but simpler approaches (vi.mock) may suffice initially
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
# nuzlocke-tracker-ee9s
|
||||
title: Unit tests for frontend utilities and hooks
|
||||
status: draft
|
||||
type: task
|
||||
created_at: 2026-02-10T09:33:38Z
|
||||
updated_at: 2026-02-10T09:33:38Z
|
||||
parent: nuzlocke-tracker-yzpb
|
||||
---
|
||||
|
||||
Write unit tests for the frontend utility functions and custom React hooks.
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Test `utils/formatEvolution.ts` — evolution chain formatting logic
|
||||
- [ ] Test `utils/download.ts` — file download utility
|
||||
- [ ] Test `hooks/useRuns.ts` — run CRUD hook with mocked API
|
||||
- [ ] Test `hooks/useGames.ts` — game fetching hook
|
||||
- [ ] Test `hooks/useEncounters.ts` — encounter operations hook
|
||||
- [ ] Test `hooks/usePokemon.ts` — pokemon data hook
|
||||
- [ ] Test `hooks/useGenlockes.ts` — genlocke operations hook
|
||||
- [ ] Test `hooks/useBosses.ts` — boss operations hook
|
||||
- [ ] Test `hooks/useStats.ts` — stats fetching hook
|
||||
- [ ] Test `hooks/useAdmin.ts` — admin operations hook
|
||||
|
||||
## Notes
|
||||
|
||||
- Utility functions are pure functions — straightforward to test
|
||||
- Hooks wrap React Query — test that they call the right API endpoints, handle loading/error states, and invalidate queries correctly
|
||||
- Use `@testing-library/react`'s `renderHook` for hook testing
|
||||
- Mock the API client (from `src/api/`) rather than individual fetch calls
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
# nuzlocke-tracker-hjkk
|
||||
title: Unit tests for Pydantic schemas and model validation
|
||||
status: draft
|
||||
type: task
|
||||
created_at: 2026-02-10T09:33:03Z
|
||||
updated_at: 2026-02-10T09:33:03Z
|
||||
parent: nuzlocke-tracker-yzpb
|
||||
---
|
||||
|
||||
Write unit tests for the Pydantic schemas in `backend/src/app/schemas/`. These are pure validation logic and can be tested without a database.
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Test `CamelModel` base class (snake_case → camelCase alias generation)
|
||||
- [ ] Test run schemas — creation validation, required fields, optional fields, serialization
|
||||
- [ ] Test game schemas — validation rules, field constraints
|
||||
- [ ] Test encounter schemas — status enum validation, field dependencies
|
||||
- [ ] Test boss schemas — nested model validation
|
||||
- [ ] Test genlocke schemas — complex nested structures
|
||||
- [ ] Test stats schemas — response model structure
|
||||
- [ ] Test evolution schemas — validation of evolution chain data
|
||||
|
||||
## Notes
|
||||
|
||||
- Focus on: valid input acceptance, invalid input rejection, serialization output format
|
||||
- The `CamelModel` base class does alias generation — verify both input (camelCase) and output (camelCase) work
|
||||
- Test edge cases like empty strings, negative numbers, missing required fields
|
||||
@@ -0,0 +1,24 @@
|
||||
---
|
||||
# nuzlocke-tracker-iam7
|
||||
title: Unit tests for services layer
|
||||
status: draft
|
||||
type: task
|
||||
created_at: 2026-02-10T09:33:08Z
|
||||
updated_at: 2026-02-10T09:33:08Z
|
||||
parent: nuzlocke-tracker-yzpb
|
||||
---
|
||||
|
||||
Write unit tests for the business logic in `backend/src/app/services/`. Currently this is the `families.py` service which handles Pokemon evolution family resolution.
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Test family resolution with simple linear evolution chains (e.g. A → B → C)
|
||||
- [ ] Test family resolution with branching evolutions (e.g. Eevee)
|
||||
- [ ] Test family resolution with region-specific evolutions
|
||||
- [ ] Test edge cases: single-stage Pokemon, circular references (if possible), missing data
|
||||
|
||||
## Notes
|
||||
|
||||
- `services/families.py` contains the core logic for resolving Pokemon evolution families
|
||||
- These tests may need mock database sessions or in-memory data depending on how the service queries data
|
||||
- If the service methods take a DB session, mock it; if they operate on data objects, pass test data directly
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
# nuzlocke-tracker-rrcf
|
||||
title: Set up backend test infrastructure
|
||||
status: draft
|
||||
type: task
|
||||
priority: normal
|
||||
created_at: 2026-02-10T09:32:57Z
|
||||
updated_at: 2026-02-10T09:33:59Z
|
||||
parent: nuzlocke-tracker-yzpb
|
||||
blocking:
|
||||
- nuzlocke-tracker-hjkk
|
||||
- nuzlocke-tracker-iam7
|
||||
- nuzlocke-tracker-ch77
|
||||
- nuzlocke-tracker-ugb7
|
||||
- nuzlocke-tracker-0arz
|
||||
- nuzlocke-tracker-9c66
|
||||
---
|
||||
|
||||
Set up the foundational test infrastructure for the FastAPI backend so that all subsequent test tasks can build on it.
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Create `backend/tests/conftest.py` with shared fixtures
|
||||
- [ ] Set up a test database strategy (use a separate test PostgreSQL database or SQLite for speed — evaluate trade-offs)
|
||||
- [ ] Create an async test client fixture using `httpx.AsyncClient` with the FastAPI `app`
|
||||
- [ ] Create a database session fixture that creates/drops tables per test session or uses transactions for isolation
|
||||
- [ ] Add factory fixtures or helpers for creating common test entities (games, pokemon, runs, etc.)
|
||||
- [ ] Verify the setup works by writing a simple smoke test (e.g. health endpoint returns 200)
|
||||
- [ ] Document how to run tests (e.g. `pytest` from backend dir, any env vars needed)
|
||||
|
||||
## Notes
|
||||
|
||||
- pytest, pytest-asyncio, and httpx are already in pyproject.toml dev dependencies
|
||||
- AsyncIO mode is set to "auto" in pyproject.toml
|
||||
- The app uses SQLAlchemy async with asyncpg — test fixtures need to handle async session management
|
||||
- Consider using `SAVEPOINT`-based transaction rollback for test isolation (faster than recreating tables)
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
# nuzlocke-tracker-ugb7
|
||||
title: Integration tests for Pokemon & Evolutions API
|
||||
status: draft
|
||||
type: task
|
||||
created_at: 2026-02-10T09:33:16Z
|
||||
updated_at: 2026-02-10T09:33:16Z
|
||||
parent: nuzlocke-tracker-yzpb
|
||||
---
|
||||
|
||||
Write integration tests for the Pokemon and evolutions API endpoints.
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Test Pokemon CRUD operations (create, list, search, update, delete)
|
||||
- [ ] Test Pokemon filtering and search
|
||||
- [ ] Test evolution chain CRUD (create, list, get, update, delete)
|
||||
- [ ] Test evolution family resolution endpoint
|
||||
- [ ] Test error cases (invalid Pokemon references, circular evolutions, etc.)
|
||||
|
||||
## Notes
|
||||
|
||||
- Pokemon endpoints are in `backend/src/app/api/pokemon.py`
|
||||
- Evolution endpoints are in `backend/src/app/api/evolutions.py`
|
||||
- Evolution tests should cover multi-stage and branching chains
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
# nuzlocke-tracker-yzpb
|
||||
title: Implement Unit & Integration Tests
|
||||
status: draft
|
||||
type: epic
|
||||
created_at: 2026-02-10T09:32:47Z
|
||||
updated_at: 2026-02-10T09:32:47Z
|
||||
---
|
||||
|
||||
Add comprehensive unit and integration test coverage to both the backend (FastAPI/Python) and frontend (React/TypeScript). The project currently has zero tests — pytest is configured in pyproject.toml with pytest-asyncio and httpx, but no actual test files exist. The frontend has no test tooling at all.
|
||||
|
||||
**Scope:**
|
||||
- Unit tests for isolated logic (schemas, services, utilities)
|
||||
- Integration tests for API endpoints (using httpx AsyncClient against a test database)
|
||||
- Frontend unit/component tests (using Vitest + React Testing Library)
|
||||
|
||||
**Explicitly out of scope:**
|
||||
- End-to-end / browser tests (e.g. Selenium, Playwright) — requires specialised infrastructure
|
||||
|
||||
## Success Criteria
|
||||
|
||||
- [ ] Backend test infrastructure is set up (conftest, fixtures, test DB)
|
||||
- [ ] Backend schemas and services have unit test coverage
|
||||
- [ ] Backend API endpoints have integration test coverage
|
||||
- [ ] Frontend test infrastructure is set up (Vitest, RTL)
|
||||
- [ ] Frontend utilities and hooks have unit test coverage
|
||||
- [ ] Frontend components have basic render/interaction tests
|
||||
Reference in New Issue
Block a user