test(nav): prototype visibility and client scoping on the new home page
This commit is contained in:
parent
2cb745779a
commit
dc45063508
1 changed files with 82 additions and 0 deletions
82
tests/integration/project-kind-and-nav.test.ts
Normal file
82
tests/integration/project-kind-and-nav.test.ts
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
import { describe, it, expect, beforeAll, afterAll } from "vitest";
|
||||
import PocketBase from "pocketbase";
|
||||
|
||||
import { APP_URL, DEMO, adminPb, requireServices, signIn } from "./helpers";
|
||||
|
||||
let admin: PocketBase;
|
||||
let ownClientId: string;
|
||||
|
||||
beforeAll(async () => {
|
||||
await requireServices();
|
||||
admin = await adminPb();
|
||||
|
||||
const client = await admin
|
||||
.collection("clients")
|
||||
.getFirstListItem(`slug = "${DEMO.clientSlug}"`);
|
||||
ownClientId = client.id;
|
||||
});
|
||||
|
||||
describe("a prototype is visible to its own client immediately", () => {
|
||||
let projectId: string;
|
||||
|
||||
afterAll(async () => {
|
||||
if (projectId) await admin.collection("projects").delete(projectId).catch(() => {});
|
||||
});
|
||||
|
||||
it("shows the Prototype tag on the home page for both roles", async () => {
|
||||
const stamp = Date.now();
|
||||
const project = await admin.collection("projects").create({
|
||||
client: ownClientId,
|
||||
name: `Kind probe ${stamp}`,
|
||||
slug: `kind-probe-${stamp}`,
|
||||
status: "active",
|
||||
kind: "prototype",
|
||||
});
|
||||
projectId = project.id;
|
||||
|
||||
const ownerCookie = await signIn(DEMO.ownerEmail, DEMO.ownerPassword);
|
||||
const ownerHtml = await fetch(`${APP_URL}/`, {
|
||||
headers: { cookie: ownerCookie },
|
||||
}).then((r) => r.text());
|
||||
expect(ownerHtml).toContain(`Kind probe ${stamp}`);
|
||||
expect(ownerHtml).toContain("Prototype");
|
||||
|
||||
const managerCookie = await signIn(DEMO.managerEmail, DEMO.managerPassword);
|
||||
const managerHtml = await fetch(`${APP_URL}/`, {
|
||||
headers: { cookie: managerCookie },
|
||||
}).then((r) => r.text());
|
||||
expect(managerHtml).toContain(`Kind probe ${stamp}`);
|
||||
});
|
||||
});
|
||||
|
||||
describe("client scoping is unchanged by the new nav", () => {
|
||||
it("keeps another client's project out of a manager's home page and Kanban flyout", async () => {
|
||||
const stamp = Date.now();
|
||||
const other = await admin
|
||||
.collection("clients")
|
||||
.create({ name: `Nav probe ${stamp}`, slug: `nav-probe-${stamp}`, active: true });
|
||||
const otherProject = await admin.collection("projects").create({
|
||||
client: other.id,
|
||||
name: `Nav probe project ${stamp}`,
|
||||
slug: `nav-probe-${stamp}`,
|
||||
status: "active",
|
||||
});
|
||||
|
||||
const cookie = await signIn(DEMO.managerEmail, DEMO.managerPassword);
|
||||
const html = await fetch(`${APP_URL}/`, { headers: { cookie } }).then((r) =>
|
||||
r.text()
|
||||
);
|
||||
|
||||
expect(html).not.toContain(`Nav probe project ${stamp}`);
|
||||
expect(html).not.toContain(`Nav probe ${stamp}`);
|
||||
|
||||
await admin.collection("projects").delete(otherProject.id);
|
||||
await admin.collection("clients").delete(other.id);
|
||||
});
|
||||
|
||||
it("renders the home page for the owner with the new grouped layout", async () => {
|
||||
const cookie = await signIn(DEMO.ownerEmail, DEMO.ownerPassword);
|
||||
const response = await fetch(`${APP_URL}/`, { headers: { cookie } });
|
||||
expect(response.status).toBe(200);
|
||||
});
|
||||
});
|
||||
Loading…
Reference in a new issue