import { describe, expect, it } from "vitest"; import { readFileSync } from "node:fs"; import { resolve } from "node:path"; const readEntryView = () => readFileSync(resolve(__dirname, "./DesktopProjectEntry.vue"), "utf8"); describe("DesktopProjectEntry", () => { it("offers system management access only to admins and authorized project PMs", () => { const source = readEntryView(); expect(source).toContain("工作台总控"); expect(source).toContain("选择目标项目"); expect(source).toContain("Desktop Workbench"); expect(source).toContain('class="entry-background-grid"'); expect(source).toContain("系统管理"); expect(source).toContain("ADMIN SYSTEM"); expect(source).toContain("SYSTEM MANAGEMENT"); expect(source).toContain("系统管理"); expect(source).toContain('v-if="canEnterManagement"'); expect(source).toContain('projects.value.some((project) => project.role_in_study === "PM")'); expect(source).toContain("project-cards-grid"); expect(source).toContain("card-action-bar"); expect(source).toContain("进入项目工作空间"); expect(source).toContain('router.push(isAdmin.value ? "/admin/users" : "/admin/projects")'); expect(source).toContain("studyStore.clearCurrentStudy()"); expect(source).toContain("studyStore.setCurrentStudy(pmProject)"); expect(source).toContain("projects.value.find((project) => project.role_in_study === \"PM\")"); expect(source).toContain("fetchStudies()"); expect(source).toContain("studyStore.setCurrentStudy(project)"); expect(source).toContain("studyStore.loadCurrentStudyPermissions()"); expect(source).toContain("findFirstAccessibleProjectPath"); expect(source).toContain("当前账号暂无该项目可访问模块"); expect(source).toContain("forceLogout(LOGOUT_REASON_MANUAL)"); expect(source).not.toContain("Web Workbench"); expect(source).not.toContain("PROJECT ADMIN"); }); });