import { describe, expect, it } from "vitest"; import { readFileSync } from "node:fs"; import { resolve } from "node:path"; const readSource = () => readFileSync(resolve(__dirname, "./StartupFeasibilityEthics.vue"), "utf8"); describe("StartupFeasibilityEthics project permissions", () => { it("hides initiation and ethics create/delete actions by their backend operation permissions", () => { const source = readSource(); expect(source).toContain('canUseApiPermission("startup_initiation:create")'); expect(source).toContain('canUseApiPermission("startup_initiation:read")'); expect(source).toContain('canUseApiPermission("startup_initiation:update")'); expect(source).toContain('canUseApiPermission("startup_initiation:delete")'); expect(source).toContain('canUseApiPermission("startup_ethics:read")'); expect(source).toContain('canUseApiPermission("startup_ethics:create")'); expect(source).toContain('canUseApiPermission("startup_ethics:update")'); expect(source).toContain('canUseApiPermission("startup_ethics:delete")'); expect(source).toContain('v-if="canReadFeasibility"'); expect(source).toContain('v-if="canReadEthics"'); expect(source).toContain("if (!canReadFeasibility.value)"); expect(source).toContain("if (!canReadEthics.value)"); expect(source).toContain('v-if="activeTab === \'feasibility\' && canCreateFeasibility"'); expect(source).toContain('v-if="canUpdateFeasibility"'); expect(source).toContain('v-if="canDeleteFeasibility"'); expect(source).toContain('v-if="activeTab === \'ethics\' && canCreateEthics"'); expect(source).toContain('v-if="canUpdateEthics"'); expect(source).toContain('v-if="canDeleteEthics"'); }); }); describe("StartupFeasibilityEthics drawer editors", () => { it("opens initiation and ethics create forms in drawers instead of routing to form pages", () => { const source = readSource(); expect(source).toContain("FeasibilityEditorDrawer"); expect(source).toContain("EthicsEditorDrawer"); expect(source).toContain("feasibilityDrawerVisible"); expect(source).toContain("ethicsDrawerVisible"); expect(source).not.toContain('router.push("/startup/feasibility/new")'); expect(source).not.toContain('router.push("/startup/ethics/new")'); }); it("opens initiation and ethics edit drawers from table action columns", () => { const source = readSource(); expect(source).toContain(':record-id="editingFeasibilityId"'); expect(source).toContain(':record-id="editingEthicsId"'); expect(source).toContain("const editingFeasibilityId = ref();"); expect(source).toContain("const editingEthicsId = ref();"); expect(source).toContain("@click.stop=\"openFeasibilityEditor(scope.row)\""); expect(source).toContain("@click.stop=\"openEthicsEditor(scope.row)\""); expect(source).toContain("editingFeasibilityId.value = row?.id;"); expect(source).toContain("editingEthicsId.value = row?.id;"); }); });