mirror of
https://github.com/thiloho/archtika.git
synced 2025-11-22 02:41:35 +01:00
Update collab permission tests and minor fixes
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -52,3 +52,5 @@ FROM
|
||||
ALTER TABLE internal.article
|
||||
DROP COLUMN article_weight;
|
||||
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON api.article TO authenticated_user;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -33,3 +33,5 @@ SELECT
|
||||
FROM
|
||||
internal.website;
|
||||
|
||||
GRANT SELECT, UPDATE, DELETE ON api.website TO authenticated_user;
|
||||
|
||||
|
||||
@@ -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: [
|
||||
{
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user