pryscraper/TESTING.md
cryptorugmunch 8d25702eca chore(license): re-license to dual MIT (core) + BSL 1.1 (stealth)
Squashed from chore/license-relicense. Full message preserved in the
original branch commit bb77eb5. See ADR-0002 for the decision rationale.

Refs: ADR-0002, commit bb77eb5
2026-07-02 19:59:18 +02:00

75 lines
1.9 KiB
Markdown

[//]: # (SPDX-License-Identifier: MIT)
[//]: # (Copyright (c) 2026 Rug Munch Media LLC)
# TESTING.md — PryScraper
> Test strategy. Unit, integration, e2e, fixtures.
## Test Pyramid
```
/\
/ \ E2E (slow, few)
/----\
/ \ Integration (medium, more)
/--------\
/ \ Unit (fast, many)
/____________\
```
- **Unit tests**: test individual functions/classes in isolation
- **Integration tests**: test components together (DB, API, auth)
- **E2E tests**: test full user flows (slow, run before deploy)
## Structure
```
tests/
├── unit/ # fast, no external deps
├── integration/ # uses test DB, mocks external APIs
├── e2e/ # full stack, runs against staging
├── fixtures/ # test data (mainnet guard: no real addresses/keys)
└── conftest.py # pytest config
```
## Running
```bash
make test # all tests
make test-unit # only unit
make test-integration # only integration
make test-cov # with coverage report
pytest tests/unit/test_X.py -v # single file
```
## Fixtures
Use pytest fixtures. Examples:
- `clean_db` — fresh DB per test
- `mock_helius` — mock Helius API responses
- `auth_headers` — Bearer token for test user
- `sample_token` — fake token (test address, NOT mainnet)
**NEVER use mainnet data in tests.** Pre-commit hook blocks this.
## Coverage
- Target: >80% on changed lines
- Enforced in CI via `--cov-fail-under=80`
## Mocking
- `httpx` for HTTP mocking (use `respx` or `pytest-httpx`)
- `unittest.mock` for general mocking
- VCR.py for recording/replaying API calls
## Performance Tests
- `locust` for load testing (run against staging)
- Profile with `py-spy` or `cProfile`
## CI
Every PR runs:
1. Lint (ruff)
2. Type check (mypy strict)
3. Unit tests + coverage
4. Integration tests (test DB)
5. Security scan (bandit, gitleaks)
6. Build Docker image (verify it compiles)
Merge blocked if any fails.