ilia 5303580107
All checks were successful
CI / skip-ci-check (pull_request) Successful in 4s
CI / docker-ci (pull_request) Successful in 5s
CI / secret-scan (pull_request) Successful in 11s
CI / e2e (pull_request) Successful in 26s
test: add cross-endpoint integration and error-handling suites
Adds test_api_integration.py (person identification, tag+search,
favorites+search, bulk favorites, and role-permission-grant workflows
chained across multiple endpoints) and test_api_errors.py (404/401/403/422
consistency sweeps, SQL-injection/XSS-style input handling, large-payload
handling) per the two suites the existing tests/API_TEST_PLAN.md already
documented but never implemented.

Along the way, found and documented (via a passing test, not a fix) that
GET /api/v1/faces/unidentified has no auth dependency, unlike its sibling
routes.
2026-07-14 18:23:15 -04:00
..

Running Backend API Tests

Quick Start

./run_tests.sh

Option 2: Using npm script

npm run test:backend

Option 3: Manual command

export PYTHONPATH=$(pwd)
export SKIP_DEEPFACE_IN_TESTS=1
./venv/bin/python3 -m pytest tests/ -v

Where to See Test Results

Test results are displayed in your terminal/console where you run the command.

Example Output

When tests run successfully, you'll see output like:

tests/test_api_auth.py::TestLogin::test_login_success_with_valid_credentials PASSED
tests/test_api_auth.py::TestLogin::test_login_failure_with_invalid_credentials PASSED
tests/test_api_auth.py::TestTokenRefresh::test_refresh_token_success PASSED
...
========================= 26 passed in 2.34s =========================

Understanding the Output

  • PASSED (green) - Test passed successfully
  • FAILED (red) - Test failed (shows error details)
  • ERROR (red) - Test had an error during setup/teardown
  • SKIPPED (yellow) - Test was skipped

Verbose Output

The -v flag shows:

  • Each test function name
  • Pass/fail status for each test
  • Summary at the end

Detailed Failure Information

If a test fails, pytest shows:

  • The test that failed
  • The assertion that failed
  • The actual vs expected values
  • A traceback showing where the error occurred

Test Coverage

To see coverage report:

export PYTHONPATH=$(pwd)
export SKIP_DEEPFACE_IN_TESTS=1
./venv/bin/python3 -m pytest tests/ --cov=backend --cov-report=term-missing

This shows:

  • Which lines of code are covered by tests
  • Which lines are missing coverage
  • Overall coverage percentage

Running Specific Tests

Run a single test file

./venv/bin/python3 -m pytest tests/test_api_auth.py -v

Run a specific test class

./venv/bin/python3 -m pytest tests/test_api_auth.py::TestLogin -v

Run a specific test

./venv/bin/python3 -m pytest tests/test_api_auth.py::TestLogin::test_login_success_with_valid_credentials -v

CI/CD Test Results

In CI (GitHub Actions/Gitea Actions), test results appear in:

  1. CI Logs - Check the "Run backend tests" step in the workflow
  2. Test Artifacts - JUnit XML files are generated for test reporting tools
  3. Coverage Reports - Coverage XML files are generated

Troubleshooting

Tests not showing output?

  • Make sure you're running in a terminal (not an IDE output panel that might hide output)
  • Try adding -s flag: pytest tests/ -v -s (shows print statements)

Tests hanging?

  • Check if database is accessible
  • Verify SKIP_DEEPFACE_IN_TESTS=1 is set (prevents DeepFace from loading)

Import errors?

  • Make sure virtual environment is activated or use ./venv/bin/python3
  • Verify all dependencies are installed: ./venv/bin/pip install -r requirements.txt