Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
c5d925b
CCM-8579: Switch from util types to api client types
ClareJonesBJSS Mar 10, 2025
3cb995a
CCM-8579: Copy, tests, misc
ClareJonesBJSS Mar 10, 2025
f41f5f2
CCM-8679: hey-api generator
ClareJonesBJSS Mar 10, 2025
a122f99
CCM-8679: Update TemplateType
ClareJonesBJSS Mar 10, 2025
c50e542
CCM-8579: TemplateStatus switch
ClareJonesBJSS Mar 10, 2025
512e643
CCM-8579: language
ClareJonesBJSS Mar 10, 2025
a2f3737
CCM-8579: LetterType
ClareJonesBJSS Mar 10, 2025
d1e33ba
CCM-8579: Virus scan status
ClareJonesBJSS Mar 10, 2025
d932849
CCM-8579: Tidy gen
ClareJonesBJSS Mar 10, 2025
ad34151
CCM-8579: Casing etc
ClareJonesBJSS Mar 10, 2025
08a9ded
CCM-8579: Typecheck fixes
ClareJonesBJSS Mar 10, 2025
1f88f93
CCM-8579: Stray log
ClareJonesBJSS Mar 10, 2025
caa3608
CCM-8579: Misc
ClareJonesBJSS Mar 10, 2025
9d4a431
CCM-8579: Alternate gen of union lists
ClareJonesBJSS Mar 10, 2025
96e8485
CCM-8585: squashed
alexnuttall Mar 10, 2025
daa2bc1
CCM-8585: disable coverage
alexnuttall Mar 10, 2025
44ae17e
CCM-8585: adding letter upload repo tests
alexnuttall Mar 11, 2025
31c119e
CCM-8585: adding letter upload repo tests
alexnuttall Mar 11, 2025
d5bfd27
CCM-8585: api unit tests
alexnuttall Mar 11, 2025
f793aab
CCM-8585: api client tests
alexnuttall Mar 11, 2025
f14792f
CCM-8585: tf docs
alexnuttall Mar 11, 2025
43a7ffc
CCM-8585: rm files from createTemplate
alexnuttall Mar 11, 2025
fd8c291
CCM-8585: rm files from createTemplate
alexnuttall Mar 11, 2025
eaa7cca
CCM-8585: make files optional on letter props
alexnuttall Mar 11, 2025
c9f736e
CCM-8585: make files optional on letter props - fix tests
alexnuttall Mar 11, 2025
509e908
CCM-8585: convert helper arg to buffer
alexnuttall Mar 11, 2025
f1cd658
CCM-8585: api tests
alexnuttall Mar 12, 2025
5d18063
CCM-8585: cleanup
alexnuttall Mar 12, 2025
2516346
CCM-8585: fix unit test
alexnuttall Mar 12, 2025
3824d1a
CCM-8585: cut sandbox branch id to 14 chars
alexnuttall Mar 12, 2025
22a3b80
CCM-8585: block letters creation on create endpoint
alexnuttall Mar 12, 2025
f18b124
CCM-8585: block letters creation on create endpoint
alexnuttall Mar 12, 2025
278d88e
CCM-8585: feature flag on createLetter endpoint
alexnuttall Mar 12, 2025
8744ae0
CCM-8585: unit test fixes
alexnuttall Mar 12, 2025
04123b9
CCM-8585: unit test fixes
alexnuttall Mar 12, 2025
6c7231d
CCM-8585: unit test fixes
alexnuttall Mar 13, 2025
3e37b42
CCM-8585: add missing env vars
alexnuttall Mar 13, 2025
e8768bf
CCM-8585: make update private method in template client
alexnuttall Mar 13, 2025
3c83a31
CCM-8585: typecheck fix
alexnuttall Mar 13, 2025
d14f34f
CCM-8585: fix api tests
alexnuttall Mar 13, 2025
c2f969a
CCM-8585: use shared kms
alexnuttall Mar 13, 2025
74211cf
CCM-8585: correct description
alexnuttall Mar 13, 2025
aee1a8a
CCM-8585: fix line endings
alexnuttall Mar 13, 2025
8529660
CCM-8585: tf docs
alexnuttall Mar 13, 2025
95628d5
CCM-9037: add internal s3 bucket
harrim91 Mar 13, 2025
3ee78e5
CCM-9037: tf docs
harrim91 Mar 13, 2025
8ba6cf2
CCM-9037: add missing reference
harrim91 Mar 13, 2025
68de1f0
CCM-9037: normalized branxch name fix
harrim91 Mar 13, 2025
d72a14d
Merge branch 'main' into feature/CCM-9037_internal-bucket
harrim91 Mar 13, 2025
4d55ee6
CCM-8585: make test util exhaustive
alexnuttall Mar 13, 2025
943643e
CCM-8585: create non-letter validators
alexnuttall Mar 14, 2025
253e347
Merge branch 'main' into feature/CCM-8585-upload-pdf-backend-squash
alexnuttall Mar 14, 2025
2aaa1d0
CCM-8585: lockfile
alexnuttall Mar 14, 2025
e83b5b8
CCM-8585: unit test
alexnuttall Mar 14, 2025
df1808b
CCM-8585: tf cleanup
alexnuttall Mar 14, 2025
239f4c6
CCM-8585: rm unused kms key opt
alexnuttall Mar 14, 2025
0347b77
CCM-9037: add acct sandbox kms key, quarantine s3 bucket
harrim91 Mar 14, 2025
a482bc2
CCM-9037: use shared key in sandboxes for dynamodb
harrim91 Mar 14, 2025
4691686
CCM-9037: update missed refs
harrim91 Mar 14, 2025
b27b4b9
CCM-9037: fix existing typo
harrim91 Mar 14, 2025
915e36f
CCM-9037: fix key alias ref
harrim91 Mar 14, 2025
d78f8bc
CCM-9037: tf docs
harrim91 Mar 14, 2025
29575f5
CCM-9037: trim branchname a little more
harrim91 Mar 14, 2025
b1bb98a
Merge branch 'feature/CCM-9037_internal-bucket' into feature/CCM-8585…
alexnuttall Mar 14, 2025
7c99ee6
CCM-9047: tf docs
alexnuttall Mar 14, 2025
f8f766f
CCM-9047: stray tf files
alexnuttall Mar 14, 2025
c005f97
CCM-9047: fix broken kms ref
alexnuttall Mar 14, 2025
7f09c26
CCM-9047: remove ref to dynamo key
alexnuttall Mar 14, 2025
b0d8fb5
CCM-8585: restore lifecycle rule
alexnuttall Mar 17, 2025
7b418e2
Merge branch 'feature/CCM-9037_internal-bucket' into feature/CCM-8585…
alexnuttall Mar 17, 2025
e1ded2a
CCM-8585: use post in curl commands
alexnuttall Mar 17, 2025
1b302d3
Merge branch 'main' into feature/CCM-8585-upload-pdf-backend-squash
alexnuttall Mar 18, 2025
53791d0
Merge branch 'main' into feature/CCM-8585-upload-pdf-backend-squash
alexnuttall Mar 19, 2025
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
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,17 @@
*/
import CreateLetterTemplatePage from '@app/create-letter-template/page';

