Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
a4fb94c
HOTE-541: Add playwright scripts to CI
mikeeq Feb 16, 2026
a30d19b
Add package-lock.json for tests
mikeeq Feb 16, 2026
90295cf
Add package-lock.json for tests v2
mikeeq Feb 16, 2026
212d10c
Add package-lock.json for tests v3
mikeeq Feb 16, 2026
d09eb2d
Add package-lock.json for tests v4
mikeeq Feb 16, 2026
9708df7
Add coverage report
mikeeq Feb 16, 2026
24aa08f
Add coverage report v2
mikeeq Feb 16, 2026
d3c4ee3
add lambdas eslint
mikeeq Feb 16, 2026
52b9df0
add lambdas eslint v2
mikeeq Feb 16, 2026
20dab4a
Fix all eslint issues
mikeeq Feb 16, 2026
dc515aa
remove eslint from pre-commit
mikeeq Feb 16, 2026
7821d30
Add lambdas unit tests
mikeeq Feb 16, 2026
de890a2
Add lambdas unit tests v2
mikeeq Feb 16, 2026
eb457dc
Fix test
mikeeq Feb 16, 2026
6814d14
Fix test v2
mikeeq Feb 16, 2026
d10d39b
Fix test v3
mikeeq Feb 16, 2026
5d4a509
Fix test v4
mikeeq Feb 16, 2026
b3453e8
Merge branch 'main' of github.com:NHSDigital/hometest-service into fe…
mikeeq Feb 17, 2026
cf8cdd8
cleanup
mikeeq Feb 17, 2026
7162be8
Fix sqlfluff raised issues
mikeeq Feb 17, 2026
77970a0
revert github actions changes
mikeeq Feb 17, 2026
6051576
cleanup v3
mikeeq Feb 17, 2026
e475fd9
cleanup v4
mikeeq Feb 17, 2026
501cbb6
add colored output to unit tests
mikeeq Feb 18, 2026
c7cae01
update packages
mikeeq Feb 18, 2026
80958a1
update packages v2
mikeeq Feb 18, 2026
8bf583c
update packages v3
mikeeq Feb 18, 2026
f09ed38
run tests via mise
mikeeq Feb 18, 2026
62a02f0
Add missing uuid package
mikeeq Feb 18, 2026
bca8b1c
Add tests eslint
mikeeq Feb 18, 2026
0689153
HOTE-541: Fix all warnings raised by eslint
mikeeq Feb 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .github/actions/init-mise/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
name: "Initialize mise"
description: "Initialize mise"
runs:
using: "composite"
steps:
- name: Configure git
shell: bash
run: |
echo "::group::Configure git"
git config --global --add safe.directory '*'
echo "::endgroup::"

- name: Install mise
uses: jdx/mise-action@v3
with:
cache: true
install: true

- name: Cache node_modules
uses: actions/cache@v5
with:
path: |
node_modules
ui/node_modules
lambdas/node_modules
tests/node_modules
key: node-modules-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
node-modules-${{ runner.os }}-

- name: Install npm dependencies
shell: bash
run: |
echo "::group::Install npm dependencies"
mise run install-npm
echo "::endgroup::"
15 changes: 1 addition & 14 deletions .github/actions/perform-pre-commit/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,13 @@ description: "Perform pre-commit checks"
runs:
using: "composite"
steps:
- name: Configure git
shell: bash
run: |
echo "::group::Configure git"
git config --global --add safe.directory '*'
echo "::endgroup::"

- name: Install mise
uses: jdx/mise-action@v3
with:
cache: true
install: true

- name: Cache pre-commit hooks
uses: actions/cache@v5
with:
path: ~/.cache/pre-commit
key: pre-commit-${{ runner.os }}-${{ hashFiles('.pre-commit-config.yaml') }}
restore-keys: |
pre-commit-${{ runner.os }}-
pre-commit-${{ runner.os }}

- name: Install pre-commit
shell: bash
Expand Down
13 changes: 4 additions & 9 deletions .github/actions/run-npm-tests/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,15 @@ inputs:
runs:
using: "composite"
steps:
- name: "Setup Node.js"
uses: actions/setup-node@v6
with:
node-version: "${{ inputs.nodejs-version }}"
cache: npm
cache-dependency-path: ${{ inputs.working-directory }}/package-lock.json

- name: "Install dependencies"
shell: bash
run: npm --prefix ${{ inputs.working-directory }} ci
run: mise exec -- npm --prefix ${{ inputs.working-directory }} ci

- name: "Run test suite"
shell: bash
run: npm --prefix ${{ inputs.working-directory }} run test -- --ci
run: mise exec -- npm --prefix ${{ inputs.working-directory }} run test -- --ci
env:
FORCE_COLOR: true

