53 lines
2.5 KiB
JavaScript
53 lines
2.5 KiB
JavaScript
import { readFileSync } from "node:fs";
|
|
import { join } from "node:path";
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
const root = process.cwd();
|
|
const navigationSource = readFileSync(
|
|
join(root, "src/components/models/navigation/items/NavigationMenuItemsUser.vue"),
|
|
"utf8"
|
|
).replace(/\r\n/g, "\n");
|
|
const subusersViewSource = readFileSync(
|
|
join(root, "src/views/dashboards/superUserDashboard/Subusers.vue"),
|
|
"utf8"
|
|
).replace(/\r\n/g, "\n");
|
|
const routerSource = readFileSync(join(root, "src/router.js"), "utf8").replace(/\r\n/g, "\n");
|
|
const superuserNavigationSource = readFileSync(
|
|
join(root, "src/components/models/navigation/items/NavigationMenuItemsSuperUser.vue"),
|
|
"utf8"
|
|
).replace(/\r\n/g, "\n");
|
|
const navigationMenuItemSource = readFileSync(
|
|
join(root, "src/components/viewport/page/headers/menu/NavigationMenuItem.vue"),
|
|
"utf8"
|
|
).replace(/\r\n/g, "\n");
|
|
|
|
describe("Subusers navigation contract", () => {
|
|
it("points the chauffører menu item to the subusers page", () => {
|
|
expect(navigationSource).toContain("to: `/user/subusers`");
|
|
expect(navigationSource).not.toContain("to: `/user/subusers/grants`");
|
|
});
|
|
|
|
it("gates the subusers page with the shared subuser-management permission helper", () => {
|
|
expect(subusersViewSource).toContain('SessionUser.canManageSubusers("list")');
|
|
expect(navigationSource).toContain("permissions: ['list_own_subusers', 'SUBUSERS_LIST']");
|
|
expect(navigationSource).not.toContain("permissions: ['user', 'SUBUSERS_LIST']");
|
|
expect(subusersViewSource).toContain('default: "customer"');
|
|
});
|
|
|
|
it("registers a superuser chauffører page with the superuser endpoint", () => {
|
|
expect(routerSource).toContain("path: '/superuser/subusers'");
|
|
expect(routerSource).toContain("props: { mode: 'superuser' }");
|
|
expect(superuserNavigationSource).toContain('label: "Chauffører", to: "/superuser/subusers"');
|
|
expect(subusersViewSource).toContain("SessionUser.canAccessSuperUser()");
|
|
expect(subusersViewSource).toContain(":endpoint=\"isSuperuserPage ? '/superuser/subusers' : '/subusers'\"");
|
|
});
|
|
|
|
it("checks child navigation permissions against the child item", () => {
|
|
expect(navigationMenuItemSource).toContain("return hasItemPermissions(child) && hasDepartmentIdInPath");
|
|
expect(navigationMenuItemSource).toContain("return hasItemPermissions(child);");
|
|
expect(navigationMenuItemSource).not.toContain(
|
|
"return hasPermissions.value && hasDepartmentIdInPath(router.currentRoute.value.path);\n }\n return hasPermissions.value;"
|
|
);
|
|
});
|
|
});
|