Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
49ed7d5
accommodate new BE testing/test result endpoint
etanb Feb 5, 2025
7b1809c
merge main
etanb Feb 6, 2025
0a2b109
add filter to string
etanb Feb 6, 2025
835982b
fix tests
etanb Feb 6, 2025
03630c0
Merge branch 'main' into experience/17264/integrate-be-new-message
etanb Feb 6, 2025
bd29903
Merge pull request #17280 from CDCgov/experience/17264/integrate-be-n…
etanb Feb 6, 2025
137ea66
Experience/16100-Create-E2E-test-for-the-Test-Results-Page (#17254)
jpandersen87 Feb 7, 2025
304968d
Bump the unit-testing group across 1 directory with 6 updates (#17314)
dependabot[bot] Feb 10, 2025
366940e
Bump the linting-and-formatting group across 1 directory with 4 updat…
dependabot[bot] Feb 10, 2025
e8da085
Bump the css group across 1 directory with 2 updates (#17310)
dependabot[bot] Feb 10, 2025
27e8584
Bump @okta/okta-signin-widget (#17309)
dependabot[bot] Feb 10, 2025
cdfdd97
Bump eslint-plugin-react-refresh in /frontend-react in the react grou…
dependabot[bot] Feb 10, 2025
f87d150
Bump vite in /frontend-react in the bundler group across 1 directory …
dependabot[bot] Feb 10, 2025
c0cbb73
download PDF and check if it has contents
etanb Feb 10, 2025
8e9bf2b
added documentation of supported fhir-to-fhir transforms (#17084)
lucero-v Feb 10, 2025
f151404
Merge branch 'main' into experience/16101/e2e-download-results-pdf
etanb Feb 10, 2025
9f2d7ec
Merge pull request #17327 from CDCgov/experience/16101/e2e-download-r…
etanb Feb 10, 2025
89406c8
Merge branch 'production' into deployment/2025-02-11
adegolier Feb 11, 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
@@ -1,8 +1,10 @@
import type { Locator } from "@playwright/test";
import * as fs from "fs";
import language from "../../../../src/components/Admin/MessageTesting/language.json" assert { type: "json" };
import {
errorMessageResult,
passMessageResult,
warningMessageResult,
} from "../../../../src/components/Admin/MessageTesting/MessageTestingResult.fixtures";
import { RSMessage } from "../../../../src/config/endpoints/reports";
import { MOCK_GET_TEST_MESSAGES } from "../../../mocks/message-test";
Expand All @@ -19,6 +21,7 @@ export class OrganizationReceiverMessageTestPage extends BasePage {

readonly expectedStatusSuccess = new RegExp(`^${language.successAlertHeading}`);
readonly expectedStatusFailure = new RegExp(`^${language.errorAlertHeading}`);
readonly expectedStatusWarning = new RegExp(`^${language.warningAlertHeading}`);

readonly form: Locator;
readonly addCustomMessageButton: Locator;
Expand All @@ -27,13 +30,14 @@ export class OrganizationReceiverMessageTestPage extends BasePage {
readonly customMessageTextArea: Locator;
readonly submitButton: Locator;
readonly submitStatus: Locator;
readonly submitAlert: Locator;
readonly submissionOutputMessageButton: Locator;
readonly submissionOutputMessage: Locator;
readonly submissionTestMessageButton: Locator;
readonly submissionTestMessage: Locator;
readonly submissionTransformErrorsButton: Locator;
readonly submissionTransformErrors: Locator;
readonly submissionTransformWarningsButton: Locator;
readonly submissionTransformWarnings: Locator;

constructor(testArgs: BasePageTestArgs) {
super(
Expand All @@ -55,14 +59,19 @@ export class OrganizationReceiverMessageTestPage extends BasePage {
this.cancelCustomMessageButton = this.form.getByRole("button", { name: "Cancel" });
this.customMessageTextArea = this.form.getByRole("textbox", { name: "Custom message text" });
this.submitButton = this.form.getByRole("button", { name: "Run test" });
this.submitStatus = this.page.getByRole("status");
this.submitAlert = this.page.getByRole("alert");
this.submitStatus = this.page
.getByRole("status")
.or(this.page.getByRole("alert"))
.or(this.page.getByRole("region", { name: "Information" }))
.first();
this.submissionOutputMessageButton = this.page.getByRole("button", { name: "Output message" });
this.submissionOutputMessage = this.page.getByLabel("Output message");
this.submissionTestMessageButton = this.page.getByRole("button", { name: "Test message" });
this.submissionTestMessage = this.page.getByLabel("Test message");
this.submissionTransformErrorsButton = this.page.getByRole("button", { name: "Transform errors" });
this.submissionTransformErrors = this.page.getByLabel("Transform errors");
this.submissionTransformWarningsButton = this.page.getByRole("button", { name: "Transform warnings" });
this.submissionTransformWarnings = this.page.getByLabel("Transform warnings");
this.addMockRouteHandlers([this.createMockTestMessagesHandler()]);
this.addResponseHandlers([
[
Expand All @@ -87,8 +96,19 @@ export class OrganizationReceiverMessageTestPage extends BasePage {
];
}

createMockTestSubmissionHandler(isFailed = false): RouteHandlerFulfillEntry {
const result = isFailed ? errorMessageResult : passMessageResult;
createMockTestSubmissionHandler(resultType: "pass" | "fail" | "warn" = "pass"): RouteHandlerFulfillEntry {
let result;
switch (resultType) {
case "fail":
result = errorMessageResult;
break;
case "warn":
result = warningMessageResult;
break;
default:
result = passMessageResult;
break;
}
return [
OrganizationReceiverMessageTestPage.API_REPORTS_TEST,
() => {
Expand All @@ -99,8 +119,21 @@ export class OrganizationReceiverMessageTestPage extends BasePage {
];
}

addMockTestSubmissionHandler(isFailed = false) {
return this.addMockRouteHandlers([this.createMockTestSubmissionHandler(isFailed)]);
addMockTestSubmissionHandler(resultType: "pass" | "fail" | "warn" = "pass") {
return this.addMockRouteHandlers([this.createMockTestSubmissionHandler(resultType)]);
}

async downloadPDF() {
// Listen for the 'download' event before firing
const [download] = await Promise.all([
this.page.waitForEvent("download"),
this.page.click('text="Download PDF"'),
]);

const filePath = await download.path();
const stats = fs.statSync(filePath);

return stats;
}

async submit() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { expect } from "@playwright/test";
import {
errorMessageResult,
passMessageResult,
warningMessageResult,
} from "../../../../../src/components/Admin/MessageTesting/MessageTestingResult.fixtures";
import type { RSMessageResult } from "../../../../../src/config/endpoints/reports";
import { pageNotFound } from "../../../../../src/content/error/ErrorMessages";
Expand Down Expand Up @@ -168,7 +169,9 @@ test.describe("Admin Organization Receiver Message Test Page", () => {
expect(resJson).toEqual(passMessageResult);

await expect(organizationReceiverMessageTestPage.submitStatus).toBeVisible();
await expect(organizationReceiverMessageTestPage.submitStatus).toHaveText(/^Test passed/);
await expect(organizationReceiverMessageTestPage.submitStatus).toHaveText(
organizationReceiverMessageTestPage.expectedStatusSuccess,
);
await expect(organizationReceiverMessageTestPage.submissionOutputMessageButton).toBeVisible();
await organizationReceiverMessageTestPage.submissionOutputMessageButton.click();
await expect(organizationReceiverMessageTestPage.submissionOutputMessage).toBeVisible();
Expand Down Expand Up @@ -202,9 +205,12 @@ test.describe("Admin Organization Receiver Message Test Page", () => {
expect(resJson).toEqual(passMessageResult);

await expect(organizationReceiverMessageTestPage.submitStatus).toBeVisible();
await expect(organizationReceiverMessageTestPage.submitStatus).toHaveText(/^Test passed/);
await expect(organizationReceiverMessageTestPage.submitStatus).toHaveText(
organizationReceiverMessageTestPage.expectedStatusSuccess,
);
await expect(organizationReceiverMessageTestPage.submissionOutputMessageButton).toBeVisible();
await organizationReceiverMessageTestPage.submissionOutputMessageButton.click();

await expect(organizationReceiverMessageTestPage.submissionOutputMessage).toBeVisible();
await expect(organizationReceiverMessageTestPage.submissionOutputMessage).toHaveText(
resJson.message ?? "",
Expand All @@ -217,8 +223,53 @@ test.describe("Admin Organization Receiver Message Test Page", () => {
);
});
});
test.describe("failure", () => {

test.describe("warning", () => {
test("stored message", async ({ organizationReceiverMessageTestPage }) => {
const message = organizationReceiverMessageTestPage.testMessages[0];
await expect(organizationReceiverMessageTestPage.form).toBeVisible();

const option = organizationReceiverMessageTestPage.form.getByLabel(message.fileName);
const optionLabel = organizationReceiverMessageTestPage.form.getByText(message.fileName);
const optionValue = await option.inputValue();
await expect(option).toBeVisible();
await optionLabel.click();
await expect(option).toBeChecked();

organizationReceiverMessageTestPage.addMockTestSubmissionHandler("warn");
const req = await organizationReceiverMessageTestPage.submit();
const res = await req.response();
const resJson = (await res?.json()) as RSMessageResult;
expect(req.postData()).toEqual(optionValue);
expect(resJson).toEqual(warningMessageResult);

await expect(organizationReceiverMessageTestPage.submitStatus).toBeVisible();
await expect(organizationReceiverMessageTestPage.submitStatus).toHaveText(
organizationReceiverMessageTestPage.expectedStatusWarning,
);
await expect(
organizationReceiverMessageTestPage.submissionTransformWarningsButton,
).toBeVisible();
await organizationReceiverMessageTestPage.submissionTransformWarningsButton.click();
await expect(organizationReceiverMessageTestPage.submissionTransformWarnings).toBeVisible();
await expect(organizationReceiverMessageTestPage.submissionTransformWarnings).toHaveText(
[
...resJson.senderTransformWarnings,
...resJson.enrichmentSchemaWarnings,
...resJson.receiverTransformWarnings,
].join(""),
);
await expect(organizationReceiverMessageTestPage.submissionTestMessageButton).toBeVisible();
await organizationReceiverMessageTestPage.submissionTestMessageButton.click();
await expect(organizationReceiverMessageTestPage.submissionTestMessage).toBeVisible();
await expect(organizationReceiverMessageTestPage.submissionTestMessage).toHaveText(
JSON.stringify(JSON.parse(message.reportBody), undefined, 2),
);
const fileStats = await organizationReceiverMessageTestPage.downloadPDF();
expect(fileStats.size).toBeGreaterThan(0);
});

test("custom message", async ({ organizationReceiverMessageTestPage }) => {
const message = '{"foo":"bar"}';
const [option, optionLabel] =
await organizationReceiverMessageTestPage.addCustomMessage(message);
Expand All @@ -229,15 +280,63 @@ test.describe("Admin Organization Receiver Message Test Page", () => {
await optionLabel.click();
await expect(option).toBeChecked();

organizationReceiverMessageTestPage.addMockTestSubmissionHandler(true);
organizationReceiverMessageTestPage.addMockTestSubmissionHandler("warn");
const req = await organizationReceiverMessageTestPage.submit();
const res = await req.response();
const resJson = (await res?.json()) as RSMessageResult;
expect(req.postData()).toEqual(optionValue);
expect(resJson).toEqual(warningMessageResult);

await expect(organizationReceiverMessageTestPage.submitStatus).toBeVisible();
await expect(organizationReceiverMessageTestPage.submitStatus).toHaveText(
organizationReceiverMessageTestPage.expectedStatusWarning,
);
await expect(
organizationReceiverMessageTestPage.submissionTransformWarningsButton,
).toBeVisible();
await organizationReceiverMessageTestPage.submissionTransformWarningsButton.click();
await expect(organizationReceiverMessageTestPage.submissionTransformWarnings).toBeVisible();
await expect(organizationReceiverMessageTestPage.submissionTransformWarnings).toHaveText(
[
...resJson.senderTransformWarnings,
...resJson.enrichmentSchemaWarnings,
...resJson.receiverTransformWarnings,
].join(""),
);
await expect(organizationReceiverMessageTestPage.submissionTestMessageButton).toBeVisible();
await organizationReceiverMessageTestPage.submissionTestMessageButton.click();
await expect(organizationReceiverMessageTestPage.submissionTestMessage).toBeVisible();
await expect(organizationReceiverMessageTestPage.submissionTestMessage).toHaveText(
JSON.stringify(JSON.parse(message), undefined, 2),
);
const fileStats = await organizationReceiverMessageTestPage.downloadPDF();
expect(fileStats.size).toBeGreaterThan(0);
});
});

test.describe("failure", () => {
test("stored message", async ({ organizationReceiverMessageTestPage }) => {
const message = organizationReceiverMessageTestPage.testMessages[0];
await expect(organizationReceiverMessageTestPage.form).toBeVisible();

const option = organizationReceiverMessageTestPage.form.getByLabel(message.fileName);
const optionLabel = organizationReceiverMessageTestPage.form.getByText(message.fileName);
const optionValue = await option.inputValue();
await expect(option).toBeVisible();
await optionLabel.click();
await expect(option).toBeChecked();

organizationReceiverMessageTestPage.addMockTestSubmissionHandler("fail");
const req = await organizationReceiverMessageTestPage.submit();
const res = await req.response();
const resJson = (await res?.json()) as RSMessageResult;
expect(req.postData()).toEqual(optionValue);
expect(resJson).toEqual(errorMessageResult);

await expect(organizationReceiverMessageTestPage.submitAlert).toBeVisible();
await expect(organizationReceiverMessageTestPage.submitAlert).toHaveText(/^Test failed/);
await expect(organizationReceiverMessageTestPage.submitStatus).toBeVisible();
await expect(organizationReceiverMessageTestPage.submitStatus).toHaveText(
organizationReceiverMessageTestPage.expectedStatusFailure,
);
await expect(organizationReceiverMessageTestPage.submissionTransformErrorsButton).toBeVisible();
await organizationReceiverMessageTestPage.submissionTransformErrorsButton.click();
await expect(organizationReceiverMessageTestPage.submissionTransformErrors).toBeVisible();
Expand All @@ -252,8 +351,10 @@ test.describe("Admin Organization Receiver Message Test Page", () => {
await organizationReceiverMessageTestPage.submissionTestMessageButton.click();
await expect(organizationReceiverMessageTestPage.submissionTestMessage).toBeVisible();
await expect(organizationReceiverMessageTestPage.submissionTestMessage).toHaveText(
JSON.stringify(JSON.parse(message), undefined, 2),
JSON.stringify(JSON.parse(message.reportBody), undefined, 2),
);
const fileStats = await organizationReceiverMessageTestPage.downloadPDF();
expect(fileStats.size).toBeGreaterThan(0);
});

test("custom message", async ({ organizationReceiverMessageTestPage }) => {
Expand All @@ -267,15 +368,17 @@ test.describe("Admin Organization Receiver Message Test Page", () => {
await optionLabel.click();
await expect(option).toBeChecked();

organizationReceiverMessageTestPage.addMockTestSubmissionHandler(true);
organizationReceiverMessageTestPage.addMockTestSubmissionHandler("fail");
const req = await organizationReceiverMessageTestPage.submit();
const res = await req.response();
const resJson = (await res?.json()) as RSMessageResult;
expect(req.postData()).toEqual(optionValue);
expect(resJson).toEqual(errorMessageResult);

await expect(organizationReceiverMessageTestPage.submitAlert).toBeVisible();
await expect(organizationReceiverMessageTestPage.submitAlert).toHaveText(/^Test failed/);
await expect(organizationReceiverMessageTestPage.submitStatus).toBeVisible();
await expect(organizationReceiverMessageTestPage.submitStatus).toHaveText(
organizationReceiverMessageTestPage.expectedStatusFailure,
);
await expect(organizationReceiverMessageTestPage.submissionTransformErrorsButton).toBeVisible();
await organizationReceiverMessageTestPage.submissionTransformErrorsButton.click();
await expect(organizationReceiverMessageTestPage.submissionTransformErrors).toBeVisible();
Expand All @@ -292,6 +395,8 @@ test.describe("Admin Organization Receiver Message Test Page", () => {
await expect(organizationReceiverMessageTestPage.submissionTestMessage).toHaveText(
JSON.stringify(JSON.parse(message), undefined, 2),
);
const fileStats = await organizationReceiverMessageTestPage.downloadPDF();
expect(fileStats.size).toBeGreaterThan(0);
});
});
});
Expand Down
Loading
Loading