# Quick Start - Running Tests ## 1. Install Test Dependencies ```bash # Add pytest and related tools uv add --dev pytest pytest-cov pytest-mock ``` ## 2. Run the Tests ```bash # Run all unit tests (fast, no API calls) uv run pytest # Run with more detail uv run pytest -v # Run just the COSING tests uv run pytest tests/test_cosing_service.py # Run integration tests (will hit real COSING API) uv run pytest -m integration ``` ## 3. See Coverage ```bash # Generate HTML coverage report uv run pytest --cov=src/pif_compiler --cov-report=html # Open htmlcov/index.html in your browser ``` ## What the Tests Cover ### ✅ `parse_cas_numbers()` - Parses single CAS: `["7732-18-5"]` → `["7732-18-5"]` - Parses multiple: `["7732-18-5/56-81-5"]` → `["7732-18-5", "56-81-5"]` - Handles separators: `/`, `;`, `,`, `--` - Removes parentheses: `["7732-18-5 (hydrate)"]` → `["7732-18-5"]` - Cleans whitespace and invalid dashes ### ✅ `cosing_search()` - Mocks API calls (no internet needed for unit tests) - Tests search by name, CAS, EC, ID - Tests error handling - Integration tests hit real API ### ✅ `clean_cosing()` - Cleans COSING JSON responses - Removes empty tags - Parses CAS numbers - Creates COSING URLs - Renames fields ## Test Results Example ``` tests/test_cosing_service.py::TestParseCasNumbers::test_single_cas_number PASSED tests/test_cosing_service.py::TestParseCasNumbers::test_multiple_cas_with_slash PASSED tests/test_cosing_service.py::TestCosingSearch::test_search_by_name_success PASSED ... ================================ 25 passed in 0.5s ================================ ``` ## Troubleshooting ### Import errors Make sure you're in the project root: ```bash cd c:\Users\adish\Projects\pif_compiler uv run pytest ``` ### Mock not found Install pytest-mock: ```bash uv add --dev pytest-mock ``` ### Integration tests failing These hit the real API and need internet. Skip them: ```bash uv run pytest -m "not integration" ```