Update collab permission tests and minor fixes

This commit is contained in:
thiloho
2024-09-06 16:08:34 +02:00
parent a77d2b2d0c
commit b8d23eab00
16 changed files with 804 additions and 610 deletions

View File

@@ -84,3 +84,7 @@ FROM
ALTER TABLE internal.website
DROP COLUMN title_search;
GRANT SELECT, UPDATE, DELETE ON api.website TO authenticated_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON api.article TO authenticated_user;

View File

@@ -103,6 +103,8 @@ SELECT
FROM
internal.article;
GRANT SELECT, INSERT, UPDATE, DELETE ON api.article TO authenticated_user;
DROP VIEW api.docs_category;
ALTER TABLE internal.article

View File

@@ -104,3 +104,5 @@ FROM
JOIN internal.home ho ON w.id = ho.website_id
JOIN internal.footer f ON w.id = f.website_id;
GRANT SELECT ON api.website_overview TO authenticated_user;

View File

@@ -52,3 +52,5 @@ FROM
ALTER TABLE internal.article
DROP COLUMN article_weight;
GRANT SELECT, INSERT, UPDATE, DELETE ON api.article TO authenticated_user;

View File

@@ -136,3 +136,5 @@ FROM
JOIN internal.home ho ON w.id = ho.website_id
JOIN internal.footer f ON w.id = f.website_id;
GRANT SELECT ON api.website_overview TO authenticated_user;

View File

@@ -136,3 +136,5 @@ FROM
JOIN internal.home ho ON w.id = ho.website_id
JOIN internal.footer f ON w.id = f.website_id;
GRANT SELECT ON api.website_overview TO authenticated_user;

View File

@@ -3,6 +3,13 @@ ALTER TABLE internal.article
ALTER COLUMN publication_date DROP NOT NULL;
-- migrate:down
UPDATE
internal.article
SET
publication_date = CURRENT_DATE
WHERE
publication_date IS NULL;
ALTER TABLE internal.article
ALTER COLUMN publication_date SET NOT NULL;

View File

@@ -33,3 +33,5 @@ SELECT
FROM
internal.website;
GRANT SELECT, UPDATE, DELETE ON api.website TO authenticated_user;

View File

