diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6f66b70..22daa19 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,23 +18,62 @@ hadolint: # Run Python backend tests python_tests: stage: test + needs: [] # Run in parallel with build image: deps.global.bsf.tools/docker/python:3.12-slim + timeout: 15m + variables: + PIP_CACHE_DIR: "$CI_PROJECT_DIR/.pip-cache" + cache: + key: pip-$CI_COMMIT_REF_SLUG + paths: + - .pip-cache/ + policy: pull-push before_script: - pip install -r backend/requirements.txt - - pip install pytest pytest-asyncio httpx + - pip install pytest pytest-asyncio pytest-cov httpx script: - cd backend - - python -m pytest -v + - python -m pytest -v --cov=app --cov-report=term --cov-report=xml:coverage.xml --cov-report=html:coverage_html --junitxml=pytest-report.xml + artifacts: + when: always + expire_in: 1 week + paths: + - backend/coverage.xml + - backend/coverage_html/ + - backend/pytest-report.xml + reports: + junit: backend/pytest-report.xml + coverage_report: + coverage_format: cobertura + path: backend/coverage.xml + coverage: '/TOTAL.*\s+(\d+%)/' # Run frontend tests frontend_tests: stage: test + needs: [] # Run in parallel with build image: deps.global.bsf.tools/docker/node:20-alpine + timeout: 15m + cache: + key: npm-$CI_COMMIT_REF_SLUG + paths: + - frontend/node_modules/ + policy: pull-push before_script: - cd frontend - npm ci script: - - npm run test -- --run + - npm run test -- --run --reporter=verbose --coverage + artifacts: + when: always + expire_in: 1 week + paths: + - frontend/coverage/ + reports: + coverage_report: + coverage_format: cobertura + path: frontend/coverage/cobertura-coverage.xml + coverage: '/All files[^|]*\|[^|]*\s+([\d\.]+)/' rules: - exists: - frontend/package.json diff --git a/frontend/package.json b/frontend/package.json index e85ea13..984b229 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -23,6 +23,7 @@ "@types/react": "^18.2.48", "@types/react-dom": "^18.2.18", "@vitejs/plugin-react": "^4.2.1", + "@vitest/coverage-v8": "^1.3.1", "jsdom": "^24.0.0", "typescript": "^5.3.3", "vite": "^5.0.12", diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index bd5209f..516842e 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -16,5 +16,10 @@ export default defineConfig({ environment: 'jsdom', setupFiles: './src/test/setup.ts', css: true, + coverage: { + provider: 'v8', + reporter: ['text', 'cobertura', 'html'], + reportsDirectory: './coverage', + }, } })