# Running Backend API Tests

## Quick Start

### Option 1: Using the test runner script (Recommended)
```bash
./run_tests.sh
```

### Option 2: Using npm script
```bash
npm run test:backend
```

### Option 3: Manual command
```bash
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:
```bash
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
```bash
./venv/bin/python3 -m pytest tests/test_api_auth.py -v
```

### Run a specific test class
```bash
./venv/bin/python3 -m pytest tests/test_api_auth.py::TestLogin -v
```

### Run a specific test
```bash
./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`



