Whenever a new feature is added, follow the red-green TDD cycle:
- Red — write a failing test that describes the desired behavior. Run it and confirm it fails for the expected reason.
- Green — write the minimum production code needed to make the test pass. Run the test and confirm it passes.
- Refactor — clean up the implementation and tests while keeping the suite green.
Do not write production code for a new feature before a failing test exists for it.
uv is pre-installed; the startup script runs uv sync. Non-obvious notes:
- Validated:
uv sync,uv run ruff check ., and a smoke import (uv run python -c "import fishjam"). - The
tests/suite is integration-oriented:tests/conftest.pyimportsFISHJAM_IDandFISHJAM_MANAGEMENT_TOKENat collection time, souv run pytestfails withKeyErrorunless those env vars are set and a live Fishjam server is reachable. The unit-style tests run with placeholders, e.g.FISHJAM_ID=dummy FISHJAM_MANAGEMENT_TOKEN=dummy uv run pytest tests/test_config_validation.py tests/test_allowed_notifications.py.