Testing Guide
Summary
How to run the test suite and how the tests folder is organized.
Requirements
Python 3.11
Dependencies from
pyproject.toml
Installation
# Install dependencies
uv sync
# Alternative
python -m venv .venv && source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
Full Run
pytest -q
Subsets
Integration:
pytest -q test/integration
E2E:
pytest -q test/e2e
Unit tests:
pytest -q test/unitests
Structure
test/integration: API endpoint tests.test/e2e: full flows (e.g., anonymity, token export).test/unitests: internal services and utilities.test/utils/helpers.py: shared helpers (teams, surveys, questions, tokens, expirations).
Key helpers
Create team:
_create_team(client, auth_header_admin) -> dictCreate survey:
_create_survey(client, auth_header_admin, team_id) -> dictCrear pregunta:
_create_question(client, auth_header_admin, survey_id, ...) -> dictGenerar token:
_generate_token(client, auth_header_admin, survey_id, expires_at=...) -> dictUtilidades de expiración:
expires_at_future(),expires_at_past()
Environment Config
Base file:
.env.example
# *******************
# * Database Config *
# *******************
DATABASE_URL=postgresql://user:password@localhost:5432/raccoon_survey_db
DATABASE_ECHO=0
# ****************
# * Flask Config *
# ****************
FLASK_DEBUG=1
FLASK_ENV=development
# *****************
# * Server Config *
# *****************
HOST=0.0.0.0
PORT=3000
DEBUG=True
CORS_ORIGINS=http://localhost:3000
# ***************
# * JWT Config *
# **************
JWT_SECRET_KEY=
JWT_ACCESS_TOKEN_EXPIRES=900
JWT_REFRESH_TOKEN_EXPIRES=2592000
# ***************
# * Log Config *
# ***************
LOG_LEVEL=development
# * ***************************
# * Default Admin Credentials *
# * ***************************
DEFAULT_USER_ADMIN_NAME=
DEFAULT_USER_ADMIN_EMAIL=
DEFAULT_USER_ADMIN_PASSWORD=
# * **************************
# * Cleanup scheduler Config *
# * **************************
CLEANUP_RUN_ON_START=1
CLEANUP_CRON_HOUR=3
CLEANUP_CRON_MINUTE=0
Set values required for the local execution environment.
# Copy example file
cp .env.example .env
Note
The tests isolate the database per test using fixtures defined in test/integration/conftest.py and test/conftest.py.
Tip
Use the shared helpers to avoid duplication and maintain consistency between test cases.