const OLD_ENV = { ...process.env };

describe('CreateLetterTemplatePage', () => {
beforeEach(jest.resetAllMocks);
beforeEach(() => {
jest.resetAllMocks();
process.env.NEXT_PUBLIC_ENABLE_LETTERS = 'true';
});

afterAll(() => {
process.env = OLD_ENV;
});

it('should render CreateLetterTemplatePage', async () => {
const page = await CreateLetterTemplatePage();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ describe('EditEmailTemplatePage', () => {
it('should render CreateEmailTemplatePage component when template is found', async () => {
getTemplateMock.mockResolvedValueOnce(template);

const emailTemplate = {
const emailTemplate: EmailTemplate = {
...template,
subject: 'subject',
templateType: 'EMAIL' as const,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ describe('Preview letter form renders', () => {
currentVersion: '4C728B7D-A028-4BA2-B180-A63CDD2AE1E9',
virusScanStatus: 'PENDING',
},
testDataCsv: undefined,
},
})}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -756,43 +756,6 @@ exports[`Preview letter form renders matches snapshot when navigating from manag
</div>
</div>
</div>
<div
class="nhsuk-grid-row preview__row"
>
<div
class="nhsuk-grid-column-one-third preview__col"
>
<div
class="preview__col_heading"
>
Test personalisation file
</div>
</div>
<div
class="nhsuk-grid-column-two-thirds col"
>
<div
class="container"
>
<svg
class="icon"
fill="none"
height="26"
viewBox="0 0 20 26"
width="20"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M0 0V26H20V6.59375L19.7188 6.28125L13.7188 0.28125L13.4062 0H0ZM2 2H12V8H18V24H2V2ZM14 3.4375L16.5625 6H14V3.4375Z"
fill="#4C6272"
/>
</svg>
<p
class="text"
/>
</div>
</div>
</div>
</div>
</div>
<form
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ const manageTemplatesProps: {
files: {
pdfTemplate: {
fileName: 'template.pdf',
currentVersion: '8BAC',
virusScanStatus: 'PASSED',
},
},
},
Expand Down
2 changes: 2 additions & 0 deletions frontend/src/__tests__/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ export const LETTER_TEMPLATE: TemplateDto = {
files: {
pdfTemplate: {
fileName: 'template.pdf',
currentVersion: '8ADED236B5AE',
virusScanStatus: 'PASSED',
},
},
name: 'name',
Expand Down
34 changes: 21 additions & 13 deletions frontend/src/__tests__/utils/form-actions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,14 @@ import {
getTemplates,
} from '@utils/form-actions';
import { getAccessTokenServer } from '@utils/amplify-utils';
import { mockDeep } from 'jest-mock-extended';
import { ITemplateClient, TemplateDto } from 'nhs-notify-backend-client';
import { TemplateDto } from 'nhs-notify-backend-client';
import { templateClient } from 'nhs-notify-backend-client/src/template-api-client';

const mockedTemplateClient = mockDeep<ITemplateClient>();
const mockedTemplateClient = jest.mocked(templateClient);
const authIdTokenServerMock = jest.mocked(getAccessTokenServer);

jest.mock('@utils/amplify-utils');
jest.mock('nhs-notify-backend-client/src/template-api-client', () => ({
TemplateClient: () => mockedTemplateClient,
}));
jest.mock('nhs-notify-backend-client/src/template-api-client');

describe('form-actions', () => {
beforeEach(() => {
Expand Down Expand Up @@ -53,7 +51,8 @@ describe('form-actions', () => {
const response = await createTemplate(createTemplateInput);

expect(mockedTemplateClient.createTemplate).toHaveBeenCalledWith(
createTemplateInput
createTemplateInput,
'token'
);

expect(response).toEqual(responseData);
Expand All @@ -78,7 +77,8 @@ describe('form-actions', () => {
);

expect(mockedTemplateClient.createTemplate).toHaveBeenCalledWith(
createTemplateInput
createTemplateInput,
'token'
);
});

Expand Down Expand Up @@ -126,7 +126,8 @@ describe('form-actions', () => {

expect(mockedTemplateClient.updateTemplate).toHaveBeenCalledWith(
updateTemplateInput.id,
updateTemplateInput
updateTemplateInput,
'token'
);

expect(response).toEqual(responseData);
Expand Down Expand Up @@ -156,7 +157,8 @@ describe('form-actions', () => {

expect(mockedTemplateClient.updateTemplate).toHaveBeenCalledWith(
updateTemplateInput.id,
updateTemplateInput
updateTemplateInput,
'token'
);
});

Expand Down Expand Up @@ -196,7 +198,10 @@ describe('form-actions', () => {

const response = await getTemplate('id');

expect(mockedTemplateClient.getTemplate).toHaveBeenCalledWith('id');
expect(mockedTemplateClient.getTemplate).toHaveBeenCalledWith(
'id',
'token'
);

expect(response).toEqual(responseData);
});
Expand All @@ -212,7 +217,10 @@ describe('form-actions', () => {

const response = await getTemplate('id');

expect(mockedTemplateClient.getTemplate).toHaveBeenCalledWith('id');
expect(mockedTemplateClient.getTemplate).toHaveBeenCalledWith(
'id',
'token'
);

expect(response).toEqual(undefined);
});
Expand Down Expand Up @@ -243,7 +251,7 @@ describe('form-actions', () => {

const response = await getTemplates();

expect(mockedTemplateClient.listTemplates).toHaveBeenCalledWith();
expect(mockedTemplateClient.listTemplates).toHaveBeenCalledWith('token');

expect(response).toEqual([responseData]);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,8 @@ export const EmailTemplateForm: FC<
</div>
<aside className='nhsuk-grid-column-one-third'>
<Personalisation />
<MessageFormatting template={'EMAIL'} />
<ChannelGuidance template={'EMAIL'} />
<MessageFormatting template='EMAIL' />
<ChannelGuidance template='EMAIL' />
</aside>
</div>
</NHSNotifyMain>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,8 @@ export const NhsAppTemplateForm: FC<
</div>
<aside className='nhsuk-grid-column-one-third'>
<Personalisation />
<MessageFormatting template={'NHS_APP'} />
<ChannelGuidance template={'NHS_APP'} />
<MessageFormatting template='NHS_APP' />
<ChannelGuidance template='NHS_APP' />
</aside>
</div>
</NHSNotifyMain>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,8 @@ export const SmsTemplateForm: FC<
</div>
<aside className='nhsuk-grid-column-one-third'>
<Personalisation />
<MessageFormatting template={'SMS'} />
<ChannelGuidance template={'SMS'} />
<MessageFormatting template='SMS' />
<ChannelGuidance template='SMS' />
</aside>
</div>
</NHSNotifyMain>
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const protectedPaths = [
/^\/create-letter-template$/,
/^\/delete-template\/[^/]+$/,
/^\/edit-email-template\/[^/]+$/,
/^\/edit-nhs-app-template/,
/^\/edit-nhs-app-template\/[^/]+$/,
/^\/edit-text-message-template\/[^/]+$/,
/^\/email-template-submitted\/[^/]+$/,
/^\/invalid-template$/,
Expand Down
13 changes: 7 additions & 6 deletions frontend/src/utils/form-actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
ValidatedTemplateDto,
} from 'nhs-notify-backend-client';
import { logger } from 'nhs-notify-web-template-management-utils/logger';
import { TemplateClient } from 'nhs-notify-backend-client/src/template-api-client';
import { templateClient } from 'nhs-notify-backend-client/src/template-api-client';

export async function createTemplate(
template: CreateTemplate
Expand All @@ -19,7 +19,7 @@ export async function createTemplate(
throw new Error('Failed to get access token');
}

const { data, error } = await TemplateClient(token).createTemplate(template);
const { data, error } = await templateClient.createTemplate(template, token);

if (error) {
logger.error('Failed to create template', { error });
Expand All @@ -38,9 +38,10 @@ export async function saveTemplate(
throw new Error('Failed to get access token');
}

const { data, error } = await TemplateClient(token).updateTemplate(
const { data, error } = await templateClient.updateTemplate(
template.id,
template
template,
token
);

if (error) {
Expand All @@ -60,7 +61,7 @@ export async function getTemplate(
throw new Error('Failed to get access token');
}

const { data, error } = await TemplateClient(token).getTemplate(templateId);
const { data, error } = await templateClient.getTemplate(templateId, token);

if (error) {
logger.error('Failed to get template', { error });
Expand All @@ -76,7 +77,7 @@ export async function getTemplates(): Promise<TemplateDto[]> {
throw new Error('Failed to get access token');
}

const { data, error } = await TemplateClient(token).listTemplates();
const { data, error } = await templateClient.listTemplates(token);

if (error) {
logger.error('Failed to get templates', { error });
Expand Down
1 change: 0 additions & 1 deletion infrastructure/terraform/components/acct/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,3 @@ variable "support_sandbox_environments" {
description = "Does this account support dev sandbox environments?"
default = false
}

3 changes: 1 addition & 2 deletions infrastructure/terraform/components/sandbox/pre.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

npm ci
if [ -z "$SKIP_SANDBOX_INSTALL" ]; then npm ci; fi

npm run generate-dependencies --workspaces --if-present
1 change: 1 addition & 0 deletions infrastructure/terraform/modules/backend-api/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ No requirements.
| <a name="module_authorizer_lambda"></a> [authorizer\_lambda](#module\_authorizer\_lambda) | ../lambda-function | n/a |
| <a name="module_build_template_client"></a> [build\_template\_client](#module\_build\_template\_client) | ../typescript-build-zip | n/a |
| <a name="module_build_template_lambda"></a> [build\_template\_lambda](#module\_build\_template\_lambda) | ../typescript-build-zip | n/a |
| <a name="module_create_letter_template_lambda"></a> [create\_letter\_template\_lambda](#module\_create\_letter\_template\_lambda) | ../lambda-function | n/a |
| <a name="module_create_template_lambda"></a> [create\_template\_lambda](#module\_create\_template\_lambda) | ../lambda-function | n/a |
| <a name="module_get_template_lambda"></a> [get\_template\_lambda](#module\_get\_template\_lambda) | ../lambda-function | n/a |
| <a name="module_list_template_lambda"></a> [list\_template\_lambda](#module\_list\_template\_lambda) | ../lambda-function | n/a |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@ resource "aws_api_gateway_rest_api" "main" {
body = local.openapi_spec
description = "Templates API"
disable_execute_api_endpoint = false

binary_media_types = [ "multipart/form-data" ]
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ data "aws_iam_policy_document" "api_gateway_execution_policy" {
resources = [
module.authorizer_lambda.function_arn,
module.create_template_lambda.function_arn,
module.create_letter_template_lambda.function_arn,
module.update_template_lambda.function_arn,
module.get_template_lambda.function_arn,
module.list_template_lambda.function_arn
Expand Down
26 changes: 14 additions & 12 deletions infrastructure/terraform/modules/backend-api/locals.tf
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,23 @@ locals {
lambdas_source_code_dir = abspath("${path.module}/../../../../lambdas")

openapi_spec = templatefile("${path.module}/spec.tmpl.json", {
AWS_REGION = var.region
APIG_EXECUTION_ROLE_ARN = aws_iam_role.api_gateway_execution_role.arn
AUTHORIZER_LAMBDA_ARN = module.authorizer_lambda.function_arn
CREATE_LAMBDA_ARN = module.create_template_lambda.function_arn
UPDATE_LAMBDA_ARN = module.update_template_lambda.function_arn
GET_LAMBDA_ARN = module.get_template_lambda.function_arn
LIST_LAMBDA_ARN = module.list_template_lambda.function_arn
AWS_REGION = var.region
APIG_EXECUTION_ROLE_ARN = aws_iam_role.api_gateway_execution_role.arn
AUTHORIZER_LAMBDA_ARN = module.authorizer_lambda.function_arn
CREATE_LAMBDA_ARN = module.create_template_lambda.function_arn
CREATE_LETTER_LAMBDA_ARN = module.create_letter_template_lambda.function_arn
UPDATE_LAMBDA_ARN = module.update_template_lambda.function_arn
GET_LAMBDA_ARN = module.get_template_lambda.function_arn
LIST_LAMBDA_ARN = module.list_template_lambda.function_arn
})

backend_lambda_entrypoints = {
create_template = "src/templates/api/create.ts"
get_template = "src/templates/api/get.ts"
update_template = "src/templates/api/update.ts"
list_template = "src/templates/api/list.ts"
template_client = "src/index.ts"
create_template = "src/templates/create.ts"
create_letter_template = "src/templates/create-letter.ts"
get_template = "src/templates/get.ts"
update_template = "src/templates/update.ts"
list_template = "src/templates/list.ts"
template_client = "src/index.ts"
}

dynamodb_kms_key_arn = var.dynamodb_kms_key_arn == "" ? aws_kms_key.dynamo[0].arn : var.dynamodb_kms_key_arn
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ module "build_template_lambda" {
source_code_dir = "${local.lambdas_source_code_dir}/backend-api"
entrypoints = [
local.backend_lambda_entrypoints.create_template,
local.backend_lambda_entrypoints.create_letter_template,
local.backend_lambda_entrypoints.get_template,
local.backend_lambda_entrypoints.update_template,
local.backend_lambda_entrypoints.list_template,
Expand Down
Loading
Loading