- Introduced multiple architecture documentation files covering building block view, runtime view, deployment view, concepts, architecture decisions, quality requirements, technical risks, glossary, UI and styling, testing, CI, and development setup. - Migrated existing content from `architecture_overview.md` and `implementation_plan.md` into structured documentation. - Created scripts for checking broken links in documentation and formatting Markdown files for consistency. - Updated quickstart guide to provide clearer setup instructions and usage overview. - Removed outdated MVP features and testing strategy documents to streamline documentation.
3.5 KiB
3.5 KiB
14 Testing, CI and Quality Assurance
This chapter centralizes the project's testing strategy, CI configuration, and quality targets.
Overview
CalMiner uses a combination of unit, integration, and end-to-end tests to ensure quality.
Frameworks
- Backend: pytest for unit and integration tests.
- Frontend: pytest with Playwright for E2E tests.
- Database: pytest fixtures with psycopg2 for DB tests.
Test Types
- Unit Tests: Test individual functions/modules.
- Integration Tests: Test API endpoints and DB interactions.
- E2E Tests: Playwright for full user flows.
CI/CD
- Use GitHub Actions for CI.
- Run tests on pull requests.
- Code coverage target: 80% (using pytest-cov).
Running Tests
- Unit:
pytest tests/unit/ - E2E:
pytest tests/e2e/ - All:
pytest
Test Directory Structure
Organize tests under the tests/ directory mirroring the application structure:
tests/
unit/
test_<module>.py
e2e/
test_<flow>.py
fixtures/
conftest.py
```python
### Fixtures and Test Data
- Define reusable fixtures in `tests/fixtures/conftest.py`.
- Use temporary in-memory databases or isolated schemas for DB tests.
- Load sample data via fixtures for consistent test environments.
- Leverage the `seeded_ui_data` fixture in `tests/unit/conftest.py` to populate scenarios with related cost, maintenance, and simulation records for deterministic UI route checks.
### E2E (Playwright) Tests
The E2E test suite, located in `tests/e2e/`, uses Playwright to simulate user interactions in a live browser environment. These tests are designed to catch issues in the UI, frontend-backend integration, and overall application flow.
#### Fixtures
- `live_server`: A session-scoped fixture that launches the FastAPI application in a separate process, making it accessible to the browser.
- `playwright_instance`, `browser`, `page`: Standard `pytest-playwright` fixtures for managing the Playwright instance, browser, and individual pages.
#### Smoke Tests
- UI Page Loading: `test_smoke.py` contains a parameterized test that systematically navigates to all UI routes to ensure they load without errors, have the correct title, and display a primary heading.
- Form Submissions: Each major form in the application has a corresponding test file (e.g., `test_scenarios.py`, `test_costs.py`) that verifies: page loads, create item by filling the form, success message, and UI updates.
### Running E2E Tests
To run the Playwright tests:
```bash
pytest tests/e2e/
To run headed mode:
pytest tests/e2e/ --headed
Mocking and Dependency Injection
- Use
unittest.mockto mock external dependencies. - Inject dependencies via function parameters or FastAPI's dependency overrides in tests.
Code Coverage
- Install
pytest-covto generate coverage reports. - Run with coverage:
pytest --cov --cov-report=term(use--cov-report=htmlwhen visualizing hotspots). - Target 95%+ overall coverage. Focus on historically low modules:
services/simulation.py,services/reporting.py,middleware/validation.py, androutes/ui.py. - Latest snapshot (2025-10-21):
pytest --cov=. --cov-report=term-missingreturns 91% overall coverage.
CI Integration
- Configure GitHub Actions workflow in
.github/workflows/ci.ymlto:- Install dependencies, including Playwright browsers (
playwright install). - Run
pytestwith coverage for unit tests. - Run
pytest tests/e2e/for E2E tests. - Fail on coverage <80%.
- Upload coverage artifacts under
reports/coverage/.
- Install dependencies, including Playwright browsers (