diff --git a/infrastructure/terraform/components/api/README.md b/infrastructure/terraform/components/api/README.md index 150af054..59cd0c85 100644 --- a/infrastructure/terraform/components/api/README.md +++ b/infrastructure/terraform/components/api/README.md @@ -12,6 +12,8 @@ No requirements. | [aws\_account\_id](#input\_aws\_account\_id) | The AWS Account ID (numeric) | `string` | n/a | yes | | [ca\_pem\_filename](#input\_ca\_pem\_filename) | Filename for the CA truststore file within the s3 bucket | `string` | `null` | no | | [component](#input\_component) | The variable encapsulating the name of this component | `string` | `"supapi"` | no | +| [core\_account\_id](#input\_core\_account\_id) | AWS Account ID for Core | `string` | `"000000000000"` | no | +| [core\_environment](#input\_core\_environment) | Environment of Core | `string` | `"prod"` | no | | [default\_tags](#input\_default\_tags) | A map of default tags to apply to all taggable resources within the component | `map(string)` | `{}` | no | | [enable\_backups](#input\_enable\_backups) | Enable backups | `bool` | `false` | no | | [environment](#input\_environment) | The name of the tfscaffold environment | `string` | n/a | yes | diff --git a/scripts/utilities/letter-test-data/src/__test__/helpers/create_letter_helpers.test.ts b/scripts/utilities/letter-test-data/src/__test__/helpers/create_letter_helpers.test.ts index a8b2a0db..994e6a27 100644 --- a/scripts/utilities/letter-test-data/src/__test__/helpers/create_letter_helpers.test.ts +++ b/scripts/utilities/letter-test-data/src/__test__/helpers/create_letter_helpers.test.ts @@ -10,7 +10,7 @@ describe("Create letter helpers", () => { jest.resetAllMocks(); }); - it("create letter", async () => { + it("create letter should create and upload a test letter", async () => { jest.useFakeTimers(); jest.setSystemTime(new Date(2020, 1, 1)); @@ -27,6 +27,7 @@ describe("Create letter helpers", () => { const groupId = "groupId"; const specificationId = "specificationId"; const status = "PENDING" as LetterStatusType; + const testLetter = "test-letter-standard"; await createLetter({ letterId, @@ -37,12 +38,13 @@ describe("Create letter helpers", () => { specificationId, status, letterRepository: mockedLetterRepository, + testLetter, }); expect(mockedUploadFile).toHaveBeenCalledWith( "bucketName", "supplierId", - "../../test_letter.pdf", + "../test-letters/test-letter-standard.pdf", "targetFilename", ); expect(mockPutLetter).toHaveBeenCalledWith({ @@ -57,6 +59,51 @@ describe("Create letter helpers", () => { }); }); + it("should not upload a letter for none", async () => { + jest.useFakeTimers(); + jest.setSystemTime(new Date(2020, 1, 1)); + + const mockPutLetter = jest.fn(); + const mockedLetterRepository = { + putLetter: mockPutLetter, + } as any as LetterRepository; + const mockedUploadFile = uploadFile as jest.Mock; + + const supplierId = "supplierId"; + const letterId = "letterId"; + const bucketName = "bucketName"; + const targetFilename = "targetFilename"; + const groupId = "groupId"; + const specificationId = "specificationId"; + const status = "PENDING" as LetterStatusType; + const testLetter = "none"; + + await createLetter({ + letterId, + bucketName, + supplierId, + targetFilename, + groupId, + specificationId, + status, + letterRepository: mockedLetterRepository, + testLetter, + }); + + expect(mockedUploadFile).not.toHaveBeenCalled(); + + expect(mockPutLetter).toHaveBeenCalledWith({ + createdAt: "2020-02-01T00:00:00.000Z", + groupId: "groupId", + id: "letterId", + specificationId: "specificationId", + status: "PENDING", + supplierId: "supplierId", + updatedAt: "2020-02-01T00:00:00.000Z", + url: "s3://bucketName/supplierId/targetFilename", + }); + }); + it("should create a letter DTO with correct fields", () => { jest.useFakeTimers(); jest.setSystemTime(new Date(2020, 1, 1)); diff --git a/scripts/utilities/letter-test-data/src/cli/index.ts b/scripts/utilities/letter-test-data/src/cli/index.ts index 915c392b..0e297edd 100644 --- a/scripts/utilities/letter-test-data/src/cli/index.ts +++ b/scripts/utilities/letter-test-data/src/cli/index.ts @@ -58,6 +58,15 @@ async function main() { "DELIVERED", ], }, + "test-letter": { + type: "string", + demandOption: true, + choices: [ + "test-letter-large", + "test-letter-standard", + "none", //none exists to specify letter without pdf for error testing scenarios + ] + }, }, async (argv) => { const supplierId = argv.supplierId; @@ -72,6 +81,7 @@ async function main() { const environment = argv.environment; const ttlHours = argv.ttlHours; const letterRepository = createLetterRepository(environment, ttlHours); + const testLetter = argv.testLetter; createLetter({ letterId, @@ -82,6 +92,7 @@ async function main() { specificationId, status: status as LetterStatusType, letterRepository, + testLetter }); }, ) @@ -135,6 +146,15 @@ async function main() { "DELIVERED", ], }, + "test-letter": { + type: "string", + demandOption: true, + choices: [ + "test-letter-large", + "test-letter-standard", + "none", //none exists to specify letter without pdf for error testing scenarios + ] + }, }, async (argv) => { @@ -152,13 +172,22 @@ async function main() { const ttlHours = argv.ttlHours; const letterRepository = createLetterRepository(environment, ttlHours); const count = argv.count; + const testLetter = argv.testLetter; - - // Upload a test file for this batch + // Setup file attributes const bucketName = `nhs-${argv.awsAccountId}-eu-west-2-${argv.environment}-supapi-test-letters`; const targetFilename = `${batchId}-${status}.pdf`; const url = `s3://${bucketName}/${batchId}/${targetFilename}`; - await uploadFile(bucketName, batchId, "../../test_letter.pdf", targetFilename); + + // Upload a test file for this batch if it is not an 'none' batch + if(testLetter !== 'none') { + await uploadFile( + bucketName, + supplierId, + `../test-letters/${testLetter}.pdf`, + targetFilename, + ); + } // Create letter DTOs let letterDtos = []; diff --git a/scripts/utilities/letter-test-data/src/create-batch-letters.sh b/scripts/utilities/letter-test-data/src/create-batch-letters.sh index eff9643e..8ea58e2d 100755 --- a/scripts/utilities/letter-test-data/src/create-batch-letters.sh +++ b/scripts/utilities/letter-test-data/src/create-batch-letters.sh @@ -105,9 +105,9 @@ cd "$PROJECT_DIR" # Define the three batches with different specification and group IDs BATCHES=( - "integration-specification-english:group-english" - "integration-specification-braille:group-accessible" - "integration-specification-arabic:group-international" + "integration-specification-english:group-english:test-letter-standard" + "integration-specification-braille:group-accessible:test-letter-standard" + "integration-specification-arabic:group-international:test-letter-large" ) # Counter for tracking batch creation @@ -121,7 +121,7 @@ echo "" # Create each batch for batch in "${BATCHES[@]}"; do # Parse specification-id and group-id from the batch definition - IFS=':' read -r SPEC_ID GROUP_ID <<< "$batch" + IFS=':' read -r SPEC_ID GROUP_ID TEST_LETTER <<< "$batch" echo "[$BATCH_COUNTER/$TOTAL_BATCHES] Creating batch with specification-id: $SPEC_ID, group-id: $GROUP_ID-$SUPPLIER_ID" @@ -134,7 +134,8 @@ for batch in "${BATCHES[@]}"; do --group-id "$GROUP_ID-$SUPPLIER_ID" \ --status "$STATUS" \ --count "$COUNT" \ - --ttl-hours "$TTL_HOURS" + --ttl-hours "$TTL_HOURS" \ + --test-letter "$TEST_LETTER" if [[ $? -eq 0 ]]; then echo "✓ Batch $BATCH_COUNTER completed successfully" diff --git a/scripts/utilities/letter-test-data/src/helpers/create_letter_helpers.ts b/scripts/utilities/letter-test-data/src/helpers/create_letter_helpers.ts index 062154ec..3186edd4 100644 --- a/scripts/utilities/letter-test-data/src/helpers/create_letter_helpers.ts +++ b/scripts/utilities/letter-test-data/src/helpers/create_letter_helpers.ts @@ -14,6 +14,7 @@ export async function createLetter(params: { groupId: string; status: LetterStatusType; letterRepository: LetterRepository; + testLetter: string; }) { const { letterId, @@ -24,14 +25,17 @@ export async function createLetter(params: { groupId, status, letterRepository, + testLetter, } = params; - await uploadFile( - bucketName, - supplierId, - "../../test_letter.pdf", - targetFilename, - ); + if(testLetter !== 'none') { + await uploadFile( + bucketName, + supplierId, + `../test-letters/${testLetter}.pdf`, + targetFilename, + ); + } const letter: Omit = { id: letterId, diff --git a/scripts/utilities/letter-test-data/src/helpers/s3_helpers.ts b/scripts/utilities/letter-test-data/src/helpers/s3_helpers.ts index 89ef72a4..deeb2836 100644 --- a/scripts/utilities/letter-test-data/src/helpers/s3_helpers.ts +++ b/scripts/utilities/letter-test-data/src/helpers/s3_helpers.ts @@ -6,7 +6,7 @@ import path from "path"; export async function uploadFile(bucketName: string, supplierId: string, sourceFilename: string, targetFilename: string) { try { const s3 = new S3Client(); - const filePath = path.join(__dirname, sourceFilename); + const filePath = path.join(__dirname, 'test-letters', sourceFilename); const fileContent = readFileSync(filePath); const uploadParams = { diff --git a/scripts/utilities/letter-test-data/src/test-letters/test-letter-large.pdf b/scripts/utilities/letter-test-data/src/test-letters/test-letter-large.pdf new file mode 100644 index 00000000..f572bf23 Binary files /dev/null and b/scripts/utilities/letter-test-data/src/test-letters/test-letter-large.pdf differ diff --git a/scripts/utilities/letter-test-data/src/test-letters/test-letter-standard.pdf b/scripts/utilities/letter-test-data/src/test-letters/test-letter-standard.pdf new file mode 100644 index 00000000..4fb48e1e Binary files /dev/null and b/scripts/utilities/letter-test-data/src/test-letters/test-letter-standard.pdf differ diff --git a/scripts/utilities/letter-test-data/test_letter.pdf b/scripts/utilities/letter-test-data/test_letter.pdf deleted file mode 100644 index 1d0f763d..00000000 Binary files a/scripts/utilities/letter-test-data/test_letter.pdf and /dev/null differ