修复项目配置草稿原子保存逻辑
This commit is contained in:
@@ -3,7 +3,12 @@ from types import SimpleNamespace
|
||||
|
||||
from fastapi import HTTPException
|
||||
|
||||
from app.api.v1.studies import _apply_project_publish_snapshot_to_study, _validate_setup_data
|
||||
from app.api.v1.studies import (
|
||||
_apply_project_publish_snapshot_to_study,
|
||||
_build_default_setup_config_from_study,
|
||||
_resolve_setup_project_snapshot,
|
||||
_validate_setup_data,
|
||||
)
|
||||
from app.schemas.study_setup_config import ProjectPublishSnapshot, StudySetupConfigData
|
||||
|
||||
|
||||
@@ -172,6 +177,78 @@ def test_project_info_is_part_of_setup_config_payload():
|
||||
assert payload["enrollmentPlan"]["totalTarget"] == 120
|
||||
|
||||
|
||||
def test_default_setup_config_includes_project_info_snapshot():
|
||||
study = SimpleNamespace(
|
||||
code="PRJ-DEFAULT",
|
||||
name="默认项目",
|
||||
project_full_name="默认项目全称",
|
||||
sponsor="申办方",
|
||||
protocol_no="PROTO-DEFAULT",
|
||||
lead_unit="组长单位",
|
||||
principal_investigator="PI",
|
||||
main_pm="PM",
|
||||
research_analysis="III期",
|
||||
research_product="研究药物",
|
||||
control_product="对照药物",
|
||||
indication="适应症",
|
||||
research_population="研究人群",
|
||||
research_design="随机双盲",
|
||||
plan_start_date=date(2026, 6, 1),
|
||||
plan_end_date=date(2026, 12, 31),
|
||||
planned_site_count=8,
|
||||
planned_enrollment_count=120,
|
||||
enrollment_monthly_goal_note="",
|
||||
enrollment_stage_breakdown="",
|
||||
status="ACTIVE",
|
||||
visit_schedule=[
|
||||
{
|
||||
"visit_code": "V1",
|
||||
"baseline_offset_days": 7,
|
||||
"window_before_days": 1,
|
||||
"window_after_days": 2,
|
||||
}
|
||||
],
|
||||
)
|
||||
|
||||
draft = _build_default_setup_config_from_study(study, [])
|
||||
|
||||
assert draft.projectInfo.code == "PRJ-DEFAULT"
|
||||
assert draft.projectInfo.name == "默认项目"
|
||||
assert draft.projectInfo.planned_enrollment_count == 120
|
||||
assert draft.projectInfo.visit_schedule[0].visit_code == "V1"
|
||||
|
||||
|
||||
def test_empty_project_info_does_not_fallback_to_study_snapshot():
|
||||
study = SimpleNamespace(
|
||||
code="PRJ-MASTER",
|
||||
name="主表项目",
|
||||
project_full_name="",
|
||||
sponsor="",
|
||||
protocol_no="",
|
||||
lead_unit="",
|
||||
principal_investigator="",
|
||||
main_pm="",
|
||||
research_analysis="",
|
||||
research_product="",
|
||||
control_product="",
|
||||
indication="",
|
||||
research_population="",
|
||||
research_design="",
|
||||
plan_start_date=None,
|
||||
plan_end_date=None,
|
||||
planned_site_count=None,
|
||||
planned_enrollment_count=None,
|
||||
status="DRAFT",
|
||||
visit_schedule=[],
|
||||
)
|
||||
draft = StudySetupConfigData()
|
||||
|
||||
snapshot = _resolve_setup_project_snapshot(draft, study)
|
||||
|
||||
assert snapshot.code == ""
|
||||
assert snapshot.name == ""
|
||||
|
||||
|
||||
def test_apply_project_publish_snapshot_updates_formal_study_fields():
|
||||
study = SimpleNamespace(
|
||||
code="PRJ-001",
|
||||
|
||||
Reference in New Issue
Block a user