From 137ea66f9922babc59e2e20d67063cbdc1869b31 Mon Sep 17 00:00:00 2001 From: Joseph Andersen <12385932+jpandersen87@users.noreply.github.com> Date: Fri, 7 Feb 2025 15:50:59 -0600 Subject: [PATCH] Experience/16100-Create-E2E-test-for-the-Test-Results-Page (#17254) * Create E2E test for the Test Message Bank Page Fixes #16072 --- .../organization-receiver-message-test.ts | 33 +++-- ...organization-receiver-message-test.spec.ts | 117 ++++++++++++++++-- 2 files changed, 133 insertions(+), 17 deletions(-) diff --git a/frontend-react/e2e/pages/authenticated/admin/organization-receiver-message-test.ts b/frontend-react/e2e/pages/authenticated/admin/organization-receiver-message-test.ts index 98e84799047..7efc1f6fd31 100644 --- a/frontend-react/e2e/pages/authenticated/admin/organization-receiver-message-test.ts +++ b/frontend-react/e2e/pages/authenticated/admin/organization-receiver-message-test.ts @@ -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"; @@ -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; @@ -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( @@ -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([ [ @@ -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, () => { @@ -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() { diff --git a/frontend-react/e2e/spec/all/authenticated/admin/organization-receiver-message-test.spec.ts b/frontend-react/e2e/spec/all/authenticated/admin/organization-receiver-message-test.spec.ts index d79998ecf81..2910dff07b6 100644 --- a/frontend-react/e2e/spec/all/authenticated/admin/organization-receiver-message-test.spec.ts +++ b/frontend-react/e2e/spec/all/authenticated/admin/organization-receiver-message-test.spec.ts @@ -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"; @@ -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(); @@ -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 ?? "", @@ -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); @@ -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(); @@ -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), ); }); @@ -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();