# Unit Testing Guide This document provides a comprehensive guide for developers on how to use, write, and monitor unit tests in the `be-ircfa` project. ## 🚀 Getting Started ### Prerequisites Before running tests, ensure you have the virtual environment activated and the required dependencies installed. ```bash # 1. Activate the venv source venv/bin/activate # 2. Install test dependencies (if not already installed) pip install pytest pytest-sugar pytest-cov pytest-html ``` ## 🛠 Running Tests We have simplified the testing process using a `Makefile` and `pytest`. ### 1. Simple Execution (With Progress Bar) To run all tests with a premium progress bar and colorful monitoring: ```bash make test ``` ### 2. Manual Execution If you prefer running `pytest` directly: ```bash export PYTHONPATH=$PYTHONPATH:$(pwd) pytest tests/unit-test/ --color=yes ``` ### 3. Generating HTML Reports To generate a detailed HTML report for post-analysis: ```bash pytest tests/unit-test/ --html=report.html --self-contained-html ``` ## 📊 Monitoring & Aesthetics We use **`pytest-sugar`** to provide a better developer experience: - **Real-time Progress**: A percentage bar shows the current status of the test suite. - **Color Coding**: Instant visual feedback for passes (green) and failures (red). - **Clearer Failures**: Detailed error messages are shown immediately. ## ✍️ Writing New Tests All unit tests should be placed in `tests/unit-test/`. Follow these conventions: - File names should start with `test_` (e.g., `test_auth.py`). - Function names should start with `test_` (e.g., `def test_login_success():`). - Use `pytest.mark.parametrize` for redundant test cases with different inputs. **Example Template:** ```python import pytest from src.your_module import your_function def test_your_feature(): result = your_function("input") assert result == "expected_output" ``` --- ## 🏗 CI/CD Integration To ensure code quality, unit tests should be integrated into the deployment pipeline. ### Integration with Jenkins Add a "Test" stage to your `Jenkinsfile` before the "Build Docker Image" stage: ```groovy stage('Unit Tests') { steps { sh ''' source venv/bin/activate export PYTHONPATH=${PYTHONPATH}:$(pwd) make test ''' } } ``` ### Integration with GitHub Actions If using GitHub, create `.github/workflows/test.yml`: ```yaml name: Unit Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.11' - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt pip install pytest pytest-sugar - name: Run Tests run: | export PYTHONPATH=$PYTHONPATH:$(pwd) make test ``` --- *Maintained by the RCFA Backend Team.*