diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c296cefc0..d5c1f8f1e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -277,6 +277,8 @@ jobs: needs: - deploy - register-runner + - e2e-test + - a11y-tests if: ${{ always() && !cancelled() && needs.deploy.result == 'success' && github.ref_name != 'production' }} timeout-minutes: 60 runs-on: ubuntu-latest diff --git a/playwright.config.ts b/playwright.config.ts index b7a101826..7675f651d 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -14,7 +14,7 @@ export default defineConfig({ testDir: "./tests/e2e", testMatch: ["**/*.spec.js", "**/*.spec.ts"], /* Run tests in files in parallel */ - fullyParallel: true, + fullyParallel: false, /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, /* Retry on CI only */ @@ -47,7 +47,7 @@ export default defineConfig({ webServer: { command: process.env.CI ? "" : "./run local", url: process.env.BASE_URL || "http://localhost:3000", - reuseExistingServer: process.env.CI || false, + reuseExistingServer: !!process.env.CI, stdout: "pipe", }, }); diff --git a/services/ui-src/src/verbiage/pages/home.ts b/services/ui-src/src/verbiage/pages/home.ts index 19d3d6bb4..c034f2a5c 100644 --- a/services/ui-src/src/verbiage/pages/home.ts +++ b/services/ui-src/src/verbiage/pages/home.ts @@ -55,7 +55,7 @@ export default { downloadText: "User Guide and Help File", link: { text: "Enter SAR online", - route: "sar/", + route: "sar", }, accordion: { buttonLabel: "When is the MFP SAR due?", diff --git a/tests/e2e/pages/home.spec.ts b/tests/e2e/pages/home.spec.ts index dd9fd7504..7a8611262 100644 --- a/tests/e2e/pages/home.spec.ts +++ b/tests/e2e/pages/home.spec.ts @@ -1,25 +1,25 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "../utils/fixtures/base"; import { logInStateUser, logInAdminUser, e2eA11y } from "../helpers"; -test("Should see the correct home page as a state user", async ({ page }) => { +test("Should see the correct home page as a state user", async ({ + page, + stateHomePage, +}) => { + await page.goto("/"); await logInStateUser(page); - - await expect( - page.getByRole("button", { name: "Enter Work Plan online" }) - ).toBeVisible(); - await expect( - page.getByRole("button", { name: "Enter SAR online" }) - ).toBeVisible(); + await stateHomePage.isReady(); + await expect(stateHomePage.wpButton).toBeVisible(); + await expect(stateHomePage.sarButton).toBeVisible(); }); -test("Should see the correct home page as an admin user", async ({ page }) => { +test("Should see the correct home page as an admin user", async ({ + page, + adminHomePage, +}) => { + await page.goto("/"); await logInAdminUser(page); - - await expect( - page.getByRole("combobox", { - name: "List of states, including District of Columbia and Puerto Rico", - }) - ).toBeVisible(); + await adminHomePage.isReady(); + await expect(adminHomePage.dropdown).toBeVisible(); }); test("Is accessible on all device types for state user", async ({ page }) => { diff --git a/tests/e2e/sar/create.spec.ts b/tests/e2e/sar/create.spec.ts index ea83769d5..10c43b8aa 100644 --- a/tests/e2e/sar/create.spec.ts +++ b/tests/e2e/sar/create.spec.ts @@ -1,56 +1,47 @@ -import { expect, test } from "@playwright/test"; +import { test, expect } from "../utils/fixtures/base"; import { currentYear } from "../../seeds/helpers"; import { archiveExistingWPs, firstPeriod, logInStateUser, - stateAbbreviation, stateName, } from "../helpers"; -// TODO: Unskip -test.skip("State user can create a SAR", async ({ page }) => { +test.skip("State user can create a SAR", async ({ + page, + stateHomePage, + sarDashboard, +}) => { await archiveExistingWPs(page); - await logInStateUser(page); // TODO: Seed WP // View SARs - await page.getByRole("button", { name: "Enter SAR online" }).click(); - await expect(page).toHaveURL("/sar/"); - await page.waitForResponse(`**/reports/SAR/${stateAbbreviation}`); + await logInStateUser(page); + await stateHomePage.sarButton.click(); // Create SAR - await page - .getByRole("button", { - name: "Add new MFP SAR submission", - }) - .click(); - - const modal = page.getByRole("dialog"); - await expect(modal).toBeVisible(); - await expect(modal).toContainText("Add new MFP SAR submission"); - await expect( - page.getByRole("textbox", { name: "Associated MFP Work Plan" }) - ).toHaveValue( + await sarDashboard.isReady(); + await sarDashboard.createButton.click(); + await expect(sarDashboard.modal).toBeVisible(); + await expect(sarDashboard.modal).toContainText("Add new MFP SAR submission"); + await expect(sarDashboard.associatedWP).toHaveValue( `${stateName} MFP Work Plan ${currentYear} - Period ${firstPeriod}` ); - await page.getByRole("radio", { name: "No" }).click(); - await page.getByRole("button", { name: "Save" }).click(); + await sarDashboard.createNewSAR(); // Confirm created SAR is in table - await expect(page.getByRole("table")).toBeVisible(); - - const row = page - .getByRole("row", { - name: `${stateName} MFP SAR ${currentYear} - Period ${firstPeriod}`, - }) - .first(); + await expect(sarDashboard.firstReport).toBeVisible(); - const editIcon = row.getByRole("button", { name: "Edit Report" }); + const editIcon = sarDashboard.firstReport.getByRole("button", { + name: "Edit Report", + }); await expect(editIcon).toBeVisible(); - const editButton = row.getByRole("button", { name: "Edit", exact: true }); + const editButton = sarDashboard.firstReport.getByRole("button", { + name: "Edit", + exact: true, + }); await expect(editButton).toBeVisible(); }); diff --git a/tests/e2e/utils/fixtures/base.ts b/tests/e2e/utils/fixtures/base.ts new file mode 100644 index 000000000..a43040db0 --- /dev/null +++ b/tests/e2e/utils/fixtures/base.ts @@ -0,0 +1,23 @@ +import { mergeTests, test as base } from "@playwright/test"; +import { test as sarTest } from "./sar.ts"; +import { test as wpTest } from "./wp.ts"; +import StateHomePage from "../pageObjects/stateHome.page"; +import AdminHomePage from "../pageObjects/adminHome.page"; + +type CustomFixtures = { + stateHomePage: StateHomePage; + adminHomePage: AdminHomePage; +}; + +export const baseTest = base.extend({ + stateHomePage: async ({ page }, use) => { + await use(new StateHomePage(page)); + }, + adminHomePage: async ({ page }, use) => { + await use(new AdminHomePage(page)); + }, +}); + +export const test = mergeTests(baseTest, sarTest, wpTest); + +export { expect } from "@playwright/test"; diff --git a/tests/e2e/utils/fixtures/sar.ts b/tests/e2e/utils/fixtures/sar.ts new file mode 100644 index 000000000..22f21b8ba --- /dev/null +++ b/tests/e2e/utils/fixtures/sar.ts @@ -0,0 +1,12 @@ +import { test as base } from "@playwright/test"; +import { SARDashboardPage } from "../pageObjects/sar/sarDashboard.page"; + +type SARFixtures = { + sarDashboard: SARDashboardPage; +}; + +export const test = base.extend({ + sarDashboard: async ({ page }, use) => { + await use(new SARDashboardPage(page)); + }, +}); diff --git a/tests/e2e/utils/fixtures/wp.ts b/tests/e2e/utils/fixtures/wp.ts new file mode 100644 index 000000000..de095ca54 --- /dev/null +++ b/tests/e2e/utils/fixtures/wp.ts @@ -0,0 +1,22 @@ +import { test as base } from "@playwright/test"; +import { WPDashboardPage } from "../pageObjects/wp/wpDashboard.page"; +import { WPGeneralInformationPage } from "../pageObjects/wp/wpGeneral.page"; +import { WPReviewAndSubmitPage } from "../pageObjects/wp/wpReviewAndSubmit.page"; + +type WPFixtures = { + wpDashboard: WPDashboardPage; + wpGeneralInformation: WPGeneralInformationPage; + wpReviewAndSubmit: WPReviewAndSubmitPage; +}; + +export const test = base.extend({ + wpDashboard: async ({ page }, use) => { + await use(new WPDashboardPage(page)); + }, + wpGeneralInformation: async ({ page }, use) => { + await use(new WPGeneralInformationPage(page)); + }, + wpReviewAndSubmit: async ({ page }, use) => { + await use(new WPReviewAndSubmitPage(page)); + }, +}); diff --git a/tests/e2e/utils/pageObjects/adminHome.page.ts b/tests/e2e/utils/pageObjects/adminHome.page.ts new file mode 100644 index 000000000..bc661873c --- /dev/null +++ b/tests/e2e/utils/pageObjects/adminHome.page.ts @@ -0,0 +1,41 @@ +import { Locator, Page } from "@playwright/test"; +import BasePage from "./base.page"; + +export default class AdminHomePage extends BasePage { + public path = "/"; + + readonly page: Page; + readonly title: Locator; + readonly dropdown: Locator; + + constructor(page: Page) { + super(page); + this.page = page; + this.title = page.getByRole("heading", { + name: "View State/Territory Reports", + }); + this.dropdown = page.getByRole("combobox", { + name: "List of states, including District of Columbia and Puerto Rico", + }); + } + + public async selectWP() { + await this.page.getByRole("radio", { name: "MFP Work Plan" }).click(); + } + + public async selectSAR() { + await this.page + .getByRole("radio", { + name: "MFP Semi-Annual Progress Report (SAR)", + }) + .click(); + } + + public async goToDashboard() { + await this.page + .getByRole("button", { + name: "Go to Report Dashboard", + }) + .click(); + } +} diff --git a/tests/e2e/utils/pageObjects/base.page.ts b/tests/e2e/utils/pageObjects/base.page.ts new file mode 100644 index 000000000..728f34b50 --- /dev/null +++ b/tests/e2e/utils/pageObjects/base.page.ts @@ -0,0 +1,28 @@ +import { expect, Locator, Page } from "@playwright/test"; + +export default class BasePage { + public path = "/"; + + readonly page: Page; + readonly title: Locator; + readonly continueButton: Locator; + readonly previousButton: Locator; + + constructor(page: Page) { + this.page = page; + this.title = page.getByRole("heading", { + name: "Money Follows the Person", + }); + this.continueButton = page.getByRole("button", { name: "Continue" }); + this.previousButton = page.getByRole("button", { name: "Previous" }); + } + + public async goto() { + await this.page.goto(this.path); + } + + public async isReady() { + await this.title.isVisible(); + return expect(this.page).toHaveURL(this.path); + } +} diff --git a/tests/e2e/utils/pageObjects/sar/sarDashboard.page.ts b/tests/e2e/utils/pageObjects/sar/sarDashboard.page.ts new file mode 100644 index 000000000..cc486c9e0 --- /dev/null +++ b/tests/e2e/utils/pageObjects/sar/sarDashboard.page.ts @@ -0,0 +1,56 @@ +import { Locator, Page } from "@playwright/test"; +import BasePage from "../base.page"; +import { firstPeriod, stateAbbreviation, stateName } from "../../../helpers"; +import { currentYear } from "../../../../seeds/helpers"; + +export class SARDashboardPage extends BasePage { + public path = "/sar"; + + readonly page: Page; + readonly title: Locator; + readonly createButton: Locator; + readonly modal: Locator; + readonly associatedWP: Locator; + readonly firstReport: Locator; + + constructor(page: Page) { + super(page); + this.page = page; + this.title = this.page.getByRole("heading", { + name: `${stateName} MFP Semi-Annual Progress Report (SAR)`, + }); + this.createButton = this.page.getByRole("button", { + name: "Add new MFP SAR submission", + }); + this.modal = this.page.getByRole("dialog"); + this.associatedWP = this.modal.getByRole("textbox", { + name: "Associated MFP Work Plan", + }); + this.firstReport = this.page + .getByRole("row", { + name: `${stateName} MFP SAR ${currentYear} - Period ${firstPeriod}`, + }) + .first(); + } + + public async reportsReady() { + await this.getReports(); + await this.page.getByRole("rowheader", { name: "Submission name" }); + } + + public async getReports() { + await this.page.waitForResponse( + (response) => + response.url().includes(`/reports/SAR/${stateAbbreviation}`) && + response.status() == 200 + ); + } + + public async createNewSAR() { + const noRadio = this.modal.getByRole("radio", { name: "No" }); + const saveButton = this.modal.getByRole("button", { name: "Save" }); + + await noRadio.click(); + await saveButton.click(); + } +} diff --git a/tests/e2e/utils/pageObjects/stateHome.page.ts b/tests/e2e/utils/pageObjects/stateHome.page.ts new file mode 100644 index 000000000..13cf258d4 --- /dev/null +++ b/tests/e2e/utils/pageObjects/stateHome.page.ts @@ -0,0 +1,23 @@ +import { Locator, Page } from "@playwright/test"; +import BasePage from "./base.page"; + +export default class StateHomePage extends BasePage { + public path = "/"; + + readonly page: Page; + readonly title: Locator; + readonly wpButton: Locator; + readonly sarButton: Locator; + + constructor(page: Page) { + super(page); + this.page = page; + this.title = page.getByRole("heading", { + name: "Money Follows the Person (MFP) Portal", + }); + this.wpButton = page.getByRole("button", { + name: "Enter Work Plan online", + }); + this.sarButton = page.getByRole("button", { name: "Enter SAR online" }); + } +} diff --git a/tests/e2e/utils/pageObjects/wp/wpDashboard.page.ts b/tests/e2e/utils/pageObjects/wp/wpDashboard.page.ts new file mode 100644 index 000000000..2b3a221be --- /dev/null +++ b/tests/e2e/utils/pageObjects/wp/wpDashboard.page.ts @@ -0,0 +1,70 @@ +import { Locator, Page } from "@playwright/test"; +import BasePage from "../base.page"; +import { + firstPeriod, + secondPeriod, + stateAbbreviation, + stateName, +} from "../../../helpers"; +import { currentYear } from "../../../../seeds/helpers"; + +export class WPDashboardPage extends BasePage { + public path = "/wp"; + + readonly page: Page; + readonly title: Locator; + readonly createButton: Locator; + readonly copyoverButton: Locator; + readonly modal: Locator; + readonly firstReport: Locator; + readonly copiedReport: Locator; + readonly submittedReport: Locator; + + constructor(page: Page) { + super(page); + this.page = page; + this.title = this.page.getByRole("heading", { + name: `${stateName} MFP Work Plan`, + }); + this.createButton = this.page.getByRole("button", { + name: "Start MFP Work Plan", + }); + this.copyoverButton = this.page.getByRole("button", { + name: "Continue MFP Work Plan for next Period", + }); + this.modal = this.page.getByRole("dialog"); + + this.firstReport = this.page + .getByRole("row", { + name: `${stateName} MFP Work Plan ${currentYear} - Period ${firstPeriod}`, + }) + .first(); + this.copiedReport = this.page.getByRole("row", { + name: `${stateName} MFP Work Plan ${currentYear} - Period ${secondPeriod}`, + }); + this.submittedReport = this.page + .getByRole("row", { name: "Submitted" }) + .last(); + } + + public async reportsReady() { + await this.getReports(); + await this.page.getByRole("rowheader", { name: "Submission name" }); + } + + public async getReports() { + await this.page.waitForResponse( + (response) => + response.url().includes(`/reports/WP/${stateAbbreviation}`) && + response.status() == 200 + ); + } + + public async createNewWP() { + await this.modal.getByLabel(`${currentYear}`).click(); + await this.modal + .getByLabel(`First reporting period (January 1 - June 30)`) + .click(); + await this.modal.getByRole("button", { name: "Start new" }).click(); + } +} diff --git a/tests/e2e/utils/pageObjects/wp/wpGeneral.page.ts b/tests/e2e/utils/pageObjects/wp/wpGeneral.page.ts new file mode 100644 index 000000000..8913082c9 --- /dev/null +++ b/tests/e2e/utils/pageObjects/wp/wpGeneral.page.ts @@ -0,0 +1,17 @@ +import { Locator, Page } from "@playwright/test"; +import BasePage from "../base.page"; + +export class WPGeneralInformationPage extends BasePage { + public path = "/wp/general-information"; + + readonly page: Page; + readonly title: Locator; + readonly disclosure: Locator; + + constructor(page: Page) { + super(page); + this.page = page; + this.title = page.getByRole("heading", { name: "General Information" }); + this.disclosure = page.getByText("PRA Disclosure Statement"); + } +} diff --git a/tests/e2e/utils/pageObjects/wp/wpReviewAndSubmit.page.ts b/tests/e2e/utils/pageObjects/wp/wpReviewAndSubmit.page.ts new file mode 100644 index 000000000..fef6afe62 --- /dev/null +++ b/tests/e2e/utils/pageObjects/wp/wpReviewAndSubmit.page.ts @@ -0,0 +1,31 @@ +import { Locator, Page } from "@playwright/test"; +import BasePage from "../base.page"; + +export class WPReviewAndSubmitPage extends BasePage { + public path = "/wp/review-and-submit"; + + readonly page: Page; + readonly title: Locator; + readonly reviewPDFButton: Locator; + readonly submitButton: Locator; + readonly approveButton: Locator; + readonly unlockButton: Locator; + readonly approveModal: Locator; + + constructor(page: Page) { + super(page); + this.page = page; + this.title = page.getByRole("heading", { name: "Review & Submit" }); + this.reviewPDFButton = page.getByRole("button", { name: "Review PDF" }); + this.approveButton = page.getByRole("button", { name: "Approve" }); + this.unlockButton = page.getByRole("button", { name: "Unlock" }); + this.approveModal = page.getByRole("dialog", { + name: "Are you sure you want to approve this MFP Work Plan?", + }); + } + + public async approveReport() { + await this.approveModal.getByRole("textbox").fill("APPROVE"); + await this.approveModal.getByRole("button", { name: "Approve" }).click(); + } +} diff --git a/tests/e2e/wp/approve.spec.ts b/tests/e2e/wp/approve.spec.ts index 8685ae756..46b9df10c 100644 --- a/tests/e2e/wp/approve.spec.ts +++ b/tests/e2e/wp/approve.spec.ts @@ -1,54 +1,55 @@ -import { expect, test } from "@playwright/test"; +import { test, expect } from "../utils/fixtures/base"; import { archiveExistingWPs, logInAdminUser, stateAbbreviation, } from "../helpers"; -// TODO: Unskip -test.skip("Admin user can approve a Work Plan submission", async ({ page }) => { +test.skip("Admin user can approve a Work Plan submission", async ({ + page, + adminHomePage, + wpDashboard, + wpGeneralInformation, + wpReviewAndSubmit, +}) => { await archiveExistingWPs(page); await logInAdminUser(page); // TODO: Seed WP // View WPs - await page - .getByRole("combobox", { - name: "List of states, including District of Columbia and Puerto Rico", - }) - .selectOption(stateAbbreviation); - await page.getByRole("radio", { name: "MFP Work Plan" }).click(); - await page.getByRole("button", { name: "Go to Report Dashboard" }).click(); - await expect(page).toHaveURL("/wp"); - await page.waitForResponse(`**/reports/WP/${stateAbbreviation}`); + await adminHomePage.dropdown.selectOption(stateAbbreviation); + await adminHomePage.selectWP(); + await adminHomePage.goToDashboard(); // View submitted WP - await expect(page.getByRole("table")).toBeVisible(); + await wpDashboard.isReady(); + await wpDashboard.reportsReady(); + + const editedBy = await wpDashboard.submittedReport + .getByRole("gridcell") + .nth(2) + .textContent(); + await wpDashboard.submittedReport + .getByRole("button", { name: "View", exact: true }) + .click(); - const row = page.getByRole("row", { name: "Submitted" }).last(); - const editedBy = await row.getByRole("gridcell").nth(2).textContent(); - await row.getByRole("button", { name: "View", exact: true }).click(); - await expect(page).toHaveURL("/wp/general-information"); + await wpGeneralInformation.isReady(); // Approve WP - await page.getByRole("link", { name: "Review & Submit" }).click(); - await expect(page).toHaveURL("/wp/review-and-submit"); - await page.getByRole("button", { name: "Approve" }).click(); - - const modal = page.getByRole("dialog"); - await expect(modal).toBeVisible(); - await expect(modal).toContainText( - "Are you sure you want to approve this MFP Work Plan?" - ); - await page.getByRole("textbox").fill("APPROVE"); - await page.getByRole("button", { name: "Approve" }).click(); + await wpReviewAndSubmit.goto(); + await wpReviewAndSubmit.isReady(); + await wpReviewAndSubmit.approveButton.click(); + + await expect(wpReviewAndSubmit.approveModal).toBeVisible(); + + await wpReviewAndSubmit.approveReport(); // Confirm approved WP is in table - await expect(page).toHaveURL("/wp"); - await expect(page.getByRole("table")).toBeVisible(); + await wpDashboard.isReady(); + await expect(wpDashboard.page.getByRole("table")).toBeVisible(); await expect( - page.getByRole("row", { + wpDashboard.page.getByRole("row", { name: `${editedBy} Approved`, }) ).toBeVisible(); diff --git a/tests/e2e/wp/create.spec.ts b/tests/e2e/wp/create.spec.ts index d2159e52f..dc088d3e7 100644 --- a/tests/e2e/wp/create.spec.ts +++ b/tests/e2e/wp/create.spec.ts @@ -1,75 +1,52 @@ -import { test, expect } from "@playwright/test"; -import { currentYear } from "../../seeds/helpers"; -import { - archiveExistingWPs, - firstPeriod, - logInStateUser, - secondPeriod, - stateAbbreviation, - stateName, -} from "../helpers"; - -test("State user can create a Work Plan", async ({ page }) => { +import { test, expect } from "../utils/fixtures/base"; +import { archiveExistingWPs, logInStateUser } from "../helpers"; + +test("State user can create a Work Plan", async ({ + page, + stateHomePage, + wpDashboard, +}) => { await archiveExistingWPs(page); await logInStateUser(page); // View WPs - await page.getByRole("button", { name: "Enter Work Plan online" }).click(); - await expect(page).toHaveURL("/wp"); - await page.waitForResponse(`**/reports/WP/${stateAbbreviation}`); - - // Create WP - const startMFPWorkPlanButton = page.getByRole("button", { - name: "Start MFP Work Plan", - }); - - const continueMFPWorkPlanButton = page.getByRole("button", { - name: "Continue MFP Work Plan for next Period", - }); + await stateHomePage.wpButton.click(); + await wpDashboard.isReady(); // check if work plans exist already or not - if (await startMFPWorkPlanButton.isVisible()) { - await startMFPWorkPlanButton.click(); - const modal = page.getByRole("dialog"); - await expect(modal).toBeVisible(); - await expect(modal).toContainText("Add new MFP Work Plan"); + if (await wpDashboard.createButton.isVisible()) { + await wpDashboard.createButton.click(); + await expect(wpDashboard.modal).toBeVisible(); + await expect(wpDashboard.modal).toContainText("Add new MFP Work Plan"); - await page.getByLabel(`${currentYear}`).click(); - await page - .getByLabel(`First reporting period (January 1 - June 30)`) - .click(); - await page.getByRole("button", { name: "Start new" }).click(); - // Confirm created WP is in table - await expect(page.getByRole("table")).toBeVisible(); + await wpDashboard.createNewWP(); - const row = page.getByRole("row", { name: "Not Started" }); - await expect( - row.getByRole("gridcell", { - name: `${stateName} MFP Work Plan ${currentYear} - Period ${firstPeriod}`, - }) - ).toBeVisible(); - - const editButton = row.getByRole("button", { name: "Edit", exact: true }); - await expect(editButton).toBeVisible(); + // Confirm created WP is in table + await wpDashboard.getReports(); + await expect(wpDashboard.firstReport).toBeVisible(); + const editNewWPButton = wpDashboard.firstReport.getByRole("button", { + name: "Edit", + exact: true, + }); + await expect(editNewWPButton).toBeVisible(); } else { - await continueMFPWorkPlanButton.click(); - const modal = page.getByRole("dialog"); - await expect(modal).toBeVisible(); - await expect(modal).toContainText("Continue"); + await wpDashboard.copyoverButton.click(); + await expect(wpDashboard.modal).toBeVisible(); + await expect(wpDashboard.modal).toContainText("Continue"); await page .getByRole("button", { name: "Continue from previous period" }) .click(); - // Confirm created WP is in table - await expect(page.getByRole("table")).toBeVisible(); - const row = page.getByRole("row", { name: "Not Started" }); - await expect( - row.getByRole("gridcell", { - name: `${stateName} MFP Work Plan ${currentYear} - Period ${secondPeriod}`, - }) - ).toBeVisible(); - - const editButton = row.getByRole("button", { name: "Edit", exact: true }); - await expect(editButton).toBeVisible(); + // Confirm created WP is in table + await wpDashboard.getReports(); + await expect(wpDashboard.copiedReport).toBeVisible(); + const editCopiedReportButton = wpDashboard.copiedReport.getByRole( + "button", + { + name: "Edit", + exact: true, + } + ); + await expect(editCopiedReportButton).toBeVisible(); } });