import { readFileSync } from "node:fs"; import { resolve } from "node:path"; import { describe, expect, it } from "vitest"; const readView = (path: string) => readFileSync(resolve(__dirname, path), "utf8"); describe("detail breadcrumb contexts", () => { it("uses contract numbers for contract fee detail breadcrumbs", () => { const source = readView("./fees/ContractFeeDetail.vue"); expect(source).toContain("study.setViewContext({"); expect(source).toContain("siteName"); expect(source).toContain("pageTitle: detail.contract_no || TEXT.menu.feeContracts"); }); it("uses shipment tracking or batch numbers for drug shipment detail breadcrumbs", () => { const source = readView("./drug/ShipmentDetail.vue"); expect(source).toContain("study.setViewContext({"); expect(source).toContain("siteName: detail.site_name || TEXT.common.fallback"); expect(source).toContain("pageTitle: detail.tracking_no || detail.batch_no || TEXT.modules.drugShipments.detailTitle"); }); it("uses equipment names for material equipment detail breadcrumbs", () => { const source = readView("./materials/MaterialEquipmentDetail.vue"); expect(source).toContain("study.setViewContext({"); expect(source).toContain("pageTitle: detail.name || TEXT.modules.materialEquipment.detailTitle"); }); it("uses subject numbers and centers for subject detail breadcrumbs", () => { const source = readView("./subjects/SubjectDetail.vue"); expect(source).toContain("study.setViewContext({"); expect(source).toContain("siteName: siteMap.value[detail.site_id] || TEXT.common.fallback"); expect(source).toContain("pageTitle: detail.subject_no || TEXT.modules.subjectManagement.screeningNo"); }); it("uses startup record identifiers for startup detail breadcrumbs", () => { const feasibility = readView("./startup/FeasibilityDetail.vue"); const ethics = readView("./startup/EthicsDetail.vue"); const kickoff = readView("./startup/KickoffDetail.vue"); const training = readView("./startup/TrainingDetail.vue"); expect(feasibility).toContain("pageTitle: detail.project_no ||"); expect(ethics).toContain("pageTitle: detail.approval_no ||"); expect(kickoff).toContain("pageTitle: siteInfo.name ? `${siteInfo.name} ${TEXT.modules.startupMeetingAuth.kickoffTab}`"); expect(training).toContain("pageTitle: detail.name || TEXT.modules.startupMeetingAuth.trainingDetailTitle"); }); it("uses knowledge item titles for knowledge detail breadcrumbs", () => { const precaution = readView("./knowledge/PrecautionDetail.vue"); const faq = readView("./FaqDetail.vue"); expect(precaution).toContain("pageTitle: detail.title || TEXT.modules.knowledgeNotes.detailTitle"); expect(faq).toContain("const questionTitle = String(faqData.question || \"\").trim()"); expect(faq).toContain("pageTitle: questionTitle ? questionTitle.slice(0, 24) : TEXT.modules.knowledgeMedicalConsult.detailTitle"); }); it("uses project names for admin project detail breadcrumbs", () => { const source = readView("./admin/ProjectDetail.vue"); expect(source).toContain("studyStore.setViewContext({"); expect(source).toContain("pageTitle: project.value.name || TEXT.modules.adminProjects.detailTitle"); }); });