修复演示恢复项目帧数据
- 恢复演示出厂设置后直接解析演视LC视频序列并生成可打开帧序列 - 保持演视DICOM序列按文件名自然顺序恢复并生成帧 - 增加 MinIO 浏览器访问端点配置,修复 Docker 部署中封面和帧图预签名地址使用容器内主机名的问题 - 更新管理员恢复测试覆盖视频和 DICOM 帧数量 - 更新 README 和前后端契约/设计/测试文档中的演示恢复说明
This commit is contained in:
@@ -132,6 +132,11 @@ def test_demo_factory_reset_leaves_admin_and_parsed_demo_dicom(client, db_sessio
|
||||
frame_path = tmp_path / f"frame_{idx:06d}.jpg"
|
||||
frame_path.write_bytes(b"frame")
|
||||
parsed_frame_paths.append(str(frame_path))
|
||||
parsed_video_frame_paths = []
|
||||
for idx in range(2):
|
||||
frame_path = tmp_path / f"video_frame_{idx:06d}.jpg"
|
||||
frame_path.write_bytes(b"video-frame")
|
||||
parsed_video_frame_paths.append(str(frame_path))
|
||||
|
||||
uploaded = []
|
||||
monkeypatch.setattr("services.demo_media.upload_file", lambda object_name, data, content_type, length: uploaded.append({
|
||||
@@ -140,6 +145,10 @@ def test_demo_factory_reset_leaves_admin_and_parsed_demo_dicom(client, db_sessio
|
||||
"content_type": content_type,
|
||||
"length": length,
|
||||
}))
|
||||
monkeypatch.setattr(
|
||||
"services.demo_media.parse_video",
|
||||
lambda video_path_arg, output_dir, fps, target_width: (parsed_video_frame_paths, 30.0),
|
||||
)
|
||||
monkeypatch.setattr("services.demo_media.parse_dicom", lambda dicom_dir_arg, output_dir: parsed_frame_paths)
|
||||
monkeypatch.setattr(
|
||||
"services.demo_media.upload_frames_to_minio",
|
||||
@@ -195,9 +204,9 @@ def test_demo_factory_reset_leaves_admin_and_parsed_demo_dicom(client, db_sessio
|
||||
assert data["project"]["frame_count"] == 3
|
||||
assert data["project"]["video_path"] == f"uploads/{data['project']['id']}/dicom"
|
||||
assert [project["name"] for project in data["projects"]] == ["演视LC视频序列", "演视DICOM序列"]
|
||||
assert data["projects"][0]["status"] == "pending"
|
||||
assert data["projects"][0]["status"] == PROJECT_STATUS_READY
|
||||
assert data["projects"][0]["source_type"] == "video"
|
||||
assert data["projects"][0]["frame_count"] == 0
|
||||
assert data["projects"][0]["frame_count"] == 2
|
||||
assert data["projects"][1]["status"] == PROJECT_STATUS_READY
|
||||
assert data["projects"][1]["source_type"] == "dicom"
|
||||
assert data["projects"][1]["frame_count"] == 3
|
||||
@@ -211,8 +220,18 @@ def test_demo_factory_reset_leaves_admin_and_parsed_demo_dicom(client, db_sessio
|
||||
|
||||
assert [user.username for user in db_session.query(User).all()] == ["admin"]
|
||||
assert db_session.query(Project).count() == 2
|
||||
assert db_session.query(Frame).count() == 3
|
||||
assert [frame.source_frame_number for frame in db_session.query(Frame).order_by(Frame.frame_index).all()] == [0, 1, 2]
|
||||
assert db_session.query(Frame).count() == 5
|
||||
frames_by_project = {}
|
||||
for project in db_session.query(Project).order_by(Project.id).all():
|
||||
frames_by_project[project.name] = [
|
||||
frame.source_frame_number
|
||||
for frame in db_session.query(Frame)
|
||||
.filter(Frame.project_id == project.id)
|
||||
.order_by(Frame.frame_index)
|
||||
.all()
|
||||
]
|
||||
assert frames_by_project["演视LC视频序列"] == [0, 1]
|
||||
assert frames_by_project["演视DICOM序列"] == [0, 1, 2]
|
||||
assert db_session.query(Annotation).count() == 0
|
||||
assert db_session.query(Mask).count() == 0
|
||||
assert db_session.query(ProcessingTask).count() == 0
|
||||
|
||||
Reference in New Issue
Block a user