Skip to content

Commit

Permalink
split sort into three seperate tests
Browse files Browse the repository at this point in the history
  • Loading branch information
John-Paul-Larkin committed Oct 20, 2024
1 parent d029c8d commit 036d732
Showing 1 changed file with 51 additions and 46 deletions.
97 changes: 51 additions & 46 deletions e2e/articles.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -221,51 +221,56 @@ test.describe("Authenticated Articles Page", () => {
await expect(page.getByText(commentContent)).toBeVisible();
});

test.describe("Article sort order on article page", () => {
const sortOptions = ["newest", "oldest", "top"];

for (const sortOption of sortOptions) {
test(`Should sort articles by ${sortOption}`, async ({ page }) => {
const baseUrl = "http://localhost:3000/articles";
const url =
sortOption === "newest" ? baseUrl : `${baseUrl}?filter=${sortOption}`;

await page.goto(url);
await page.waitForSelector("article");

const articles = await page.$$eval("article", (articles) => {
return articles.map((article) => ({
date: article.querySelector("time")?.dateTime,
likes: parseInt(
article
.querySelector("[data-likes]")
?.getAttribute("data-likes") || "0",
),
}));
});

if (sortOption === "newest") {
const isSortedNewest = articles.every((article, index, arr) => {
if (index === arr.length - 1) return true;
if (!article.date) return false;
return new Date(article.date) >= new Date(arr[index + 1].date!);
});
expect(isSortedNewest).toBeTruthy();
} else if (sortOption === "oldest") {
const isSortedOldest = articles.every((article, index, arr) => {
if (index === arr.length - 1) return true;
if (!article.date) return false;
return new Date(article.date) <= new Date(arr[index + 1].date!);
});
expect(isSortedOldest).toBeTruthy();
} else if (sortOption === "top") {
const isSortedTop = articles.every((article, index, arr) => {
if (index === arr.length - 1) return true;
return article.likes >= arr[index + 1].likes;
});
expect(isSortedTop).toBeTruthy();
}
});
}
test("Should sort articles by Newest", async ({ page }) => {
await page.goto("http://localhost:3000/articles");
await page.waitForSelector("article");

const articles = await page.$$eval("article", (articles) => {
return articles.map((article) => ({
date: article.querySelector("time")?.dateTime,
}));
});
const isSortedNewest = articles.every((article, index, arr) => {
if (index === arr.length - 1) return true;
if (!article.date || !arr[index + 1].date) return false;
return new Date(article.date) >= new Date(arr[index + 1].date!);
});
expect(isSortedNewest).toBeTruthy();
});

test("Should sort articles by Oldest", async ({ page }) => {
await page.goto("http://localhost:3000/articles?filter=oldest");
await page.waitForSelector("article");
const articles = await page.$$eval("article", (articles) => {
return articles.map((article) => ({
date: article.querySelector("time")?.dateTime,
}));
});
const isSortedOldest = articles.every((article, index, arr) => {
if (index === arr.length - 1) return true;
if (!article.date || !arr[index + 1].date) return false;
return new Date(article.date) >= new Date(arr[index + 1].date!);
});
expect(isSortedOldest).toBeTruthy();
});

test("Should sort articles by Top - likes", async ({ page }) => {
await page.goto("http://localhost:3000/articles?filter=top");
await page.waitForSelector("article");

const articles = await page.$$eval("article", (articles) => {
return articles.map((article) => ({
likes: parseInt(
article.querySelector("[data-likes]")?.getAttribute("data-likes") ||
"0",
10,
),
}));
});

const isSortedTop = articles.every((article, index, arr) => {
if (index === arr.length - 1) return true;
return article.likes >= arr[index + 1].likes;
});
});
});

0 comments on commit 036d732

Please sign in to comment.