- name: "Upload test results"
uses: actions/upload-artifact@v4
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/stage-1-commit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -99,5 +99,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Initialize mise
uses: ./.github/actions/init-mise
- name: Run pre-commit checks
uses: ./.github/actions/perform-pre-commit
60 changes: 60 additions & 0 deletions .github/workflows/stage-2-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ jobs:
steps:
- name: "Checkout code"
uses: actions/checkout@v6
- name: Initialize mise
uses: ./.github/actions/init-mise
- name: "Run UI tests"
uses: ./.github/actions/run-npm-tests
with:
Expand All @@ -58,6 +60,8 @@ jobs:
steps:
- name: "Checkout code"
uses: actions/checkout@v6
- name: Initialize mise
uses: ./.github/actions/init-mise
- name: "Run Lambda tests"
uses: ./.github/actions/run-npm-tests
with:
Expand All @@ -78,6 +82,62 @@ jobs:
- name: "Save the coverage check result"
run: |
echo "Nothing to save"

test-playwright:
name: "Playwright E2E tests"
needs: [test-unit-ui, test-unit-lambda]
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: "Checkout code"
uses: actions/checkout@v6
- name: "Install mise"
uses: jdx/mise-action@v3
with:
install: true
cache: true

# - name: Cache npm
# uses: actions/cache@v5
# with:
# path: ~/.cache/pre-commit
# key: pre-commit-${{ runner.os }}-${{ hashFiles('.pre-commit-config.yaml') }}
# restore-keys: |
# pre-commit-${{ runner.os }}-

- name: "Install project dependencies"
run: |
npm install
- name: "Start the application"
run: |
npm run start
- name: "Install dependencies"
working-directory: tests
run: npm ci
- name: "Install Playwright browsers"
working-directory: tests
run: npx playwright install --with-deps
- name: "Create credentials file"
working-directory: tests
run: |
cat > credentials.ts << 'EOF'
export const userPasswordGeneric = '${{ secrets.PLAYWRIGHT_PASSWORD }}';
export const OTP = '${{ secrets.PLAYWRIGHT_OTP }}';
EOF
- name: "Run Playwright tests"
working-directory: tests
run: npm test
env:
CI: true
# BASE_URL: ${{ vars.TEST_BASE_URL }}
- name: "Upload test results"
uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report
path: tests/testResults/
retention-days: 30

perform-static-analysis:
name: "Perform static analysis"
needs: [test-unit-ui, test-unit-lambda]
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -163,3 +163,4 @@ mcp.json
/test-results/
.next
WorkerUser*
junit.xml
37 changes: 37 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,40 @@ repos:
language: system
files: ^lambdas/.*\.(ts|js)$
pass_filenames: false

- id: eslint-tests
name: ESLint (Tests)
entry: npm --prefix tests run lint -- --fix
language: system
files: ^tests/.*\.(ts|js)$
pass_filenames: false

# - id: typescript-check-ui
# name: TypeScript (UI)
# entry: npm --prefix ui run build -- --noEmit
# language: system
# files: ^ui/.*\.tsx?$
# pass_filenames: false
# # stages: [pre-push] # Slow, run on push

# - id: typescript-check-lambdas
# name: TypeScript (Lambdas)
# entry: bash -c 'cd lambdas && npx tsc --noEmit'
# language: system
# files: ^lambdas/.*\.ts$
# pass_filenames: false
# # stages: [pre-push]

# - id: jest-unit-ui
# name: Jest Unit Tests (UI - affected only)
# entry: npm --prefix ui run test -- --bail --findRelatedTests --passWithNoTests
# language: system
# files: ^ui/.*\.(ts|tsx)$
# # stages: [pre-push]

# - id: jest-unit-lambdas
# name: Jest Unit Tests (Lambdas - affected only)
# entry: bash -c 'cd lambdas && npx jest --bail --findRelatedTests --passWithNoTests'
# language: system
# files: ^lambdas/.*\.ts$
# # stages: [pre-push]
5 changes: 5 additions & 0 deletions .trivyignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# fast-xml-parser CVE - transitive dependency from AWS SDK
# DoS via entity expansion in DOCTYPE - low risk for backend Lambda usage
# Monitor: https://avd.aquasec.com/nvd/cve-2026-26278
# https://github.com/aws/aws-sdk-js-v3/pull/7742/changes
CVE-2026-26278
6 changes: 6 additions & 0 deletions lambdas/eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ export default tseslint.config(
"no-useless-catch": "warn",
},
},
{
files: ["**/*.test.ts"],
rules: {
"@typescript-eslint/no-require-imports": "off", // Jest module mocking requires dynamic imports
},
},
{
ignores: ["dist/**", "node_modules/**", "jest/**", "*.config.*"],
}
Expand Down
Loading
Loading