@@ -6,10 +6,12 @@ const config: PlaywrightTestConfig = {
url: "http://localhost:4173"
},
use: {
baseURL: "http://localhost:4173"
baseURL: "http://localhost:4173",
video: "retain-on-failure"
},
testDir: "tests",
testMatch: /(.+\.)?(test|spec)\.ts/,
retries: 3,
// Firefox and Webkit are not packaged yet, see https://github.com/NixOS/nixpkgs/issues/288826
projects: [
{

View File

@@ -5,33 +5,16 @@ import { join } from "node:path";
export const load: PageServerLoad = async ({ fetch, cookies, url, locals }) => {
const searchQuery = url.searchParams.get("website_search_query");
const sortBy = url.searchParams.get("website_sort");
const filterBy = url.searchParams.get("website_filter");
const params = new URLSearchParams();
const baseFetchUrl = `${API_BASE_PREFIX}/website`;
const baseFetchUrl = `${API_BASE_PREFIX}/website?order=last_modified_at.desc,created_at.desc`;
if (searchQuery) {
params.append("title_search", `wfts(english).${searchQuery}`);
}
switch (sortBy) {
case null:
case "creation-time":
params.append("order", "created_at.desc");
break;
case "last-modified":
params.append("order", "last_modified_at.desc");
break;
case "title-a-to-z":
params.append("order", "title.asc");
break;
case "title-z-to-a":
params.append("order", "title.desc");
break;
}
switch (filterBy) {
case "creations":
params.append("user_id", `eq.${locals.user.id}`);
@@ -41,7 +24,7 @@ export const load: PageServerLoad = async ({ fetch, cookies, url, locals }) => {
break;
}
const constructedFetchUrl = `${baseFetchUrl}?${params.toString()}`;
const constructedFetchUrl = `${baseFetchUrl}&${params.toString()}`;
const totalWebsitesData = await fetch(baseFetchUrl, {
method: "HEAD",

View File

@@ -54,7 +54,7 @@
</h2>
<details>
<summary>Search & Sort & Filter</summary>
<summary>Search & Filter</summary>
<form method="GET">
<label>
Search:
@@ -64,16 +64,6 @@
value={$page.url.searchParams.get("website_search_query")}
/>
</label>
<label>
Sort:
<select name="website_sort">
{#each sortOptions as { value, text }}
<option {value} selected={value === $page.url.searchParams.get("website_sort")}
>{text}</option
>
{/each}
</select>
</label>
<label>
Filter:
<select name="website_filter">

View File

@@ -12,6 +12,11 @@ export const load: PageServerLoad = async ({ params, fetch, cookies, url, parent
baseFetchUrl +=
",article_weight,docs_category(category_name,category_weight)&order=docs_category(category_weight).desc.nullslast,article_weight.desc.nullslast";
}
if (website.content_type === "Blog") {
baseFetchUrl += "&order=last_modified_at.desc,created_at.desc";
}
console.log(baseFetchUrl);
const parameters = new URLSearchParams();

View File

@@ -5,7 +5,7 @@ export const load: PageServerLoad = async ({ parent, params, fetch, cookies }) =
const { website, home } = await parent();
const collabData = await fetch(
`${API_BASE_PREFIX}/collab?website_id=eq.${params.websiteId}&select=*,user!user_id(*)`,
`${API_BASE_PREFIX}/collab?website_id=eq.${params.websiteId}&select=*,user!user_id(*)&order=last_modified_at.desc,added_at.desc`,
{
method: "GET",
headers: {

View File

@@ -14,7 +14,8 @@ const test = base.extend<{ authenticatedPage: Page }>({
}
});
test("Register", async ({ page }) => {
test.describe.serial("Account tests", () => {
test("Register", async ({ page }) => {
await page.goto("/register");
await page.getByLabel("Username:").click();
await page.getByLabel("Username:").fill(username);
@@ -22,9 +23,9 @@ test("Register", async ({ page }) => {
await page.getByLabel("Password:").fill(password);
await page.getByRole("button", { name: "Submit" }).click();
await expect(page.getByText("Successfully registered, you")).toBeVisible();
});
});
test("Login", async ({ page }) => {
test("Login", async ({ page }) => {
await page.goto("/login");
await page.getByLabel("Username:").click();
await page.getByLabel("Username:").fill(username);
@@ -32,15 +33,15 @@ test("Login", async ({ page }) => {
await page.getByLabel("Password:").fill(password);
await page.getByRole("button", { name: "Submit" }).click();
await expect(page.getByRole("heading", { name: "Dashboard" })).toBeVisible();
});
});
test("Logout", async ({ authenticatedPage: page }) => {
test("Logout", async ({ authenticatedPage: page }) => {
await page.getByRole("link", { name: "Account" }).click();
await page.getByRole("button", { name: "Logout" }).click();
await expect(page.getByRole("heading", { name: "Login" })).toBeVisible();
});
});
test("Delete account", async ({ authenticatedPage: page }) => {
test("Delete account", async ({ authenticatedPage: page }) => {
await page.getByRole("link", { name: "Account" }).click();
await page.getByRole("button", { name: "Delete account" }).click();
await page.getByLabel("Password:").click();
@@ -50,4 +51,5 @@ test("Delete account", async ({ authenticatedPage: page }) => {
.getByRole("button", { name: "Delete account" })
.click();
await expect(page.getByRole("heading", { name: "Login" })).toBeVisible();
});
});

View File

@@ -1,16 +1,17 @@
import { test, expect, type Page } from "@playwright/test";
import { test, expect } from "@playwright/test";
import { randomBytes } from "node:crypto";
const username = randomBytes(8).toString("hex");
const collabUsername = randomBytes(8).toString("hex");
const collabUsername2 = randomBytes(8).toString("hex");
const collabUsername3 = randomBytes(8).toString("hex");
const collaborators = [collabUsername, collabUsername2, collabUsername3];
const collabUsername4 = randomBytes(8).toString("hex");
const password = "T3stuser??!!";
const permissionLevels = [10, 20, 30];
test("Setup", async ({ page }) => {
test.describe.serial("Collaborator tests", () => {
test("Setup", async ({ page }) => {
await page.goto("/register");
await page.getByLabel("Username:").click();
@@ -37,6 +38,12 @@ test("Setup", async ({ page }) => {
await page.getByLabel("Password:").fill(password);
await page.getByRole("button", { name: "Submit" }).click();
await page.getByLabel("Username:").click();
await page.getByLabel("Username:").fill(collabUsername4);
await page.getByLabel("Password:").click();
await page.getByLabel("Password:").fill(password);
await page.getByRole("button", { name: "Submit" }).click();
await page.goto("/login");
await page.getByLabel("Username:").fill(username);
await page.getByLabel("Password:").fill(password);
@@ -57,7 +64,7 @@ test("Setup", async ({ page }) => {
await page.getByRole("link", { name: "Articles" }).click();
await page.getByRole("button", { name: "Create article" }).click();
await page.getByLabel("Title:").click();
await page.getByLabel("Title:").fill("Article");
await page.getByLabel("Title:").fill("Article-10");
await page.getByRole("button", { name: "Submit" }).click();
await page.getByRole("link", { name: "Collaborators" }).click();
@@ -65,15 +72,24 @@ test("Setup", async ({ page }) => {
await page.getByLabel("Username:").click();
await page.getByLabel("Username:").fill(collabUsername);
await page.getByRole("button", { name: "Submit" }).click();
await page.getByRole("button", { name: "Add collaborator" }).click();
await page.getByLabel("Username:").click();
await page.getByLabel("Username:").fill(collabUsername2);
await page.getByRole("button", { name: "Submit" }).click();
await page.getByRole("button", { name: "Add collaborator" }).click();
await page.getByLabel("Username:").click();
await page.getByLabel("Username:").fill(collabUsername3);
await page.getByRole("combobox").selectOption("30");
await page.getByRole("button", { name: "Submit" }).click();
await page.goto("/");
await page.getByRole("link", { name: "Documentation" }).click();
await page.getByRole("link", { name: "Categories" }).click();
await page.getByRole("button", { name: "Create category" }).click();
await page.getByLabel("Name:").click();
await page.getByLabel("Name:").fill("Category");
await page.getByLabel("Name:").fill("Category-10");
await page.getByLabel("Weight:").click();
await page.getByLabel("Weight:").fill("1000");
await page.getByLabel("Weight:").fill("10");
await page.getByRole("button", { name: "Submit" }).click();
await page.getByRole("link", { name: "Collaborators" }).click();
@@ -81,9 +97,9 @@ test("Setup", async ({ page }) => {
await page.getByLabel("Username:").click();
await page.getByLabel("Username:").fill(collabUsername);
await page.getByRole("button", { name: "Submit" }).click();
});
});
for (const permissionLevel of permissionLevels) {
for (const permissionLevel of permissionLevels) {
test(`Set collaborator permission level to ${permissionLevel}`, async ({ page }) => {
await page.goto("/login");
await page.getByLabel("Username:").fill(username);
@@ -91,7 +107,24 @@ for (const permissionLevel of permissionLevels) {
await page.getByRole("button", { name: "Submit" }).click();
await page.getByRole("link", { name: "Blog" }).click();
await page.getByRole("link", { name: "Collaborators" }).click();
await page.getByRole("button", { name: "Update" }).click();
await page
.locator("li")
.filter({ hasText: collabUsername })
.getByRole("button")
.first()
.click();
await page.getByRole("combobox").selectOption(permissionLevel.toString());
await page.getByRole("button", { name: "Update collaborator" }).click();
await page.goto("/");
await page.getByRole("link", { name: "Documentation" }).click();
await page.getByRole("link", { name: "Collaborators" }).click();
await page
.locator("li")
.filter({ hasText: collabUsername })
.getByRole("button")
.first()
.click();
await page.getByRole("combobox").selectOption(permissionLevel.toString());
await page.getByRole("button", { name: "Update collaborator" }).click();
});
@@ -105,15 +138,17 @@ for (const permissionLevel of permissionLevels) {
});
test("Update website", async ({ page }) => {
await page.getByRole("button", { name: "Update" }).nth(1).click();
await page.locator("li").filter({ hasText: "Blog" }).getByRole("button").first().click();
await page.getByRole("button", { name: "Submit" }).click();
if (permissionLevel === 10) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully updated website")).toBeVisible();
}
});
test("Delete website", async ({ page }) => {
await page.getByRole("button", { name: "Delete" }).nth(0).click();
await page.locator("li").filter({ hasText: "Blog" }).getByRole("button").nth(1).click();
await page.getByRole("button", { name: "Delete website" }).click();
await expect(page.getByText("You do not have the required")).toBeVisible();
});
@@ -123,6 +158,8 @@ for (const permissionLevel of permissionLevels) {
if (permissionLevel === 10) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully updated global")).toBeVisible();
}
});
test("Update Header", async ({ page }) => {
@@ -131,6 +168,8 @@ for (const permissionLevel of permissionLevels) {
if (permissionLevel === 10) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully updated header")).toBeVisible();
}
});
test("Update Home", async ({ page }) => {
@@ -139,6 +178,8 @@ for (const permissionLevel of permissionLevels) {
if (permissionLevel === 10) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully updated home")).toBeVisible();
}
});
test("Update Footer", async ({ page }) => {
@@ -147,6 +188,8 @@ for (const permissionLevel of permissionLevels) {
if (permissionLevel === 10) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully updated footer")).toBeVisible();
}
});
test("Create article", async ({ page }) => {
@@ -154,17 +197,23 @@ for (const permissionLevel of permissionLevels) {
await page.getByRole("link", { name: "Articles" }).click();
await page.getByRole("button", { name: "Create article" }).click();
await page.getByLabel("Title:").click();
await page.getByLabel("Title:").fill("Article");
await page.getByLabel("Title:").fill(`Article-${permissionLevel}`);
await page.getByRole("button", { name: "Submit" }).click();
if (permissionLevel === 10) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully created article")).toBeVisible();
}
});
test("Update article", async ({ page }) => {
await page.getByRole("link", { name: "Blog" }).click();
await page.getByRole("link", { name: "Articles" }).click();
await page.getByRole("link", { name: "Edit" }).nth(0).click();
await page
.locator("li")
.filter({ hasText: `Article-${permissionLevel}` })
.getByRole("link")
.click();
await page.getByLabel("Description:").click();
await page.getByLabel("Description:").fill("Description");
await page.getByLabel("Author:").click();
@@ -175,50 +224,101 @@ for (const permissionLevel of permissionLevels) {
if (permissionLevel === 10) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully updated article")).toBeVisible();
}
});
test("Delete article", async ({ page }) => {
await page.getByRole("link", { name: "Blog" }).click();
await page.getByRole("link", { name: "Articles" }).click();
await page.getByRole("button", { name: "Delete" }).nth(0).click();
await page
.locator("li")
.filter({ hasText: `Article-${permissionLevel}` })
.getByRole("button")
.click();
await page.getByRole("button", { name: "Delete article" }).click();
if (permissionLevel === 10) {
await expect(page.getByText("You do not have the required")).toBeVisible();
}
if ([20, 30].includes(permissionLevel)) {
await expect(page.getByText("Successfully deleted article")).toBeVisible();
await page.locator("li").filter({ hasText: `Article-10` }).getByRole("button").click();
await page.getByRole("button", { name: "Delete article" }).click();
if (permissionLevel === 20) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully deleted article")).toBeVisible();
}
}
});
test("Add collaborator", async ({ page }) => {
await page.getByRole("link", { name: "Blog" }).click();
await page.getByRole("link", { name: "Collaborators" }).click();
await page.getByRole("button", { name: "Add collaborator" }).click();
await page.getByLabel("Username:").click();
await page
.getByLabel("Username:")
.fill(collaborators[permissionLevels.indexOf(permissionLevel)]);
await page.getByLabel("Username:").fill(collabUsername4);
await page.getByRole("button", { name: "Submit" }).click();
if (permissionLevel === 10) {
if ([10, 20].includes(permissionLevel)) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully added")).toBeVisible();
}
});
test("Update collaborator", async ({ page }) => {
await page.getByRole("link", { name: "Blog" }).click();
await page.getByRole("link", { name: "Collaborators" }).click();
await page.getByRole("button", { name: "Update" }).nth(0).click();
await page
.locator("li")
.filter({ hasText: collabUsername2 })
.getByRole("button")
.first()
.click();
await page.getByRole("combobox").selectOption("20");
await page.getByRole("button", { name: "Update collaborator" }).click();
if (permissionLevel === 10) {
if ([10, 20].includes(permissionLevel)) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully updated")).toBeVisible();
await page
.locator("li")
.filter({ hasText: collabUsername2 })
.getByRole("button")
.first()
.click();
await page.getByRole("combobox").selectOption("30");
await page.getByRole("button", { name: "Update collaborator" }).click();
await expect(page.getByText("You do not have the required")).toBeVisible();
}
});
test("Remove collaborator", async ({ page }) => {
await page.getByRole("link", { name: "Blog" }).click();
await page.getByRole("link", { name: "Collaborators" }).click();
await page.getByRole("button", { name: "Remove" }).nth(0).click();
await page
.locator("li")
.filter({ hasText: collabUsername2 })
.getByRole("button")
.nth(1)
.click();
await page.getByRole("button", { name: "Remove collaborator" }).click();
if (permissionLevel === 10) {
if ([10, 20].includes(permissionLevel)) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully removed")).toBeVisible();
await page
.locator("li")
.filter({ hasText: collabUsername3 })
.getByRole("button")
.nth(1)
.click();
await page.getByRole("button", { name: "Remove collaborator" }).click();
await expect(page.getByText("You do not have the required")).toBeVisible();
}
});
@@ -227,36 +327,69 @@ for (const permissionLevel of permissionLevels) {
await page.getByRole("link", { name: "Categories" }).click();
await page.getByRole("button", { name: "Create category" }).click();
await page.getByLabel("Name:").click();
await page.getByLabel("Name:").fill("Test");
await page.getByLabel("Name:").fill(`Category-${permissionLevel}`);
await page.getByRole("spinbutton", { name: "Weight:" }).click();
await page.getByRole("spinbutton", { name: "Weight:" }).fill("900");
await page.getByRole("spinbutton", { name: "Weight:" }).fill(permissionLevel.toString());
await page.getByRole("button", { name: "Submit" }).click();
if (permissionLevel === 10) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully created category")).toBeVisible();
}
});
test("Update category", async ({ page }) => {
await page.getByRole("link", { name: "Documentation" }).click();
await page.getByRole("link", { name: "Categories" }).click();
await page.getByRole("button", { name: "Update" }).nth(0).click();
await page
.locator("li")
.filter({ hasText: `Category-${permissionLevel}` })
.getByRole("button")
.first()
.click();
await page.getByRole("spinbutton", { name: "Weight:" }).click();
await page.getByRole("spinbutton", { name: "Weight:" }).fill("500");
await page
.getByRole("spinbutton", { name: "Weight:" })
.fill((permissionLevel * 2).toString());
await page.getByRole("button", { name: "Update category" }).click();
if (permissionLevel === 10) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully updated category")).toBeVisible();
}
});
test("Delete category", async ({ page }) => {
await page.getByRole("link", { name: "Documentation" }).click();
await page.getByRole("link", { name: "Categories" }).click();
await page.getByRole("button", { name: "Delete" }).nth(0).click();
await page
.locator("li")
.filter({ hasText: `Category-${permissionLevel}` })
.getByRole("button")
.nth(1)
.click();
await page.getByRole("button", { name: "Delete category" }).click();
if (permissionLevel === 10) {
await expect(page.getByText("You do not have the required")).toBeVisible();
}
if ([20, 30].includes(permissionLevel)) {
await expect(page.getByText("Successfully deleted category")).toBeVisible();
await page
.locator("li")
.filter({ hasText: "Category-10" })
.getByRole("button")
.nth(1)
.click();
await page.getByRole("button", { name: "Delete category" }).click();
if (permissionLevel === 20) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully deleted category")).toBeVisible();
}
}
});
test("Publish website", async ({ page }) => {
await page.getByRole("link", { name: "Blog" }).click();
@@ -265,21 +398,67 @@ for (const permissionLevel of permissionLevels) {
if (permissionLevel === 10) {
await expect(page.getByText("You do not have the required")).toBeVisible();
} else {
await expect(page.getByText("Successfully published website")).toBeVisible();
}
});
});
}
}
test.describe("Delete all accounts", () => {
const allUsers = collaborators.concat(username);
for (const user of allUsers) {
test(`Delete account ${allUsers.indexOf(user)}`, async ({ page }) => {
test("Delete all accounts", async ({ page }) => {
await page.goto("/login");
await page.getByLabel("Username:").fill(user);
await page.getByLabel("Username:").fill(username);
await page.getByLabel("Password:").fill(password);
await page.getByRole("button", { name: "Submit" }).click();
await page.getByRole("link", { name: "Account" }).click();
await page.getByRole("button", { name: "Delete account" }).click();
await page.getByLabel("Password:").click();
await page.getByLabel("Password:").fill(password);
await page
.locator("#delete-account-modal")
.getByRole("button", { name: "Delete account" })
.click();
await page.getByLabel("Username:").fill(collabUsername);
await page.getByLabel("Password:").fill(password);
await page.getByRole("button", { name: "Submit" }).click();
await page.getByRole("link", { name: "Account" }).click();
await page.getByRole("button", { name: "Delete account" }).click();
await page.getByLabel("Password:").click();
await page.getByLabel("Password:").fill(password);
await page
.locator("#delete-account-modal")
.getByRole("button", { name: "Delete account" })
.click();
await page.getByLabel("Username:").fill(collabUsername2);
await page.getByLabel("Password:").fill(password);
await page.getByRole("button", { name: "Submit" }).click();
await page.getByRole("link", { name: "Account" }).click();
await page.getByRole("button", { name: "Delete account" }).click();
await page.getByLabel("Password:").click();
await page.getByLabel("Password:").fill(password);
await page
.locator("#delete-account-modal")
.getByRole("button", { name: "Delete account" })
.click();
await page.getByLabel("Username:").fill(collabUsername3);
await page.getByLabel("Password:").fill(password);
await page.getByRole("button", { name: "Submit" }).click();
await page.getByRole("link", { name: "Account" }).click();
await page.getByRole("button", { name: "Delete account" }).click();
await page.getByLabel("Password:").click();
await page.getByLabel("Password:").fill(password);
await page
.locator("#delete-account-modal")
.getByRole("button", { name: "Delete account" })
.click();
await page.getByLabel("Username:").fill(collabUsername4);
await page.getByLabel("Password:").fill(password);
await page.getByRole("button", { name: "Submit" }).click();
await page.getByRole("link", { name: "Account" }).click();
await page.getByRole("button", { name: "Delete account" }).click();
await page.getByLabel("Password:").click();
@@ -289,5 +468,4 @@ test.describe("Delete all accounts", () => {
.getByRole("button", { name: "Delete account" })
.click();
});
}
});

View File

@@ -21,7 +21,8 @@ const test = base.extend<{ authenticatedPage: Page }>({
}
});
test("Register", async ({ page }) => {
test.describe.serial("Website tests", () => {
test("Register", async ({ page }) => {
await page.goto("/register");
await page.getByLabel("Username:").click();
@@ -35,15 +36,15 @@ test("Register", async ({ page }) => {
await page.getByLabel("Password:").click();
await page.getByLabel("Password:").fill(password);
await page.getByRole("button", { name: "Submit" }).click();
});
});
test("Create websites", async ({ authenticatedPage: page }) => {
test("Create websites", async ({ authenticatedPage: page }) => {
await page.getByRole("button", { name: "Create website" }).click();
await page.getByLabel("Title:").click();
await page.getByLabel("Title:").fill("Blog");
await page.getByRole("button", { name: "Submit" }).click();
await expect(page.getByRole("link", { name: "All websites" })).toBeVisible();
await expect(page.getByText("Search & Sort & Filter")).toBeVisible();
await expect(page.getByText("Search & Filter")).toBeVisible();
await expect(page.getByText("Blog Type: Blog Created at:")).toBeVisible();
await page.getByRole("button", { name: "Create website" }).click();
@@ -52,26 +53,31 @@ test("Create websites", async ({ authenticatedPage: page }) => {
await page.getByLabel("Title:").fill("Documentation");
await page.getByRole("button", { name: "Submit" }).click();
await expect(page.getByRole("link", { name: "All websites" })).toBeVisible();
await expect(page.getByText("Search & Sort & Filter")).toBeVisible();
await expect(page.getByText("Search & Filter")).toBeVisible();
await expect(page.getByText("Documentation Type: Docs")).toBeVisible();
});
});
test("Update websites", async ({ authenticatedPage: page }) => {
await page.getByRole("button", { name: "Update" }).nth(1).click();
test("Update websites", async ({ authenticatedPage: page }) => {
await page.locator("li").filter({ hasText: "Blog" }).getByRole("button").first().click();
await page.getByRole("textbox", { name: "Title" }).click();
await page.getByRole("textbox", { name: "Title" }).fill("Blog updated");
await page.getByRole("button", { name: "Submit" }).click();
await expect(page.getByRole("link", { name: "Blog updated" })).toBeVisible();
await page.getByRole("button", { name: "Update" }).first().click();
await page
.locator("li")
.filter({ hasText: "Documentation" })
.getByRole("button")
.first()
.click();
await page.getByRole("textbox", { name: "Title" }).click();
await page.getByRole("textbox", { name: "Title" }).fill("Documentation updated");
await page.getByRole("button", { name: "Submit" }).click();
await expect(page.getByRole("link", { name: "Documentation updated" })).toBeVisible();
});
});
test.describe("Blog", () => {
test.describe("Update settings", () => {
test.describe.serial("Blog", () => {
test.describe.serial("Update settings", () => {
test("Global", async ({ authenticatedPage: page }) => {
await page.getByRole("link", { name: "Blog" }).click();
await page.getByLabel("Light accent color:").click();
@@ -154,7 +160,9 @@ test.describe("Blog", () => {
"## Section\n\n### Subsection\n\n## Second section\n\n### Second subsection\n\n#### Sub Sub section"
);
await expect(
page.getByText("Table of contents SectionSubsectionSecond sectionSecond subsectionSub Sub")
page.getByText(
"Table of contents SectionSubsectionSecond sectionSecond subsectionSub Sub"
)
).toBeVisible();
await expect(
page.getByRole("heading", { name: "Section", exact: true }).getByRole("link")
@@ -222,9 +230,9 @@ test.describe("Blog", () => {
await expect(page.getByText("Successfully removed")).toBeVisible();
});
});
});
});
test.describe("Docs", () => {
test.describe.serial("Docs", () => {
test.describe.serial("Categories", () => {
test("Create category", async ({ authenticatedPage: page }) => {
await page.getByRole("link", { name: "Documentation" }).click();
@@ -285,7 +293,9 @@ test.describe("Docs", () => {
await page.getByLabel("Main content:").click();
await page
.getByLabel("Main content:")
.fill("## Main content comes in here\n\n### First section\n\n### Second section\n\n## More");
.fill(
"## Main content comes in here\n\n### First section\n\n### Second section\n\n## More"
);
await page.getByRole("button", { name: "Submit" }).click();
await expect(page.getByText("Successfully updated article")).toBeVisible();
await expect(page.getByText("Table of contents Main")).toBeVisible();
@@ -293,9 +303,9 @@ test.describe("Docs", () => {
page.getByRole("heading", { name: "Main content comes in here" }).getByRole("link")
).toBeVisible();
});
});
});
test("Publish websites", async ({ authenticatedPage: page }) => {
test("Publish websites", async ({ authenticatedPage: page }) => {
await page.getByRole("link", { name: "Blog" }).click();
await page.getByRole("link", { name: "Publish" }).click();
await page.getByRole("button", { name: "Publish" }).click();
@@ -308,9 +318,9 @@ test("Publish websites", async ({ authenticatedPage: page }) => {
await page.getByRole("button", { name: "Publish" }).click();
await expect(page.getByText("Successfully published website")).toBeVisible();
await expect(page.getByText("Your website is published at")).toBeVisible();
});
});
test("Delete websites", async ({ authenticatedPage: page }) => {
test("Delete websites", async ({ authenticatedPage: page }) => {
await page.getByRole("button", { name: "Delete" }).nth(1).click();
await page.getByRole("button", { name: "Delete website" }).click();
await expect(page.getByText("Successfully deleted website")).toBeVisible();
@@ -320,9 +330,9 @@ test("Delete websites", async ({ authenticatedPage: page }) => {
await expect(page.getByText("Successfully deleted website")).toBeVisible();
await expect(page.getByRole("link", { name: "All websites" })).toBeHidden();
});
});
test("Delete accounts", async ({ authenticatedPage: page }) => {
test("Delete accounts", async ({ authenticatedPage: page }) => {
await page.getByRole("link", { name: "Account" }).click();
await page.getByRole("button", { name: "Delete account" }).click();
await page.getByLabel("Password:").click();
@@ -343,4 +353,5 @@ test("Delete accounts", async ({ authenticatedPage: page }) => {
.locator("#delete-account-modal")
.getByRole("button", { name: "Delete account" })
.click();
});
});