# Sim-Search API Tests

This directory contains tests for the Sim-Search API.

## Test Files

- `test_api.py`: Tests the core functionality of the API, including authentication, query processing, search execution, and report generation.

## Running Tests

### Using pytest directly

```bash
# Run all tests
pytest

# Run a specific test file
pytest tests/test_api.py

# Run tests with verbose output
pytest -v tests/test_api.py

# Run tests with verbose output and exit on first failure
pytest -xvs tests/test_api.py

# Run tests with coverage report
pytest --cov=app --cov-report=term --cov-report=html tests/test_api.py
```

### Using the run_tests.py script

We provide a convenient script to run the tests with various options:

```bash
# Run all tests
python run_tests.py

# Run with verbose output
python run_tests.py --verbose

# Run with -xvs flag (exit on first failure, verbose, show output)
python run_tests.py --xvs

# Run with coverage report
python run_tests.py --coverage

# Run a specific test file
python run_tests.py --test-file tests/test_api.py
```

### Using the test_api_curl.sh script

For manual testing of the API endpoints using curl commands:

```bash
# Make the script executable
chmod +x test_api_curl.sh

# Run the script
./test_api_curl.sh
```

This script will test all the API endpoints in sequence, including:
- Authentication (register, login)
- Query processing and classification
- Search execution and retrieval
- Report generation and management

## Test Database

The tests use a separate SQLite database (`test.db`) to avoid affecting the production database. This database is created and destroyed during the test run.

## Test User

The tests create a test user with the following credentials:
- Email: test@example.com
- Password: password123
- Full Name: Test User

## Test Coverage

To generate a test coverage report:

```bash
pytest --cov=app --cov-report=term --cov-report=html tests/
```

This will generate a coverage report in the terminal and an HTML report in the `htmlcov` directory.

## Continuous Integration

These tests can be integrated into a CI/CD pipeline to ensure that the API is working correctly before deployment.

## Troubleshooting

If you encounter issues with the tests:

1. Make sure the API server is not running when running the tests, as they will start their own instance.
2. Check that the test database is not locked by another process.
3. Ensure that all dependencies are installed (`pip install -r requirements.txt`).
4. If you're getting authentication errors, make sure the JWT secret key is set correctly in the test environment.
