Skip to content

SmartProBono Test Suite #106

SmartProBono Test Suite

SmartProBono Test Suite #106

Workflow file for this run

name: SmartProBono Test Suite
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
schedule:
- cron: '0 2 * * *' # Run daily at 2 AM
jobs:
backend-tests:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.8, 3.9, 3.10, 3.11]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Cache pip dependencies
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r backend/requirements.txt
pip install -r tests/requirements-test.txt
- name: Run backend tests
run: |
python -m pytest tests/test_backend_apis.py tests/test_voice_service.py tests/test_court_filing_service.py -v --tb=short --cov=backend --cov-report=xml --cov-report=term
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
file: ./coverage.xml
flags: backend
name: backend-coverage
integration-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r backend/requirements.txt
pip install -r tests/requirements-test.txt
- name: Start backend server
run: |
cd backend
python combined_server.py &
sleep 10
- name: Run integration tests
run: |
python -m pytest tests/test_integration.py -v --tb=short
- name: Stop backend server
run: pkill -f combined_server.py
security-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install security tools
run: |
python -m pip install --upgrade pip
pip install bandit safety
- name: Run security scan
run: |
bandit -r backend/ -f txt
frontend-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
cache-dependency-path: frontend/package-lock.json
- name: Install frontend dependencies
run: |
cd frontend
npm ci
- name: Run frontend tests
run: |
cd frontend
npm test -- --coverage --watchAll=false
- name: Upload frontend coverage
uses: codecov/codecov-action@v3
with:
file: ./frontend/coverage/lcov.info
flags: frontend
name: frontend-coverage
performance-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r backend/requirements.txt
pip install -r tests/requirements-test.txt
- name: Start backend server
run: |
cd backend
python combined_server.py &
sleep 10
- name: Run performance tests
run: |
python -m pytest tests/test_integration.py::TestPerformanceIntegration -v --tb=short
- name: Stop backend server
run: pkill -f combined_server.py
code-quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install linting tools
run: |
python -m pip install --upgrade pip
pip install flake8 black isort
- name: Run linting
run: |
flake8 backend/ --count --select=E9,F63,F7,F82 --show-source --statistics
flake8 backend/ --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Check code formatting
run: |
black --check backend/
isort --check-only backend/
build-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r backend/requirements.txt
- name: Test backend build
run: |
cd backend
python -c "import combined_server; print('Backend imports successfully')"
- name: Test frontend build
run: |
cd frontend
npm ci
npm run build
test-summary:
runs-on: ubuntu-latest
needs: [backend-tests, integration-tests, security-tests, frontend-tests, performance-tests, code-quality, build-test]
if: always()
steps:
- name: Test Summary
run: |
echo "## Test Results Summary" >> $GITHUB_STEP_SUMMARY
echo "| Test Suite | Status |" >> $GITHUB_STEP_SUMMARY
echo "|------------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Backend Tests | ${{ needs.backend-tests.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Integration Tests | ${{ needs.integration-tests.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Security Tests | ${{ needs.security-tests.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Frontend Tests | ${{ needs.frontend-tests.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Performance Tests | ${{ needs.performance-tests.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Code Quality | ${{ needs.code-quality.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Build Test | ${{ needs.build-test.result }} |" >> $GITHUB_STEP_SUMMARY
if [[ "${{ needs.backend-tests.result }}" == "success" && "${{ needs.integration-tests.result }}" == "success" && "${{ needs.frontend-tests.result }}" == "success" ]]; then
echo "🎉 All critical tests passed!" >> $GITHUB_STEP_SUMMARY
else
echo "❌ Some tests failed!" >> $GITHUB_STEP_SUMMARY
fi