Skip to content
This repository has been archived by the owner on Aug 7, 2024. It is now read-only.

NextJS Profile tests #2060

Merged
merged 1 commit into from
Oct 29, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ yarn-error.log*
# testing
/playwright-report/
/playwright/.cache/
data/_test-*.json

# storybook
/storybook-static
26 changes: 14 additions & 12 deletions playwright.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
// {
Expand Down Expand Up @@ -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;
43 changes: 43 additions & 0 deletions tests/global-setup.js
Original file line number Diff line number Diff line change
@@ -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`);
}
});
};
11 changes: 11 additions & 0 deletions tests/global-teardown.js
Original file line number Diff line number Diff line change
@@ -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`));
};
34 changes: 14 additions & 20 deletions tests/profile.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 }) => {
Expand Down