Skip to content

Commit

Permalink
Experience/16100-Create-E2E-test-for-the-Test-Results-Page (#17254)
Browse files Browse the repository at this point in the history
* Create E2E test for the Test Message Bank Page
Fixes #16072
  • Loading branch information
jpandersen87 authored Feb 7, 2025
1 parent bd29903 commit 137ea66
Show file tree
Hide file tree
Showing 2 changed files with 133 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import language from "../../../../src/components/Admin/MessageTesting/language.j
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 +20,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 +29,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 +58,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 +95,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 +118,8 @@ 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 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,51 @@ 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),
);
});

test("custom message", async ({ organizationReceiverMessageTestPage }) => {
const message = '{"foo":"bar"}';
const [option, optionLabel] =
await organizationReceiverMessageTestPage.addCustomMessage(message);
Expand All @@ -229,15 +278,61 @@ 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),
);
});
});

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,7 +347,7 @@ 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),
);
});

Expand All @@ -267,15 +362,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 Down

0 comments on commit 137ea66

Please sign in to comment.