917ab7ccf1
Add early termination visit workflow with ordering, non-applicable visit handling, visit window display, and medication adherence support. Extend monitoring visit issue template fields, site scoping, setup draft project info handling, login security UI, attachment behavior, and related tests/migrations.
52 lines
2.5 KiB
TypeScript
52 lines
2.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
||
import { readFileSync } from "node:fs";
|
||
import { resolve } from "node:path";
|
||
|
||
const readSubjectDetail = () => readFileSync(resolve(__dirname, "./SubjectDetail.vue"), "utf8");
|
||
|
||
describe("SubjectDetail medication adherence", () => {
|
||
it("adds a medication adherence tab with editable actual count", () => {
|
||
const source = readSubjectDetail();
|
||
|
||
expect(source).toContain('name="medicationAdherence"');
|
||
expect(source).toContain("actual_medication_count");
|
||
expect(source).toContain("保存用药次数");
|
||
expect(source).toContain("实际用药次数为试验期间实际药物暴露次数");
|
||
expect(source).toContain("75%~125% 范围内(包含边界值)");
|
||
});
|
||
|
||
it("uses baseline and termination visit actual dates for adherence calculation", () => {
|
||
const source = readSubjectDetail();
|
||
|
||
expect(source).toContain("const medicationStartDate = computed(() => detail.baseline_date || \"\");");
|
||
expect(source).toContain('new Set(["终止治疗", "提前终止"])');
|
||
expect(source).toContain("return Math.floor((end.getTime() - start.getTime()) / 86400000) + 1;");
|
||
});
|
||
|
||
it("marks adherence outside 75 to 125 percent as abnormal", () => {
|
||
const source = readSubjectDetail();
|
||
|
||
expect(source).toContain("if (rate < 75 || rate > 125) return \"danger\";");
|
||
expect(source).not.toContain("if (rate < 80 || rate > 120) return \"danger\";");
|
||
});
|
||
|
||
it("provides a dedicated early termination workflow", () => {
|
||
const source = readSubjectDetail();
|
||
|
||
expect(source).toContain("openEarlyTerminationDialog");
|
||
expect(source).toContain("createEarlyTerminationVisit");
|
||
expect(source).toContain("return \"不适用\";");
|
||
expect(source).toContain("getVisitStatusLabel");
|
||
expect(source).toContain("ElMessage.success(TEXT.common.messages.saveSuccess);");
|
||
expect(source).toContain("提前终止已保存,刷新数据失败,请手动刷新页面");
|
||
expect(source).toContain("提前终止表示受试者在方案最后一个计划访视窗口期前停止治疗");
|
||
expect(source).toContain("validateEarlyTerminationDateInput");
|
||
expect(source).toContain("提前终止日期必须早于最后计划访视窗口期开始日");
|
||
expect(source).toContain("getVisitPlannedDateLabel");
|
||
expect(source).toContain("getVisitWindowRangeLabel");
|
||
expect(source).toContain("~");
|
||
expect(source).toContain("row.window_start === row.planned_date && row.window_end === row.planned_date");
|
||
expect(source).toContain("return \"不适用\";");
|
||
});
|
||
});
|