From 1ca19f0e49e352fe7eed91bce68db4fcc755fd08 Mon Sep 17 00:00:00 2001 From: Nantawat Sukrisunt Date: Sun, 17 Nov 2024 13:55:47 +0700 Subject: [PATCH] Update test 02 --- .github/workflows/playwright.yml | 2 +- tests/{mockup => assets}/1x1.png | Bin tests/assets/mockData.json | 16 ++++++++++++ tests/helpers/{login.ts => loginUtils.ts} | 10 +++----- tests/helpers/searchUtils.ts | 11 ++++++++ tests/test-01-business-apply.spec.ts | 23 +++++++++++------ tests/test-02-admin-approve-business.spec.ts | 25 +++++++++++++++++++ 7 files changed, 72 insertions(+), 15 deletions(-) rename tests/{mockup => assets}/1x1.png (100%) create mode 100644 tests/assets/mockData.json rename tests/helpers/{login.ts => loginUtils.ts} (70%) create mode 100644 tests/helpers/searchUtils.ts create mode 100644 tests/test-02-admin-approve-business.spec.ts diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index ab2f184..1c22cf3 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -39,7 +39,7 @@ jobs: if: steps.playwright-cache.outputs.cache-hit != 'true' - name: Run Playwright tests - run: npx playwright test + run: npx playwright test --workers=1 - uses: actions/upload-artifact@v4 if: ${{ !cancelled() }} diff --git a/tests/mockup/1x1.png b/tests/assets/1x1.png similarity index 100% rename from tests/mockup/1x1.png rename to tests/assets/1x1.png diff --git a/tests/assets/mockData.json b/tests/assets/mockData.json new file mode 100644 index 0000000..63dfdd1 --- /dev/null +++ b/tests/assets/mockData.json @@ -0,0 +1,16 @@ +{ + "company": { + "name": "Kasetsart", + "raised": "1000000", + "url": "https://www.test.md" + }, + "project": { + "name": "DummyTester", + "description": "0123456789", + "url": "https://www.test.md", + "budgetLow": "500", + "budgetHigh": "100000000", + "deadline": "2026-01-01T00:00" + } + } + \ No newline at end of file diff --git a/tests/helpers/login.ts b/tests/helpers/loginUtils.ts similarity index 70% rename from tests/helpers/login.ts rename to tests/helpers/loginUtils.ts index dea04eb..d3c7445 100644 --- a/tests/helpers/login.ts +++ b/tests/helpers/loginUtils.ts @@ -1,6 +1,6 @@ import { Page } from '@playwright/test'; -export const login = async (page: Page, role: 'user' | 'admin') => { +export const loginUtils = async (page: Page, role: 'user' | 'admin') => { const email = role === 'user' ? process.env.NEXT_PUBLIC_TEST_USER_EMAIL : process.env.NEXT_PUBLIC_ADMIN_EMAIL; const password = role === 'user' ? process.env.NEXT_PUBLIC_TEST_USER_PASSWORD : process.env.NEXT_PUBLIC_ADMIN_PASSWORD; @@ -9,13 +9,11 @@ export const login = async (page: Page, role: 'user' | 'admin') => { } await page.goto('/'); - const isLoginPage = await page.locator('id=login').isVisible(); + const isLoginPage = await page.getByRole('button', { name: 'Login' }).isVisible(); if (!isLoginPage) { console.log(`Logging out current session...`); - await page.evaluate(() => { - localStorage.clear(); - sessionStorage.clear(); - }); + await page.getByRole('button', { name: 'profile' }).click(); + await page.getByRole('menuitem', { name: 'Logout' }).click(); } console.log(`Logging in as ${role}...`); diff --git a/tests/helpers/searchUtils.ts b/tests/helpers/searchUtils.ts new file mode 100644 index 0000000..922152e --- /dev/null +++ b/tests/helpers/searchUtils.ts @@ -0,0 +1,11 @@ +import { Page, expect } from "@playwright/test"; + +export const searchBusiness = async (page: Page, business: string) => { + console.log("search for " + business); + await page.locator("li").nth(3).click(); + await page.getByPlaceholder("Enter business name...").fill(business); + await page.getByPlaceholder("Enter business name...").press("Enter"); + // await page.waitForURL("http://127.0.0.1:3000/find?query=" + business); + await expect(page.getByRole("link", { name: "Business logo " + business })).toBeHidden(); + console.log("found" + business); +}; diff --git a/tests/test-01-business-apply.spec.ts b/tests/test-01-business-apply.spec.ts index 59debe6..25908c4 100644 --- a/tests/test-01-business-apply.spec.ts +++ b/tests/test-01-business-apply.spec.ts @@ -1,20 +1,27 @@ -import { test } from "@playwright/test"; -import { login } from "./helpers/login"; +import { expect, test } from "@playwright/test"; +import { loginUtils } from "./helpers/loginUtils"; import { selectFirstOption } from "./helpers/dropdownUtils"; +import mockData from "./assets/mockData.json"; +import { searchBusiness } from "./helpers/searchUtils"; test("test", async ({ page }) => { - await login(page, "user"); - await page.getByRole('button', { name: 'Businesses' }).hover(); + await loginUtils(page, "user"); + await page.getByRole("button", { name: "Businesses" }).hover(); await page.getByRole("link", { name: "Business Apply to raise on on" }).click(); await selectFirstOption(page, page.locator("button").filter({ hasText: "Select an industry" })); await selectFirstOption(page, page.locator("button").filter({ hasText: "Select a country" })); - await page.getByPlaceholder("$").fill("999998"); + await page.getByPlaceholder("$").fill(mockData.company.raised); await page.getByRole("button", { name: "Yes" }).first().click(); await page.getByRole("button", { name: "Yes" }).nth(1).click(); await page.getByRole("button", { name: "Yes" }).nth(2).click(); - await page.getByPlaceholder('https:// ').fill('https://www.test.md'); + await page.getByPlaceholder("https:// ").fill(mockData.company.url); await selectFirstOption(page, page.locator("button").filter({ hasText: "Select" })); - await page.locator("#companyName").fill("kasetsart"); - await page.getByRole('button', { name: 'Submit application' }).click(); + await page.locator("#companyName").fill(mockData.company.name); + await page.getByRole("button", { name: "Submit application" }).click(); + const okButton = page.getByRole("button", { name: "OK" }); + await expect(okButton).toBeVisible(); + await okButton.click(); + + await searchBusiness(page, mockData.company.name); }); diff --git a/tests/test-02-admin-approve-business.spec.ts b/tests/test-02-admin-approve-business.spec.ts new file mode 100644 index 0000000..2df819e --- /dev/null +++ b/tests/test-02-admin-approve-business.spec.ts @@ -0,0 +1,25 @@ +import { expect, test } from "@playwright/test"; +import { loginUtils } from "./helpers/loginUtils"; +import mockData from "./assets/mockData.json"; +import { searchBusiness } from "./helpers/searchUtils"; + +test("test", async ({ page }) => { + await loginUtils(page, "admin"); + await page.getByRole("button", { name: "profile" }).click(); + await page.getByRole("link", { name: "Admin" }).click(); + await page.locator("html").click(); + await page.getByRole("button", { name: "Go to Business Application" }).click(); + + // if test 01 click no 'yes' use .first, or 'yes' n time use nth(n) + console.log('approving'); + await page + .getByRole("row", { name: mockData.company.name + " " + mockData.company.url }) + .getByRole("img") + .nth(3) + .click(); + const approveButton = page.getByRole("button", { name: "Approve" }); + await expect(approveButton).toBeVisible(); + await approveButton.click(); + + await searchBusiness(page, mockData.company.name); +});