feat(subjects): add visit drawer and editable screening dates

This commit is contained in:
Cheng Zhou
2026-06-08 11:01:32 +08:00
parent e5ed18c3cd
commit a3f6a04f35
15 changed files with 1515 additions and 525 deletions
@@ -86,7 +86,8 @@ describe("SubjectDetail medication adherence", () => {
expect(source).toContain("v-if=\"canUpdateAe || canDeleteAe\"");
expect(source).toContain("v-if=\"canUpdatePd || canDeletePd\"");
expect(source).toContain("const canSaveHistory = computed(() => (historyEditingId.value ? canUpdateHistory.value : canCreateHistory.value));");
expect(source).toContain("const canSaveVisit = computed(() => (visitEditingId.value ? canUpdateVisit.value : canCreateVisit.value));");
expect(source).toContain(':can-create="canCreateVisit"');
expect(source).toContain(':can-update="canUpdateVisit"');
expect(source).toContain("const canSaveAe = computed(() => (aeEditingId.value ? canUpdateAe.value : canCreateAe.value));");
expect(source).toContain("const canSavePd = computed(() => (pdEditingId.value ? canUpdatePd.value : canCreatePd.value));");
expect(source).toContain("const canReadHistory = computed(() => canUseApiPermission(\"subject_histories:read\"));");
@@ -111,4 +112,39 @@ describe("SubjectDetail drawer editor", () => {
expect(source).not.toContain("subjectEditing");
expect(source).not.toContain("saveSubjectEdit");
});
it("uses drawer editors for participant subresource create and edit flows", () => {
const source = readSubjectDetail();
expect(source).toContain("VisitEditorDrawer");
expect(source).toContain("adherenceDrawerVisible");
expect(source).toContain("aeDrawerVisible");
expect(source).toContain("pdDrawerVisible");
expect(source).toContain("openVisitDrawer");
expect(source).toContain("openAeDrawer");
expect(source).toContain("openPdDrawer");
expect(source).toContain("openMedicationAdherenceDrawer");
expect(source).not.toContain("visitDialogVisible");
expect(source).not.toContain("aeDialogVisible");
expect(source).not.toContain("pdDialogVisible");
expect(source).not.toContain("adherenceEditing");
expect(source).not.toContain("<el-dialog v-if=\"visitDialogVisible\"");
expect(source).not.toContain("<el-dialog v-if=\"aeDialogVisible\"");
expect(source).not.toContain("<el-dialog v-if=\"pdDialogVisible\"");
});
});
describe("VisitEditorDrawer business form", () => {
const readVisitEditorDrawer = () => readFileSync(resolve(__dirname, "./VisitEditorDrawer.vue"), "utf8");
it("keeps create and edit visit flows on the same business fields", () => {
const source = readVisitEditorDrawer();
expect(source).not.toContain("<template v-if=\"isEditing\">");
expect(source).not.toContain("<template v-else>");
expect(source).toContain("v-model=\"form.actual_date\"");
expect(source).toContain("v-model=\"form.notes\"");
expect(source).toContain("actual_date: form.actual_date || null");
expect(source).toContain("notes: form.notes || null");
});
});