From 0120b02495ccc2a1448c48b751325bbe44c3e859 Mon Sep 17 00:00:00 2001 From: Eddie Jaoude Date: Sat, 29 Oct 2022 20:34:41 +0100 Subject: [PATCH] fix: automated profile test --- .gitignore | 1 + playwright.config.js | 26 +++++++++++++----------- tests/global-setup.js | 43 ++++++++++++++++++++++++++++++++++++++++ tests/global-teardown.js | 11 ++++++++++ tests/profile.spec.js | 34 +++++++++++++------------------ 5 files changed, 83 insertions(+), 32 deletions(-) create mode 100644 tests/global-setup.js create mode 100644 tests/global-teardown.js diff --git a/.gitignore b/.gitignore index ca791a660e8..dc4ece0940b 100755 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ yarn-error.log* # testing /playwright-report/ /playwright/.cache/ +data/_test-*.json # storybook /storybook-static diff --git a/playwright.config.js b/playwright.config.js index 2fff9518de9..a0ac2099c63 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -58,19 +58,19 @@ const config = { }, }, - { - name: "firefox", - use: { - ...devices["Desktop Firefox"], - }, - }, + // { + // name: "firefox", + // use: { + // ...devices["Desktop Firefox"], + // }, + // }, - { - name: "webkit", - use: { - ...devices["Desktop Safari"], - }, - }, + // { + // name: "webkit", + // use: { + // ...devices["Desktop Safari"], + // }, + // }, /* Test against mobile viewports. */ // { @@ -111,6 +111,8 @@ const config = { timeout: 120 * 1000, reuseExistingServer: !process.env.CI, }, + globalSetup: require.resolve("./tests/global-setup"), + globalTeardown: require.resolve("./tests/global-teardown"), }; module.exports = config; diff --git a/tests/global-setup.js b/tests/global-setup.js new file mode 100644 index 00000000000..f85ea69000c --- /dev/null +++ b/tests/global-setup.js @@ -0,0 +1,43 @@ +const { chromium } = require("@playwright/test"); +const fs = require("fs"); + +const user = (username) => { + return { + name: username.toUpperCase(), + displayStatsPublic: true, + type: "personal", + bio: `Bio for ${username}`, + avatar: "https://github.com/eddiejaoude.png", + links: [ + { + name: "Link 1", + url: "http://eddiejaoude.io", + icon: "link", + }, + { + name: "Link 2", + url: "http://eddiehub.org", + icon: "link", + }, + ], + }; +}; + +module.exports = async (config) => { + const users = [ + "_test-profile-user-1", + "_test-profile-user-2", + "_test-profile-user-3", + ]; + + users.forEach((username) => { + const data = user(username); + + try { + fs.writeFileSync(`./data/${username}.json`, JSON.stringify(data)); + } catch (e) { + console.log(e); + throw new Error(`Test data "${username}" not created`); + } + }); +}; diff --git a/tests/global-teardown.js b/tests/global-teardown.js new file mode 100644 index 00000000000..ef9db19e796 --- /dev/null +++ b/tests/global-teardown.js @@ -0,0 +1,11 @@ +const { chromium } = require("@playwright/test"); +const fs = require("fs"); + +module.exports = async (config) => { + const users = [ + "_test-profile-user-1", + "_test-profile-user-2", + "_test-profile-user-3", + ]; + users.forEach((username) => fs.unlinkSync(`./data/${username}.json`)); +}; diff --git a/tests/profile.spec.js b/tests/profile.spec.js index 4896a685e40..8fc37d6200d 100644 --- a/tests/profile.spec.js +++ b/tests/profile.spec.js @@ -2,34 +2,28 @@ const { test, expect } = require("@playwright/test"); test("Profile has title", async ({ page }) => { - await page.goto("/eddiejaoude"); - await expect(page).toHaveTitle(/Eddie Jaoude/); + const username = "_test-profile-user-1"; + await page.goto(`/${username}`); + await expect(page).toHaveTitle(username.toUpperCase()); }); // Test to make sure profile name is displayed on page test("Name appears on the page", async ({ page }) => { - await page.goto("/eddiejaoude"); - await expect(page.locator("h1")).toHaveText(/Eddie Jaoude/); + const username = "_test-profile-user-2"; + await page.goto(`/${username}`); + await expect(page.locator("h1")).toHaveText(username.toUpperCase()); }); // Test to see if going to a profile 3X increases views by 3 -test("Profile views increase", async ({ page, browserName }) => { - await page.goto("/eddiejaoude"); - const startingViews = await (await page.innerText("h2")).split(" "); +test("Profile views increase", async ({ page }) => { + await page.goto("/_test-profile-user-3"); + const startingViews = (await page.innerText("h2")).split(" ")[1]; + await page.goto("/_test-profile-user-3"); + await page.goto("/_test-profile-user-3"); + await page.goto("/_test-profile-user-3"); - // loop to handle profile page navigation - for (let i = 0; i < 3; i++) { - await page.goto("/"); - await page.goto("/eddiejaoude"); - } - const endingViews = await (await page.innerText("h2")).split(" "); - - // if statement to account for Firefox counting 5 instead of 3 🤷🏻‍♂️ - if (browserName === "firefox") { - expect(parseInt(startingViews[1])).toEqual(parseInt(endingViews[1]) - 5); - } else { - expect(parseInt(startingViews[1])).toEqual(parseInt(endingViews[1]) - 3); - } + const endingViews = (await page.innerText("h2")).split(" ")[1]; + expect(parseInt(startingViews)).toEqual(parseInt(endingViews) - 3); }); test.fixme("Link clicks increase", async ({ page }) => {