# Resume Site Tests

This directory contains tests for the resume site.

## Directory Structure

- `unit/`: Unit tests for JavaScript files and other components
- `integration/`: Integration tests that test components working together
- `e2e/`: End-to-end tests that simulate user interactions
- `*.test.js`, `*.spec.js`: Playwright test files
- `lighthouse.js`: Lighthouse performance and accessibility tests
- `serve.js`: Simple Node.js server for testing
- `server.js`: Alternative server implementation
- `pre-test-setup.sh`: Script to set up the test environment, including updating CSP hashes

## Running Tests

To run all tests:

```bash
./run-all-tests.sh
```

Or using npm:

```bash
npm test
```

This will:
1. Run the pre-test setup script to update CSP hashes
2. Check if the server is running
3. Run all shell script tests
4. Run Playwright tests if available
5. Run Lighthouse tests

## Content Security Policy (CSP) Testing

The CSP hash update process is an important part of the testing framework. It ensures that:

1. All JavaScript and CSS files have integrity hashes
2. All inline styles have proper CSP hashes
3. The Caddyfile and HTML files have the correct CSP headers/meta tags

The `pre-test-setup.sh` script runs the `update-csp-hashes.sh` script to update all CSP hashes before running the tests. This ensures that any changes to the website are properly reflected in the CSP hashes.

The `csp-hash-test.sh` integration test checks if the CSP hash update process is working properly by verifying that:

- CSP headers are present in the response
- CSP headers contain the required directives
- JavaScript and CSS files have integrity attributes
- HTML files have CSP meta tags

## Running Specific Tests

### JavaScript Tests

```bash
npm run test:js
```

### Lighthouse Tests

```bash
npm run test:lighthouse
```

### Starting the Test Server

```bash
npm run serve
```

## Adding New Tests

### Shell Script Tests

Add new test scripts to the appropriate directory:
- `unit/`: For unit tests
- `integration/`: For integration tests
- `e2e/`: For end-to-end tests

Shell script tests should:
- Be executable bash scripts
- Return exit code 0 for success, non-zero for failure
- For integration and e2e tests, accept a base URL as the first argument

### Playwright Tests

Add new Playwright tests with the `.test.js` or `.spec.js` extension in the tests directory.

## Test Requirements

As per the project guidelines, all tests must:
- Pass for both mobile and desktop viewports
- Maintain Lighthouse scores: 100/100 for accessibility and SEO
- Include meaningful assertions, not placeholders
