# Tests Directory This directory contains all tests for the front-backend application. ## Structure ``` tests/ ├── Fixtures/ # Test data and setup scripts │ └── CreateTestDatabase.php ├── Integration/ # Integration tests (multiple components) │ └── SearchTest.php ├── Security/ # Security-focused tests │ └── SecurityTest.php └── Unit/ # Unit tests (individual methods) └── RateLimitTest.php ``` ## Running Tests ### Run All Tests ```bash php run-tests.php ``` ### Run Individual Tests ```bash # Setup test database first php tests/Fixtures/CreateTestDatabase.php # Run specific test php tests/Integration/SearchTest.php php tests/Security/SecurityTest.php php tests/Unit/RateLimitTest.php ``` ## Test Suites ### Fixtures Test data setup and database initialization. **CreateTestDatabase.php** - Creates test.db with sample theses - Populates with 6 sample records - Includes authors, supervisors, keywords ### Integration Tests Test multiple components working together. **SearchTest.php** - Tests full search functionality - Tests filtering (year, orientation, AP, keywords) - Tests pagination - Tests combined filters ### Security Tests Verify security measures are working. **SecurityTest.php** - Wildcard injection prevention - Input length validation - Year range validation - SQL injection prevention - Pagination limits ### Unit Tests Test individual components in isolation. **RateLimitTest.php** - Rate limit enforcement - Request tracking - Reset time calculation - Header generation ## Expected Results All tests should pass: ``` ✅ PASSED - Fixtures/CreateTestDatabase.php ✅ PASSED - Integration/SearchTest.php ✅ PASSED - Security/SecurityTest.php ✅ PASSED - Unit/RateLimitTest.php ``` ## Deployment **Tests are NOT deployed to production.** The deployment configuration (`justfile`) excludes: - `tests/` directory - `*.db` files - Cache directory - Documentation files ## Future Migration to PHPUnit This directory structure is compatible with PHPUnit. To migrate: 1. Install PHPUnit: ```bash composer require --dev phpunit/phpunit ``` 2. Convert test files to PHPUnit format 3. Add `phpunit.xml` configuration 4. Run with: `composer test` See `TESTING_BEST_PRACTICES.md` for details.