Skip to content

Commit d24f07d

Browse files
authored
CCM-14615 Unit test quickening (#249)
1 parent 611f186 commit d24f07d

20 files changed

Lines changed: 362 additions & 149 deletions

File tree

.github/workflows/stage-2-test.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,30 @@ jobs:
9999
with:
100100
node-version: ${{ inputs.nodejs_version }}
101101
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
102+
- name: "Install dependencies"
103+
run: npm ci
102104
- name: "Setup Python"
103105
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
104106
with:
105107
python-version: ${{ inputs.python_version }}
106108
cache: 'pip'
107109
cache-dependency-path: '**/requirements*.txt'
110+
- name: "Cache generated dependencies"
111+
id: schema-cache
112+
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
113+
with:
114+
path: |
115+
schemas/digital-letters/
116+
output/digital-letters/
117+
src/digital-letters-events/types/
118+
src/digital-letters-events/validators/
119+
src/digital-letters-events/digital_letters_events/models/
120+
src/digital-letters-events/guard-functions/
121+
key: generated-deps-${{ runner.os }}-${{ hashFiles('src/cloudevents/**', 'src/typescript-schema-generator/**', 'src/python-schema-generator/**') }}
122+
- name: "Generate dependencies"
123+
if: steps.schema-cache.outputs.cache-hit != 'true'
124+
run: |
125+
npm run generate-dependencies
108126
- name: "Run unit test suite"
109127
run: |
110128
make test-unit

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ version.json
1414

1515
# Don't track ephemeral local build files
1616
target/
17+
.turbo
1718

1819
# Python build artifacts
1920
*.egg-info/

jest.config.base.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,7 @@ export const baseJestConfig: Config = {
5555
testEnvironment: 'node',
5656

5757
moduleDirectories: ['node_modules', 'src'],
58+
59+
// Turbo now handles parallel running
60+
maxWorkers: 1,
5861
};

lambdas/key-generation/src/__tests__/refresh-keystores.test.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,35 @@ describe('cleanAndRefreshKeystores', () => {
348348
});
349349
});
350350

351+
it('Does not update youngestKeyDate if first key is already newer than second key', async () => {
352+
const {
353+
mockGenerateNewKey,
354+
mockUploadPublicKeystoreToS3,
355+
mockValidatePrivateKey,
356+
} = setupMocks(['2024-07-15', '2024-06-01']);
357+
358+
const now = new Date('2024-09-01');
359+
360+
// simulate multiple keys where the first key is newer — youngestKeyDate should NOT be updated
361+
mockValidatePrivateKey
362+
.mockResolvedValueOnce({
363+
valid: true,
364+
keyJwk: { kid: 'key1' } as JWK.Key,
365+
keyDate: new Date('2024-07-15'), // newer key first
366+
})
367+
.mockResolvedValueOnce({
368+
valid: true,
369+
keyJwk: { kid: 'key2' } as JWK.Key,
370+
keyDate: new Date('2024-06-01'), // older key second — should not update youngestKeyDate
371+
});
372+
373+
await cleanAndRefreshKeystores({ now });
374+
375+
expect(mockValidatePrivateKey).toHaveBeenCalledTimes(2);
376+
expect(mockGenerateNewKey).toHaveBeenCalled();
377+
expect(mockUploadPublicKeystoreToS3).toHaveBeenCalled();
378+
});
379+
351380
it('Runs successfully when updating youngestKeyDate if second key is newer', async () => {
352381
const {
353382
mockGenerateNewKey,

lambdas/mesh-acknowledge/pytest.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ addopts = -v --tb=short
77

88
[coverage:run]
99
relative_files = True
10+
data_file = lambdas/mesh-acknowledge/.coverage
1011
omit =
1112
*/mesh_acknowledge/__tests__/*
1213
*/test_*.py

lambdas/mesh-download/pytest.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ addopts = -v --tb=short
77

88
[coverage:run]
99
relative_files = True
10+
data_file = lambdas/mesh-download/.coverage
1011
omit =
1112
*/tests/*
1213
*/test_*.py

lambdas/mesh-poll/pytest.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ addopts = -v --tb=short
77

88
[coverage:run]
99
relative_files = True
10+
data_file = lambdas/mesh-poll/.coverage
1011
omit =
1112
*/mesh_poll/__tests__/*
1213
*/test_*.py

lambdas/report-sender/pytest.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ addopts = -v --tb=short
77

88
[coverage:run]
99
relative_files = True
10+
data_file = lambdas/report-sender/.coverage
1011
omit =
1112
*/report_sender/__tests__/*
1213
*/test_*.py

package-lock.json

Lines changed: 103 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"ts-jest": "^29.4.5",
3333
"ts-node": "^10.9.2",
3434
"tsx": "^4.20.6",
35+
"turbo": "^2.9.6",
3536
"typescript-eslint": "^8.46.1"
3637
},
3738
"name": "nhs-notify-digital-letters",
@@ -45,16 +46,16 @@
4546
"react": "^19.0.0",
4647
"test-exclude": "^8.0.0"
4748
},
49+
"packageManager": "npm@11.6.1",
4850
"scripts": {
4951
"build-schemas": "make -C src/cloudevents/domains/digital-letters build-no-bundle publish-bundled-json",
5052
"clean": "npm run clean --workspaces --if-present",
51-
"generate-dependencies": "npm run build-schemas && npm run generate-dependencies --workspaces --if-present && npm run generate-python-dependencies",
53+
"generate-dependencies": "npm run build-schemas && turbo run generate-dependencies && npm run generate-python-dependencies",
5254
"generate-python-dependencies": "make -C src/python-schema-generator generate",
53-
"lint": "npm run lint --workspaces",
54-
"lint:fix": "npm run lint:fix --workspaces",
55-
"start": "npm run start --workspace frontend",
56-
"test:unit": "npm run test:unit --workspaces",
57-
"typecheck": "npm run typecheck --workspaces"
55+
"lint": "turbo run lint",
56+
"lint:fix": "turbo run lint:fix",
57+
"test:unit": "turbo run test:unit",
58+
"typecheck": "turbo run typecheck"
5859
},
5960
"version": "0.0.1",
6061
"workspaces": [

0 commit comments

Comments
 (0)