From 09ce11dcc609fcbafbed6f44a1cabc67306ec778 Mon Sep 17 00:00:00 2001 From: Bangbay Siboliban Date: Thu, 5 Dec 2024 14:00:47 -0800 Subject: [PATCH 1/8] Add mcpar dashboard e2e --- tests/playwright/pages/banner.spec.ts | 6 +- tests/playwright/pages/home.spec.ts | 9 ++- .../playwright/pages/mcpar/dashboard.spec.ts | 46 +++++++++++ tests/playwright/pages/profile.spec.ts | 8 +- tests/playwright/utils/auth.setup.ts | 17 ++-- tests/playwright/utils/consts.ts | 3 + tests/playwright/utils/fixtures/base.ts | 80 +++++++++++-------- tests/playwright/utils/index.ts | 3 +- tests/playwright/utils/pageObjects/index.ts | 13 +++ .../utils/pageObjects/mcpar/dashboard.page.ts | 21 +++++ .../pageObjects/mcpar/getStarted.page.ts | 17 ++++ .../utils/pageObjects/stateHome.page.ts | 11 +-- 12 files changed, 178 insertions(+), 56 deletions(-) create mode 100644 tests/playwright/pages/mcpar/dashboard.spec.ts create mode 100644 tests/playwright/utils/pageObjects/index.ts create mode 100644 tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts create mode 100644 tests/playwright/utils/pageObjects/mcpar/getStarted.page.ts diff --git a/tests/playwright/pages/banner.spec.ts b/tests/playwright/pages/banner.spec.ts index 92bfff922..0ae8d6368 100644 --- a/tests/playwright/pages/banner.spec.ts +++ b/tests/playwright/pages/banner.spec.ts @@ -1,5 +1,5 @@ -import { test, expect } from "../utils/fixtures/base"; -import BannerPage from "../utils/pageObjects/banner.page"; +import { expect, test } from "../utils/fixtures/base"; +import { BannerPage, stateUserAuth } from "../utils"; test.describe("admin user banner page", () => { test("Should see the correct banner page as an admin user", async ({ @@ -34,7 +34,7 @@ test.describe("admin user banner page", () => { profilePage, }) => { const userContext = await browser.newContext({ - storageState: ".auth/user.json", + storageState: stateUserAuth, }); await profilePage.goto(); const newBannerPage = new BannerPage(await userContext.newPage()); diff --git a/tests/playwright/pages/home.spec.ts b/tests/playwright/pages/home.spec.ts index 435dde011..b659e573c 100644 --- a/tests/playwright/pages/home.spec.ts +++ b/tests/playwright/pages/home.spec.ts @@ -1,5 +1,5 @@ -import { test, expect } from "../utils/fixtures/base"; -import BasePage from "../utils/pageObjects/base.page"; +import { expect, test } from "../utils/fixtures/base"; +import { BasePage } from "../utils"; test.describe("state user home page", () => { test("Should see the correct home page as a state user", async ({ @@ -7,8 +7,9 @@ test.describe("state user home page", () => { }) => { await stateHomePage.goto(); await stateHomePage.isReady(); - await expect(stateHomePage.wpButton).toBeVisible(); - await expect(stateHomePage.sarButton).toBeVisible(); + await expect(stateHomePage.mcparButton).toBeVisible(); + await expect(stateHomePage.mlrButton).toBeVisible(); + await expect(stateHomePage.naarButton).toBeVisible(); }); test("Is accessible on all device types for state user", async ({ diff --git a/tests/playwright/pages/mcpar/dashboard.spec.ts b/tests/playwright/pages/mcpar/dashboard.spec.ts new file mode 100644 index 000000000..4c77618bb --- /dev/null +++ b/tests/playwright/pages/mcpar/dashboard.spec.ts @@ -0,0 +1,46 @@ +import { expect, test } from "../../utils/fixtures/base"; + +test.describe( + "MCPAR Dashboard Page - Program Creation/Editing/Archiving", + () => { + test("State users can create and edit reports", async ({ + stateMCPARDashboardPage, + stateMCPARGetStartedPage, + stateHomePage, + }) => { + await stateHomePage.goto(); + await stateHomePage.isReady(); + + await expect(stateHomePage.mcparButton).toBeVisible(); + await stateHomePage.mcparButton.click(); + await stateHomePage.redirectPage("/mcpar/get-started"); + + await expect(stateMCPARGetStartedPage.mcparButton).toBeVisible(); + await stateMCPARGetStartedPage.mcparButton.click(); + await stateMCPARGetStartedPage.redirectPage("/mcpar"); + + await expect(stateMCPARDashboardPage.addCopyButton).toBeVisible(); + await stateMCPARDashboardPage.addCopyButton.click(); + + await expect(stateMCPARDashboardPage.saveButton).toBeVisible(); + }); + } +); + +test.describe("Admin Archiving", () => { + test("Admin users can archive/unarchive reports", async ({ + adminHomePage, + }) => { + await adminHomePage.goto(); + await adminHomePage.isReady(); + }); +}); + +test.describe("State users can't see archived programs", () => { + test("State users can't see archived programs", async ({ + stateMCPARDashboardPage, + }) => { + await stateMCPARDashboardPage.goto(); + await stateMCPARDashboardPage.isReady(); + }); +}); diff --git a/tests/playwright/pages/profile.spec.ts b/tests/playwright/pages/profile.spec.ts index ca53d2c40..db62155e2 100644 --- a/tests/playwright/pages/profile.spec.ts +++ b/tests/playwright/pages/profile.spec.ts @@ -1,6 +1,6 @@ -import { test, expect } from "../utils/fixtures/base"; +import { expect, test } from "../utils/fixtures/base"; import { BrowserContext, Page } from "@playwright/test"; -import ProfilePage from "../utils/pageObjects/profile.page"; +import { adminUserAuth, ProfilePage, stateUserAuth } from "../utils"; let adminPage: Page; let userPage: Page; @@ -9,12 +9,12 @@ let userContext: BrowserContext; test.beforeAll(async ({ browser }) => { adminContext = await browser.newContext({ - storageState: ".auth/admin.json", + storageState: adminUserAuth, }); adminPage = await adminContext.newPage(); userContext = await browser.newContext({ - storageState: ".auth/user.json", + storageState: stateUserAuth, }); userPage = await userContext.newPage(); }); diff --git a/tests/playwright/utils/auth.setup.ts b/tests/playwright/utils/auth.setup.ts index 8dcf84365..94e389a53 100644 --- a/tests/playwright/utils/auth.setup.ts +++ b/tests/playwright/utils/auth.setup.ts @@ -1,8 +1,13 @@ import { test as setup } from "@playwright/test"; -import { adminPassword, adminUser, statePassword, stateUser } from "./consts"; - -const adminFile = ".auth/admin.json"; +import { + adminPassword, + adminUser, + adminUserAuth, + statePassword, + stateUser, + stateUserAuth, +} from "./consts"; setup("authenticate as admin", async ({ page }) => { await page.goto("/"); @@ -19,11 +24,9 @@ setup("authenticate as admin", async ({ page }) => { }) .isVisible(); await page.waitForTimeout(1000); - await page.context().storageState({ path: adminFile }); + await page.context().storageState({ path: adminUserAuth }); }); -const userFile = ".auth/user.json"; - setup("authenticate as user", async ({ page }) => { await page.goto("/"); const emailInput = page.getByRole("textbox", { name: "email" }); @@ -39,5 +42,5 @@ setup("authenticate as user", async ({ page }) => { }) .isVisible(); await page.waitForTimeout(1000); - await page.context().storageState({ path: userFile }); + await page.context().storageState({ path: stateUserAuth }); }); diff --git a/tests/playwright/utils/consts.ts b/tests/playwright/utils/consts.ts index 367ceeb8c..9c65c6465 100644 --- a/tests/playwright/utils/consts.ts +++ b/tests/playwright/utils/consts.ts @@ -7,3 +7,6 @@ export const stateAbbreviation = process.env.TEST_STATE || "MN"; export const stateName = process.env.TEST_STATE_NAME || "Minnesota"; export const currentYear: number = new Date().getFullYear(); + +export const stateUserAuth: string = ".auth/user.json"; +export const adminUserAuth: string = ".auth/admin.json"; diff --git a/tests/playwright/utils/fixtures/base.ts b/tests/playwright/utils/fixtures/base.ts index 88d6a39f7..4ffd1219a 100644 --- a/tests/playwright/utils/fixtures/base.ts +++ b/tests/playwright/utils/fixtures/base.ts @@ -1,48 +1,64 @@ -import { mergeTests, test as base } from "@playwright/test"; -import StateHomePage from "../pageObjects/stateHome.page"; -import AdminHomePage from "../pageObjects/adminHome.page"; -import BannerPage from "../pageObjects/banner.page"; -import ProfilePage from "../pageObjects/profile.page"; +import { Browser, mergeTests, test as base } from "@playwright/test"; +import { + AdminHomePage, + adminUserAuth, + BannerPage, + MCPARDashboardPage, + MCPARGetStartedPage, + ProfilePage, + StateHomePage, + stateUserAuth, +} from "../../utils"; type CustomFixtures = { - stateHomePage: StateHomePage; adminHomePage: AdminHomePage; bannerPage: BannerPage; profilePage: ProfilePage; + stateHomePage: StateHomePage; + stateMCPARDashboardPage: MCPARDashboardPage; + stateMCPARGetStartedPage: MCPARGetStartedPage; }; +async function addPageObject( + PageObject: any, + browser: Browser, + use: any, + storageState: string +) { + const context = await browser.newContext({ storageState }); + const page = new PageObject(await context.newPage()); + // Init page + await page.goto(); + await use(page); + await context.close(); +} + +async function adminPage(PageObject: any, browser: Browser, use: any) { + await addPageObject(PageObject, browser, use, adminUserAuth); +} + +async function statePage(PageObject: any, browser: Browser, use: any) { + await addPageObject(PageObject, browser, use, stateUserAuth); +} + export const baseTest = base.extend({ - stateHomePage: async ({ browser }, use) => { - const context = await browser.newContext({ - storageState: ".auth/user.json", - }); - const stateHomePage = new StateHomePage(await context.newPage()); - await use(stateHomePage); - await context.close(); - }, adminHomePage: async ({ browser }, use) => { - const context = await browser.newContext({ - storageState: ".auth/admin.json", - }); - const adminHomePage = new AdminHomePage(await context.newPage()); - await use(adminHomePage); - await context.close(); + await adminPage(AdminHomePage, browser, use); }, bannerPage: async ({ browser }, use) => { - const context = await browser.newContext({ - storageState: ".auth/admin.json", - }); - const bannerPage = new BannerPage(await context.newPage()); - await use(bannerPage); - await context.close(); + await adminPage(BannerPage, browser, use); }, profilePage: async ({ browser }, use) => { - const context = await browser.newContext({ - storageState: ".auth/user.json", - }); - const profilePage = new ProfilePage(await context.newPage()); - await use(profilePage); - await context.close(); + await statePage(ProfilePage, browser, use); + }, + stateHomePage: async ({ browser }, use) => { + await statePage(StateHomePage, browser, use); + }, + stateMCPARDashboardPage: async ({ browser }, use) => { + await statePage(MCPARDashboardPage, browser, use); + }, + stateMCPARGetStartedPage: async ({ browser }, use) => { + await statePage(MCPARGetStartedPage, browser, use); }, }); diff --git a/tests/playwright/utils/index.ts b/tests/playwright/utils/index.ts index 1b4506130..b42e6c82f 100644 --- a/tests/playwright/utils/index.ts +++ b/tests/playwright/utils/index.ts @@ -1,3 +1,4 @@ +export * from "./a11y"; export * from "./consts"; export * from "./login"; -export * from "./a11y"; +export * from "./pageObjects"; diff --git a/tests/playwright/utils/pageObjects/index.ts b/tests/playwright/utils/pageObjects/index.ts new file mode 100644 index 000000000..8b06e1a0a --- /dev/null +++ b/tests/playwright/utils/pageObjects/index.ts @@ -0,0 +1,13 @@ +export { default as BasePage } from "./base.page"; +export { default as BannerPage } from "./banner.page"; +export { default as ProfilePage } from "./profile.page"; + +// Admin User +export { default as AdminHomePage } from "./adminHome.page"; + +// State User +export { default as StateHomePage } from "./stateHome.page"; + +// MCPAR +export { default as MCPARDashboardPage } from "./mcpar/dashboard.page"; +export { default as MCPARGetStartedPage } from "./mcpar/getStarted.page"; diff --git a/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts b/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts new file mode 100644 index 000000000..6d47d0698 --- /dev/null +++ b/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts @@ -0,0 +1,21 @@ +import { Locator, Page } from "@playwright/test"; +import BasePage from "../base.page"; + +export default class MCPARDashboardPage extends BasePage { + public path = "/mcpar"; + + readonly page: Page; + readonly addCopyButton: Locator; + readonly saveButton: Locator; + + constructor(page: Page) { + super(page); + this.page = page; + this.addCopyButton = page.getByRole("button", { + name: "Add / copy a MCPAR", + }); + this.saveButton = page.getByRole("button", { + name: "Save", + }); + } +} diff --git a/tests/playwright/utils/pageObjects/mcpar/getStarted.page.ts b/tests/playwright/utils/pageObjects/mcpar/getStarted.page.ts new file mode 100644 index 000000000..3a73ba2f8 --- /dev/null +++ b/tests/playwright/utils/pageObjects/mcpar/getStarted.page.ts @@ -0,0 +1,17 @@ +import { Locator, Page } from "@playwright/test"; +import BasePage from "../base.page"; + +export default class MCPARGetStartedPage extends BasePage { + public path = "/mcpar/get-started"; + + readonly page: Page; + readonly mcparButton: Locator; + + constructor(page: Page) { + super(page); + this.page = page; + this.mcparButton = page.getByRole("button", { + name: "Enter MCPAR online", + }); + } +} diff --git a/tests/playwright/utils/pageObjects/stateHome.page.ts b/tests/playwright/utils/pageObjects/stateHome.page.ts index f452846d0..43c1e67d3 100644 --- a/tests/playwright/utils/pageObjects/stateHome.page.ts +++ b/tests/playwright/utils/pageObjects/stateHome.page.ts @@ -6,8 +6,9 @@ export default class StateHomePage extends BasePage { readonly page: Page; readonly title: Locator; - readonly wpButton: Locator; - readonly sarButton: Locator; + readonly mcparButton: Locator; + readonly mlrButton: Locator; + readonly naarButton: Locator; constructor(page: Page) { super(page); @@ -15,10 +16,10 @@ export default class StateHomePage extends BasePage { this.title = page.getByRole("heading", { name: "Managed Care Reporting Portal", }); - this.wpButton = page.getByRole("button", { + this.mcparButton = page.getByRole("button", { name: "Enter MCPAR online", }); - this.sarButton = page.getByRole("button", { name: "Enter MLR online" }); - this.sarButton = page.getByRole("button", { name: "Enter NAAAR online" }); + this.mlrButton = page.getByRole("button", { name: "Enter MLR online" }); + this.naarButton = page.getByRole("button", { name: "Enter NAAAR online" }); } } From f026b916a7e81560120074c0b9655664711f0a5f Mon Sep 17 00:00:00 2001 From: Bangbay Siboliban Date: Thu, 5 Dec 2024 14:12:14 -0800 Subject: [PATCH 2/8] Naaar --- tests/playwright/pages/home.spec.ts | 2 +- tests/playwright/utils/pageObjects/stateHome.page.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/playwright/pages/home.spec.ts b/tests/playwright/pages/home.spec.ts index b659e573c..381ee93cb 100644 --- a/tests/playwright/pages/home.spec.ts +++ b/tests/playwright/pages/home.spec.ts @@ -9,7 +9,7 @@ test.describe("state user home page", () => { await stateHomePage.isReady(); await expect(stateHomePage.mcparButton).toBeVisible(); await expect(stateHomePage.mlrButton).toBeVisible(); - await expect(stateHomePage.naarButton).toBeVisible(); + await expect(stateHomePage.naaarButton).toBeVisible(); }); test("Is accessible on all device types for state user", async ({ diff --git a/tests/playwright/utils/pageObjects/stateHome.page.ts b/tests/playwright/utils/pageObjects/stateHome.page.ts index 43c1e67d3..d39e404cd 100644 --- a/tests/playwright/utils/pageObjects/stateHome.page.ts +++ b/tests/playwright/utils/pageObjects/stateHome.page.ts @@ -8,7 +8,7 @@ export default class StateHomePage extends BasePage { readonly title: Locator; readonly mcparButton: Locator; readonly mlrButton: Locator; - readonly naarButton: Locator; + readonly naaarButton: Locator; constructor(page: Page) { super(page); @@ -20,6 +20,6 @@ export default class StateHomePage extends BasePage { name: "Enter MCPAR online", }); this.mlrButton = page.getByRole("button", { name: "Enter MLR online" }); - this.naarButton = page.getByRole("button", { name: "Enter NAAAR online" }); + this.naaarButton = page.getByRole("button", { name: "Enter NAAAR online" }); } } From 330b142c1eef3d4fce5dbbbb74b098b9e7268adb Mon Sep 17 00:00:00 2001 From: Bangbay Siboliban Date: Thu, 5 Dec 2024 16:56:39 -0800 Subject: [PATCH 3/8] Dashboard tests --- .../playwright/pages/mcpar/dashboard.spec.ts | 29 ++++++++++-- .../utils/pageObjects/adminHome.page.ts | 9 ++++ .../playwright/utils/pageObjects/base.page.ts | 4 ++ .../utils/pageObjects/mcpar/dashboard.page.ts | 47 ++++++++++++++++++- 4 files changed, 85 insertions(+), 4 deletions(-) diff --git a/tests/playwright/pages/mcpar/dashboard.spec.ts b/tests/playwright/pages/mcpar/dashboard.spec.ts index 4c77618bb..6876e7015 100644 --- a/tests/playwright/pages/mcpar/dashboard.spec.ts +++ b/tests/playwright/pages/mcpar/dashboard.spec.ts @@ -1,4 +1,9 @@ import { expect, test } from "../../utils/fixtures/base"; +import { stateName } from "../../utils"; + +const currentDate = new Date().toISOString(); +const programName = `automated test - ${currentDate}`; +const newName = `Edited: ${programName}`; test.describe( "MCPAR Dashboard Page - Program Creation/Editing/Archiving", @@ -19,10 +24,20 @@ test.describe( await stateMCPARGetStartedPage.mcparButton.click(); await stateMCPARGetStartedPage.redirectPage("/mcpar"); - await expect(stateMCPARDashboardPage.addCopyButton).toBeVisible(); - await stateMCPARDashboardPage.addCopyButton.click(); + // Create MCPAR + await stateMCPARDashboardPage.createMCPAR(programName); + await expect( + stateMCPARDashboardPage.table.getByRole("row", { name: programName }) + ).toBeVisible(); - await expect(stateMCPARDashboardPage.saveButton).toBeVisible(); + // Edit MCPAR + await stateMCPARDashboardPage.editProgram(programName, newName); + await expect( + stateMCPARDashboardPage.table.getByRole("row", { name: programName }) + ).not.toBeVisible(); + await expect( + stateMCPARDashboardPage.table.getByRole("row", { name: newName }) + ).toBeVisible(); }); } ); @@ -33,14 +48,22 @@ test.describe("Admin Archiving", () => { }) => { await adminHomePage.goto(); await adminHomePage.isReady(); + await adminHomePage.selectMCPAR(stateName); }); }); test.describe("State users can't see archived programs", () => { test("State users can't see archived programs", async ({ + adminHomePage, stateMCPARDashboardPage, }) => { await stateMCPARDashboardPage.goto(); await stateMCPARDashboardPage.isReady(); + + await stateMCPARDashboardPage.logOut(); + + await adminHomePage.goto(); + await adminHomePage.isReady(); + await adminHomePage.selectMCPAR(stateName); }); }); diff --git a/tests/playwright/utils/pageObjects/adminHome.page.ts b/tests/playwright/utils/pageObjects/adminHome.page.ts index 92678722e..e57b4f25e 100644 --- a/tests/playwright/utils/pageObjects/adminHome.page.ts +++ b/tests/playwright/utils/pageObjects/adminHome.page.ts @@ -1,5 +1,6 @@ import { Locator, Page } from "@playwright/test"; import BasePage from "./base.page"; +import { ReportType } from "../../../../services/ui-src/src/types"; export default class AdminHomePage extends BasePage { public path = "/"; @@ -56,4 +57,12 @@ export default class AdminHomePage extends BasePage { }) .click(); } + + public async archiveExistingReports(reportType: string, state: string) { + switch (reportType) { + case ReportType.MCPAR: { + this.selectMCPAR(state); + } + } + } } diff --git a/tests/playwright/utils/pageObjects/base.page.ts b/tests/playwright/utils/pageObjects/base.page.ts index eb1bb0ed2..8f2d36492 100644 --- a/tests/playwright/utils/pageObjects/base.page.ts +++ b/tests/playwright/utils/pageObjects/base.page.ts @@ -40,6 +40,10 @@ export default class BasePage { await this.page.waitForURL(url); } + public async getByRole(role: any, options?: any) { + return this.page.getByRole(role, options); + } + public async isReady() { await this.title.isVisible(); return expect(this.page).toHaveURL(this.path); diff --git a/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts b/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts index 6d47d0698..e0348da8e 100644 --- a/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts +++ b/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts @@ -7,6 +7,8 @@ export default class MCPARDashboardPage extends BasePage { readonly page: Page; readonly addCopyButton: Locator; readonly saveButton: Locator; + readonly modal: Locator; + readonly table: Locator; constructor(page: Page) { super(page); @@ -14,8 +16,51 @@ export default class MCPARDashboardPage extends BasePage { this.addCopyButton = page.getByRole("button", { name: "Add / copy a MCPAR", }); - this.saveButton = page.getByRole("button", { + this.table = page.getByRole("table"); + this.modal = page.getByRole("dialog"); + this.saveButton = this.modal.getByRole("button", { name: "Save", }); } + + public async createMCPAR(programName: string) { + await this.addCopyButton.isVisible(); + await this.addCopyButton.click(); + await this.modal.isVisible(); + await this.modal + .getByRole("heading", { name: "Add / Copy a MCPAR" }) + .isVisible(); + await this.modal + .getByLabel("Program name (for new MCPAR)") + .fill(programName); + await this.modal + .getByLabel("A.5a Reporting period (i.e. contract period) start date") + .fill("10/10/2024"); + await this.modal + .getByLabel("A.5b Reporting period (i.e. contract period) end date") + .fill("12/10/2024"); + await this.modal + .getByLabel("Exclusion of CHIP from MCPAR") + .click({ force: true }); + await this.modal.getByLabel("No").click({ force: true }); + await this.saveButton.click(); + await this.page.waitForResponse((response) => response.status() == 200); + await this.modal.isHidden(); + await this.table.isVisible(); + } + + public async editProgram(currentName: string, newName: string) { + const row = this.page.getByRole("row", { name: currentName }); + const editProgramButton = row.getByRole("button").first(); + + await editProgramButton.isVisible(); + await editProgramButton.click(); + await this.modal.isVisible(); + await this.modal.getByRole("heading", { name: "Edit Program" }).isVisible(); + await this.modal.getByLabel("Program name (for new MCPAR)").fill(newName); + await this.saveButton.click(); + await this.page.waitForResponse((response) => response.status() == 200); + await this.modal.isHidden(); + await this.table.isVisible(); + } } From 54aca82a4226af3fc7d5c1bc2fcf35e67aef2203 Mon Sep 17 00:00:00 2001 From: Bangbay Siboliban Date: Thu, 5 Dec 2024 17:46:26 -0800 Subject: [PATCH 4/8] Dashboard tests --- .env.tpl | 4 +- .../playwright/pages/mcpar/dashboard.spec.ts | 68 +++++++++++-------- tests/playwright/utils/consts.ts | 4 +- .../utils/pageObjects/adminHome.page.ts | 21 ++++++ 4 files changed, 64 insertions(+), 33 deletions(-) diff --git a/.env.tpl b/.env.tpl index b86c67798..106769d1d 100644 --- a/.env.tpl +++ b/.env.tpl @@ -46,5 +46,5 @@ TEST_ADMIN_USER_EMAIL=op://mdct_devs/mcr_secrets/CYPRESS_ADMIN_USER_EMAIL TEST_ADMIN_USER_PASSWORD=op://mdct_devs/mcr_secrets/CYPRESS_ADMIN_USER_PASSWORD # pragma: allowlist secret TEST_STATE_USER_EMAIL=op://mdct_devs/mcr_secrets/CYPRESS_STATE_USER_EMAIL TEST_STATE_USER_PASSWORD=op://mdct_devs/mcr_secrets/CYPRESS_STATE_USER_PASSWORD # pragma: allowlist secret -TEST_STATE=MN -TEST_STATE=Minnesota +TEST_STATE=DC +TEST_STATE_NAME="District of Columbia" diff --git a/tests/playwright/pages/mcpar/dashboard.spec.ts b/tests/playwright/pages/mcpar/dashboard.spec.ts index 6876e7015..aa9f8faa7 100644 --- a/tests/playwright/pages/mcpar/dashboard.spec.ts +++ b/tests/playwright/pages/mcpar/dashboard.spec.ts @@ -1,9 +1,15 @@ import { expect, test } from "../../utils/fixtures/base"; import { stateName } from "../../utils"; -const currentDate = new Date().toISOString(); -const programName = `automated test - ${currentDate}`; -const newName = `Edited: ${programName}`; +let currentDate = ""; +let programName = ""; +let newName = ""; + +test.beforeAll(async () => { + currentDate = new Date().toISOString(); + programName = `automated test - ${currentDate}`; + newName = `Edited: ${programName}`; +}); test.describe( "MCPAR Dashboard Page - Program Creation/Editing/Archiving", @@ -38,32 +44,36 @@ test.describe( await expect( stateMCPARDashboardPage.table.getByRole("row", { name: newName }) ).toBeVisible(); - }); - } -); -test.describe("Admin Archiving", () => { - test("Admin users can archive/unarchive reports", async ({ - adminHomePage, - }) => { - await adminHomePage.goto(); - await adminHomePage.isReady(); - await adminHomePage.selectMCPAR(stateName); - }); -}); - -test.describe("State users can't see archived programs", () => { - test("State users can't see archived programs", async ({ - adminHomePage, - stateMCPARDashboardPage, - }) => { - await stateMCPARDashboardPage.goto(); - await stateMCPARDashboardPage.isReady(); + await stateMCPARDashboardPage.logOut(); + }); - await stateMCPARDashboardPage.logOut(); + test("Admin users can archive/unarchive reports", async ({ + adminHomePage, + }) => { + await adminHomePage.goto(); + await adminHomePage.isReady(); + await adminHomePage.selectMCPAR(stateName); + await adminHomePage.table.isVisible(); + await expect( + adminHomePage.table.getByRole("row", { name: newName }) + ).toBeVisible(); + await adminHomePage.archiveMCPAR(newName); + await adminHomePage.unarchiveMCPAR(newName); + await adminHomePage.archiveMCPAR(newName); + await adminHomePage.logOut(); + }); - await adminHomePage.goto(); - await adminHomePage.isReady(); - await adminHomePage.selectMCPAR(stateName); - }); -}); + test("State users can't see archived programs", async ({ + stateMCPARDashboardPage, + }) => { + await stateMCPARDashboardPage.goto(); + await stateMCPARDashboardPage.isReady(); + await stateMCPARDashboardPage.table.isVisible(); + await expect( + stateMCPARDashboardPage.table.getByRole("row", { name: newName }) + ).not.toBeVisible(); + await stateMCPARDashboardPage.logOut(); + }); + } +); diff --git a/tests/playwright/utils/consts.ts b/tests/playwright/utils/consts.ts index 9c65c6465..11cfdfa18 100644 --- a/tests/playwright/utils/consts.ts +++ b/tests/playwright/utils/consts.ts @@ -3,8 +3,8 @@ export const adminPassword = process.env.TEST_ADMIN_USER_PASSWORD!; // pragma: a export const stateUser = process.env.TEST_STATE_USER_EMAIL!; export const statePassword = process.env.TEST_STATE_USER_PASSWORD!; // pragma: allowlist secret -export const stateAbbreviation = process.env.TEST_STATE || "MN"; -export const stateName = process.env.TEST_STATE_NAME || "Minnesota"; +export const stateAbbreviation = process.env.TEST_STATE || "DC"; +export const stateName = process.env.TEST_STATE_NAME || "District of Columbia"; export const currentYear: number = new Date().getFullYear(); diff --git a/tests/playwright/utils/pageObjects/adminHome.page.ts b/tests/playwright/utils/pageObjects/adminHome.page.ts index e57b4f25e..9c45b0f72 100644 --- a/tests/playwright/utils/pageObjects/adminHome.page.ts +++ b/tests/playwright/utils/pageObjects/adminHome.page.ts @@ -8,6 +8,7 @@ export default class AdminHomePage extends BasePage { readonly page: Page; readonly title: Locator; readonly dropdown: Locator; + readonly table: Locator; constructor(page: Page) { super(page); @@ -18,6 +19,7 @@ export default class AdminHomePage extends BasePage { this.dropdown = page.getByRole("combobox", { name: "List of states, including District of Columbia and Puerto Rico", }); + this.table = page.getByRole("table"); } public async selectMCPAR(state: string) { @@ -56,6 +58,7 @@ export default class AdminHomePage extends BasePage { name: "Go to Report Dashboard", }) .click(); + await this.page.waitForResponse((response) => response.status() == 200); } public async archiveExistingReports(reportType: string, state: string) { @@ -65,4 +68,22 @@ export default class AdminHomePage extends BasePage { } } } + + public async archiveMCPAR(programName: string) { + await this.table.isVisible(); + const row = this.table.getByRole("row", { name: programName }); + await row.getByRole("button", { name: "Archive" }).click(); + await this.page.waitForResponse((response) => response.status() == 200); + await row.getByRole("button", { name: "Archive" }).isHidden(); + await row.getByRole("button", { name: "Unarchive" }).isVisible(); + } + + public async unarchiveMCPAR(programName: string) { + await this.table.isVisible(); + const row = this.table.getByRole("row", { name: programName }); + await row.getByRole("button", { name: "Unarchive" }).click(); + await this.page.waitForResponse((response) => response.status() == 200); + await row.getByRole("button", { name: "Unarchive" }).isHidden(); + await row.getByRole("button", { name: "Archive" }).isVisible(); + } } From 9e623d625e10289e7bfaf66917b37cc4b34729f8 Mon Sep 17 00:00:00 2001 From: Bangbay Siboliban Date: Thu, 5 Dec 2024 21:12:09 -0800 Subject: [PATCH 5/8] Trim unnecessary lines --- .../playwright/pages/mcpar/dashboard.spec.ts | 54 +++++++++---------- tests/playwright/utils/fixtures/base.ts | 16 +++--- .../utils/pageObjects/adminHome.page.ts | 23 ++++---- .../playwright/utils/pageObjects/base.page.ts | 4 -- .../utils/pageObjects/mcpar/dashboard.page.ts | 18 ++++--- 5 files changed, 53 insertions(+), 62 deletions(-) diff --git a/tests/playwright/pages/mcpar/dashboard.spec.ts b/tests/playwright/pages/mcpar/dashboard.spec.ts index aa9f8faa7..df540ed65 100644 --- a/tests/playwright/pages/mcpar/dashboard.spec.ts +++ b/tests/playwright/pages/mcpar/dashboard.spec.ts @@ -15,8 +15,8 @@ test.describe( "MCPAR Dashboard Page - Program Creation/Editing/Archiving", () => { test("State users can create and edit reports", async ({ - stateMCPARDashboardPage, - stateMCPARGetStartedPage, + mcparDashboardPage, + mcparGetStartedPage, stateHomePage, }) => { await stateHomePage.goto(); @@ -26,54 +26,48 @@ test.describe( await stateHomePage.mcparButton.click(); await stateHomePage.redirectPage("/mcpar/get-started"); - await expect(stateMCPARGetStartedPage.mcparButton).toBeVisible(); - await stateMCPARGetStartedPage.mcparButton.click(); - await stateMCPARGetStartedPage.redirectPage("/mcpar"); + await expect(mcparGetStartedPage.mcparButton).toBeVisible(); + await mcparGetStartedPage.mcparButton.click(); + await mcparGetStartedPage.redirectPage("/mcpar"); // Create MCPAR - await stateMCPARDashboardPage.createMCPAR(programName); + await mcparDashboardPage.create(programName); await expect( - stateMCPARDashboardPage.table.getByRole("row", { name: programName }) + mcparDashboardPage.table.getByRole("row", { name: programName }) ).toBeVisible(); + await expect( + mcparDashboardPage.table.getByRole("row", { name: newName }) + ).not.toBeVisible(); - // Edit MCPAR - await stateMCPARDashboardPage.editProgram(programName, newName); + // Update MCPAR + await mcparDashboardPage.update(programName, newName); await expect( - stateMCPARDashboardPage.table.getByRole("row", { name: programName }) + mcparDashboardPage.table.getByRole("row", { name: programName }) ).not.toBeVisible(); await expect( - stateMCPARDashboardPage.table.getByRole("row", { name: newName }) + mcparDashboardPage.table.getByRole("row", { name: newName }) ).toBeVisible(); - - await stateMCPARDashboardPage.logOut(); }); test("Admin users can archive/unarchive reports", async ({ adminHomePage, }) => { - await adminHomePage.goto(); - await adminHomePage.isReady(); - await adminHomePage.selectMCPAR(stateName); - await adminHomePage.table.isVisible(); - await expect( - adminHomePage.table.getByRole("row", { name: newName }) - ).toBeVisible(); - await adminHomePage.archiveMCPAR(newName); - await adminHomePage.unarchiveMCPAR(newName); - await adminHomePage.archiveMCPAR(newName); - await adminHomePage.logOut(); + await adminHomePage.archiveMCPAR(newName, stateName); + await adminHomePage.unarchiveMCPAR(newName, stateName); }); test("State users can't see archived programs", async ({ - stateMCPARDashboardPage, + adminHomePage, + mcparDashboardPage, }) => { - await stateMCPARDashboardPage.goto(); - await stateMCPARDashboardPage.isReady(); - await stateMCPARDashboardPage.table.isVisible(); + await adminHomePage.archiveMCPAR(newName, stateName); + + await mcparDashboardPage.goto(); + await mcparDashboardPage.isReady(); + await mcparDashboardPage.table.isVisible(); await expect( - stateMCPARDashboardPage.table.getByRole("row", { name: newName }) + mcparDashboardPage.table.getByRole("row", { name: newName }) ).not.toBeVisible(); - await stateMCPARDashboardPage.logOut(); }); } ); diff --git a/tests/playwright/utils/fixtures/base.ts b/tests/playwright/utils/fixtures/base.ts index 4ffd1219a..2bfd969b6 100644 --- a/tests/playwright/utils/fixtures/base.ts +++ b/tests/playwright/utils/fixtures/base.ts @@ -14,9 +14,9 @@ type CustomFixtures = { adminHomePage: AdminHomePage; bannerPage: BannerPage; profilePage: ProfilePage; + mcparGetStartedPage: MCPARGetStartedPage; + mcparDashboardPage: MCPARDashboardPage; stateHomePage: StateHomePage; - stateMCPARDashboardPage: MCPARDashboardPage; - stateMCPARGetStartedPage: MCPARGetStartedPage; }; async function addPageObject( @@ -48,18 +48,18 @@ export const baseTest = base.extend({ bannerPage: async ({ browser }, use) => { await adminPage(BannerPage, browser, use); }, + mcparDashboardPage: async ({ browser }, use) => { + await statePage(MCPARDashboardPage, browser, use); + }, + mcparGetStartedPage: async ({ browser }, use) => { + await statePage(MCPARGetStartedPage, browser, use); + }, profilePage: async ({ browser }, use) => { await statePage(ProfilePage, browser, use); }, stateHomePage: async ({ browser }, use) => { await statePage(StateHomePage, browser, use); }, - stateMCPARDashboardPage: async ({ browser }, use) => { - await statePage(MCPARDashboardPage, browser, use); - }, - stateMCPARGetStartedPage: async ({ browser }, use) => { - await statePage(MCPARGetStartedPage, browser, use); - }, }); export const test = mergeTests(baseTest); diff --git a/tests/playwright/utils/pageObjects/adminHome.page.ts b/tests/playwright/utils/pageObjects/adminHome.page.ts index 9c45b0f72..10719eb80 100644 --- a/tests/playwright/utils/pageObjects/adminHome.page.ts +++ b/tests/playwright/utils/pageObjects/adminHome.page.ts @@ -1,6 +1,5 @@ import { Locator, Page } from "@playwright/test"; import BasePage from "./base.page"; -import { ReportType } from "../../../../services/ui-src/src/types"; export default class AdminHomePage extends BasePage { public path = "/"; @@ -61,16 +60,12 @@ export default class AdminHomePage extends BasePage { await this.page.waitForResponse((response) => response.status() == 200); } - public async archiveExistingReports(reportType: string, state: string) { - switch (reportType) { - case ReportType.MCPAR: { - this.selectMCPAR(state); - } - } - } - - public async archiveMCPAR(programName: string) { + public async archiveMCPAR(programName: string, stateName: string) { + await this.goto(); + await this.isReady(); + await this.selectMCPAR(stateName); await this.table.isVisible(); + const row = this.table.getByRole("row", { name: programName }); await row.getByRole("button", { name: "Archive" }).click(); await this.page.waitForResponse((response) => response.status() == 200); @@ -78,12 +73,16 @@ export default class AdminHomePage extends BasePage { await row.getByRole("button", { name: "Unarchive" }).isVisible(); } - public async unarchiveMCPAR(programName: string) { + public async unarchiveMCPAR(programName: string, stateName: string) { + await this.goto(); + await this.isReady(); + await this.selectMCPAR(stateName); await this.table.isVisible(); + const row = this.table.getByRole("row", { name: programName }); await row.getByRole("button", { name: "Unarchive" }).click(); await this.page.waitForResponse((response) => response.status() == 200); - await row.getByRole("button", { name: "Unarchive" }).isHidden(); await row.getByRole("button", { name: "Archive" }).isVisible(); + await row.getByRole("button", { name: "Unarchive" }).isHidden(); } } diff --git a/tests/playwright/utils/pageObjects/base.page.ts b/tests/playwright/utils/pageObjects/base.page.ts index 8f2d36492..eb1bb0ed2 100644 --- a/tests/playwright/utils/pageObjects/base.page.ts +++ b/tests/playwright/utils/pageObjects/base.page.ts @@ -40,10 +40,6 @@ export default class BasePage { await this.page.waitForURL(url); } - public async getByRole(role: any, options?: any) { - return this.page.getByRole(role, options); - } - public async isReady() { await this.title.isVisible(); return expect(this.page).toHaveURL(this.path); diff --git a/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts b/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts index e0348da8e..ec6822bb2 100644 --- a/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts +++ b/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts @@ -6,9 +6,10 @@ export default class MCPARDashboardPage extends BasePage { readonly page: Page; readonly addCopyButton: Locator; - readonly saveButton: Locator; - readonly modal: Locator; readonly table: Locator; + readonly modal: Locator; + readonly programNameInput: Locator; + readonly saveButton: Locator; constructor(page: Page) { super(page); @@ -18,21 +19,22 @@ export default class MCPARDashboardPage extends BasePage { }); this.table = page.getByRole("table"); this.modal = page.getByRole("dialog"); + this.programNameInput = this.modal.getByLabel( + "Program name (for new MCPAR)" + ); this.saveButton = this.modal.getByRole("button", { name: "Save", }); } - public async createMCPAR(programName: string) { + public async create(programName: string) { await this.addCopyButton.isVisible(); await this.addCopyButton.click(); await this.modal.isVisible(); await this.modal .getByRole("heading", { name: "Add / Copy a MCPAR" }) .isVisible(); - await this.modal - .getByLabel("Program name (for new MCPAR)") - .fill(programName); + await this.programNameInput.fill(programName); await this.modal .getByLabel("A.5a Reporting period (i.e. contract period) start date") .fill("10/10/2024"); @@ -49,7 +51,7 @@ export default class MCPARDashboardPage extends BasePage { await this.table.isVisible(); } - public async editProgram(currentName: string, newName: string) { + public async update(currentName: string, newName: string) { const row = this.page.getByRole("row", { name: currentName }); const editProgramButton = row.getByRole("button").first(); @@ -57,7 +59,7 @@ export default class MCPARDashboardPage extends BasePage { await editProgramButton.click(); await this.modal.isVisible(); await this.modal.getByRole("heading", { name: "Edit Program" }).isVisible(); - await this.modal.getByLabel("Program name (for new MCPAR)").fill(newName); + await this.programNameInput.fill(newName); await this.saveButton.click(); await this.page.waitForResponse((response) => response.status() == 200); await this.modal.isHidden(); From 4125780df35a159e2e32e8cbf3a7ec045a7421ae Mon Sep 17 00:00:00 2001 From: Bangbay Siboliban Date: Thu, 5 Dec 2024 21:28:48 -0800 Subject: [PATCH 6/8] Reorder params --- tests/playwright/pages/mcpar/dashboard.spec.ts | 18 +++++++++--------- .../utils/pageObjects/adminHome.page.ts | 4 ++-- .../utils/pageObjects/mcpar/dashboard.page.ts | 6 +++--- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/tests/playwright/pages/mcpar/dashboard.spec.ts b/tests/playwright/pages/mcpar/dashboard.spec.ts index df540ed65..0472d37a8 100644 --- a/tests/playwright/pages/mcpar/dashboard.spec.ts +++ b/tests/playwright/pages/mcpar/dashboard.spec.ts @@ -3,12 +3,12 @@ import { stateName } from "../../utils"; let currentDate = ""; let programName = ""; -let newName = ""; +let updatedProgramName = ""; test.beforeAll(async () => { currentDate = new Date().toISOString(); programName = `automated test - ${currentDate}`; - newName = `Edited: ${programName}`; + updatedProgramName = `Updated: ${programName}`; }); test.describe( @@ -36,37 +36,37 @@ test.describe( mcparDashboardPage.table.getByRole("row", { name: programName }) ).toBeVisible(); await expect( - mcparDashboardPage.table.getByRole("row", { name: newName }) + mcparDashboardPage.table.getByRole("row", { name: updatedProgramName }) ).not.toBeVisible(); // Update MCPAR - await mcparDashboardPage.update(programName, newName); + await mcparDashboardPage.update(programName, updatedProgramName); await expect( mcparDashboardPage.table.getByRole("row", { name: programName }) ).not.toBeVisible(); await expect( - mcparDashboardPage.table.getByRole("row", { name: newName }) + mcparDashboardPage.table.getByRole("row", { name: updatedProgramName }) ).toBeVisible(); }); test("Admin users can archive/unarchive reports", async ({ adminHomePage, }) => { - await adminHomePage.archiveMCPAR(newName, stateName); - await adminHomePage.unarchiveMCPAR(newName, stateName); + await adminHomePage.archiveMCPAR(stateName, updatedProgramName); + await adminHomePage.unarchiveMCPAR(stateName, updatedProgramName); }); test("State users can't see archived programs", async ({ adminHomePage, mcparDashboardPage, }) => { - await adminHomePage.archiveMCPAR(newName, stateName); + await adminHomePage.archiveMCPAR(stateName, updatedProgramName); await mcparDashboardPage.goto(); await mcparDashboardPage.isReady(); await mcparDashboardPage.table.isVisible(); await expect( - mcparDashboardPage.table.getByRole("row", { name: newName }) + mcparDashboardPage.table.getByRole("row", { name: updatedProgramName }) ).not.toBeVisible(); }); } diff --git a/tests/playwright/utils/pageObjects/adminHome.page.ts b/tests/playwright/utils/pageObjects/adminHome.page.ts index 10719eb80..86baab91f 100644 --- a/tests/playwright/utils/pageObjects/adminHome.page.ts +++ b/tests/playwright/utils/pageObjects/adminHome.page.ts @@ -60,7 +60,7 @@ export default class AdminHomePage extends BasePage { await this.page.waitForResponse((response) => response.status() == 200); } - public async archiveMCPAR(programName: string, stateName: string) { + public async archiveMCPAR(stateName: string, programName: string) { await this.goto(); await this.isReady(); await this.selectMCPAR(stateName); @@ -73,7 +73,7 @@ export default class AdminHomePage extends BasePage { await row.getByRole("button", { name: "Unarchive" }).isVisible(); } - public async unarchiveMCPAR(programName: string, stateName: string) { + public async unarchiveMCPAR(stateName: string, programName: string) { await this.goto(); await this.isReady(); await this.selectMCPAR(stateName); diff --git a/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts b/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts index ec6822bb2..0a87c3197 100644 --- a/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts +++ b/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts @@ -51,15 +51,15 @@ export default class MCPARDashboardPage extends BasePage { await this.table.isVisible(); } - public async update(currentName: string, newName: string) { - const row = this.page.getByRole("row", { name: currentName }); + public async update(programName: string, updatedProgramName: string) { + const row = this.page.getByRole("row", { name: programName }); const editProgramButton = row.getByRole("button").first(); await editProgramButton.isVisible(); await editProgramButton.click(); await this.modal.isVisible(); await this.modal.getByRole("heading", { name: "Edit Program" }).isVisible(); - await this.programNameInput.fill(newName); + await this.programNameInput.fill(updatedProgramName); await this.saveButton.click(); await this.page.waitForResponse((response) => response.status() == 200); await this.modal.isHidden(); From 9f7a7075815d7e7e88a7dcbde7abd88fdaf7fc78 Mon Sep 17 00:00:00 2001 From: Bangbay Siboliban Date: Fri, 6 Dec 2024 09:28:53 -0800 Subject: [PATCH 7/8] DRY --- .../playwright/pages/mcpar/dashboard.spec.ts | 29 +++++++++---------- .../utils/pageObjects/adminHome.page.ts | 25 +++++++++------- .../utils/pageObjects/mcpar/dashboard.page.ts | 7 +++-- 3 files changed, 32 insertions(+), 29 deletions(-) diff --git a/tests/playwright/pages/mcpar/dashboard.spec.ts b/tests/playwright/pages/mcpar/dashboard.spec.ts index 0472d37a8..59448d1d0 100644 --- a/tests/playwright/pages/mcpar/dashboard.spec.ts +++ b/tests/playwright/pages/mcpar/dashboard.spec.ts @@ -22,31 +22,30 @@ test.describe( await stateHomePage.goto(); await stateHomePage.isReady(); - await expect(stateHomePage.mcparButton).toBeVisible(); + await stateHomePage.mcparButton.isVisible(); await stateHomePage.mcparButton.click(); await stateHomePage.redirectPage("/mcpar/get-started"); - await expect(mcparGetStartedPage.mcparButton).toBeVisible(); + await mcparGetStartedPage.mcparButton.isVisible(); await mcparGetStartedPage.mcparButton.click(); await mcparGetStartedPage.redirectPage("/mcpar"); + const originalRow = mcparDashboardPage.table.getByRole("row", { + name: programName, + }); + const updatedRow = mcparDashboardPage.table.getByRole("row", { + name: updatedProgramName, + }); + // Create MCPAR await mcparDashboardPage.create(programName); - await expect( - mcparDashboardPage.table.getByRole("row", { name: programName }) - ).toBeVisible(); - await expect( - mcparDashboardPage.table.getByRole("row", { name: updatedProgramName }) - ).not.toBeVisible(); + await expect(originalRow).toBeVisible(); + await expect(updatedRow).toBeHidden(); // Update MCPAR await mcparDashboardPage.update(programName, updatedProgramName); - await expect( - mcparDashboardPage.table.getByRole("row", { name: programName }) - ).not.toBeVisible(); - await expect( - mcparDashboardPage.table.getByRole("row", { name: updatedProgramName }) - ).toBeVisible(); + await expect(originalRow).toBeHidden(); + await expect(updatedRow).toBeVisible(); }); test("Admin users can archive/unarchive reports", async ({ @@ -67,7 +66,7 @@ test.describe( await mcparDashboardPage.table.isVisible(); await expect( mcparDashboardPage.table.getByRole("row", { name: updatedProgramName }) - ).not.toBeVisible(); + ).toBeHidden(); }); } ); diff --git a/tests/playwright/utils/pageObjects/adminHome.page.ts b/tests/playwright/utils/pageObjects/adminHome.page.ts index 86baab91f..da6d9e473 100644 --- a/tests/playwright/utils/pageObjects/adminHome.page.ts +++ b/tests/playwright/utils/pageObjects/adminHome.page.ts @@ -60,29 +60,32 @@ export default class AdminHomePage extends BasePage { await this.page.waitForResponse((response) => response.status() == 200); } - public async archiveMCPAR(stateName: string, programName: string) { + public async getRowMCPAR(stateName: string, programName: string) { await this.goto(); await this.isReady(); await this.selectMCPAR(stateName); await this.table.isVisible(); - const row = this.table.getByRole("row", { name: programName }); - await row.getByRole("button", { name: "Archive" }).click(); + return this.table.getByRole("row", { name: programName }); + } + + public async archiveMCPAR(stateName: string, programName: string) { + const row = await this.getRowMCPAR(stateName, programName); + const archiveButton = row.getByRole("button", { name: "Archive" }); + + await archiveButton.click(); await this.page.waitForResponse((response) => response.status() == 200); - await row.getByRole("button", { name: "Archive" }).isHidden(); + await archiveButton.isHidden(); await row.getByRole("button", { name: "Unarchive" }).isVisible(); } public async unarchiveMCPAR(stateName: string, programName: string) { - await this.goto(); - await this.isReady(); - await this.selectMCPAR(stateName); - await this.table.isVisible(); + const row = await this.getRowMCPAR(stateName, programName); + const unarchiveButton = row.getByRole("button", { name: "Unarchive" }); - const row = this.table.getByRole("row", { name: programName }); - await row.getByRole("button", { name: "Unarchive" }).click(); + await unarchiveButton.click(); await this.page.waitForResponse((response) => response.status() == 200); await row.getByRole("button", { name: "Archive" }).isVisible(); - await row.getByRole("button", { name: "Unarchive" }).isHidden(); + await unarchiveButton.isHidden(); } } diff --git a/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts b/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts index 0a87c3197..049462168 100644 --- a/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts +++ b/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts @@ -30,6 +30,7 @@ export default class MCPARDashboardPage extends BasePage { public async create(programName: string) { await this.addCopyButton.isVisible(); await this.addCopyButton.click(); + await this.modal.isVisible(); await this.modal .getByRole("heading", { name: "Add / Copy a MCPAR" }) @@ -46,7 +47,7 @@ export default class MCPARDashboardPage extends BasePage { .click({ force: true }); await this.modal.getByLabel("No").click({ force: true }); await this.saveButton.click(); - await this.page.waitForResponse((response) => response.status() == 200); + await this.modal.isHidden(); await this.table.isVisible(); } @@ -54,14 +55,14 @@ export default class MCPARDashboardPage extends BasePage { public async update(programName: string, updatedProgramName: string) { const row = this.page.getByRole("row", { name: programName }); const editProgramButton = row.getByRole("button").first(); - await editProgramButton.isVisible(); await editProgramButton.click(); + await this.modal.isVisible(); await this.modal.getByRole("heading", { name: "Edit Program" }).isVisible(); await this.programNameInput.fill(updatedProgramName); await this.saveButton.click(); - await this.page.waitForResponse((response) => response.status() == 200); + await this.modal.isHidden(); await this.table.isVisible(); } From 80533e96ab2c0b6021d10552adfe43a5e6227ee9 Mon Sep 17 00:00:00 2001 From: Bangbay Siboliban Date: Fri, 6 Dec 2024 10:04:05 -0800 Subject: [PATCH 8/8] Remove force --- tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts b/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts index 049462168..df7050732 100644 --- a/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts +++ b/tests/playwright/utils/pageObjects/mcpar/dashboard.page.ts @@ -42,10 +42,8 @@ export default class MCPARDashboardPage extends BasePage { await this.modal .getByLabel("A.5b Reporting period (i.e. contract period) end date") .fill("12/10/2024"); - await this.modal - .getByLabel("Exclusion of CHIP from MCPAR") - .click({ force: true }); - await this.modal.getByLabel("No").click({ force: true }); + await this.modal.getByLabel("Exclusion of CHIP from MCPAR").click(); + await this.modal.getByLabel("No").click(); await this.saveButton.click(); await this.modal.isHidden();