From 3f96c9c6502243b06efd4bb34a189e72e3a5557c Mon Sep 17 00:00:00 2001
From: yearning <10538594+wangweifeng1999@user.noreply.gitee.com>
Date: 星期一, 28 九月 2026 19:24:55 +0800
Subject: [PATCH] 复制项目

---
 backend/tests/test_import_service.py |   62 +++++++++++++++++++++++++++++++
 1 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/backend/tests/test_import_service.py b/backend/tests/test_import_service.py
new file mode 100644
index 0000000..33f20f5
--- /dev/null
+++ b/backend/tests/test_import_service.py
@@ -0,0 +1,62 @@
+import pytest
+from fastapi import HTTPException
+
+from app.import_service import (
+    _collect_exam_ids,
+    _parse_exam_to_paper_sql_map,
+    _resolve_exam_paper_map,
+)
+
+
+def test_collect_exam_ids_ok():
+    rows = [{"exam_id": 102}, {"exam_id": 101}, {"exam_id": 101}]
+    assert _collect_exam_ids(rows) == [101, 102]
+
+
+def test_collect_exam_ids_empty():
+    with pytest.raises(HTTPException) as exc:
+        _collect_exam_ids([{"exam_id": None}, {}])
+    assert exc.value.status_code == 400
+
+
+def test_parse_exam_to_paper_sql_map():
+    sql = """
+    INSERT INTO examination_exam (id, paper_source_id, name) VALUES (101, 9001, 'a');
+    INSERT INTO examination_exam (id, paper_id, name) VALUES (102, 9002, 'b');
+    """
+    m = _parse_exam_to_paper_sql_map(sql)
+    assert m == {101: 9001, 102: 9002}
+
+
+def test_resolve_single_paper_multi_exam():
+    paper_rows = [
+        {"id": 9001, "external_paper_id": "P1", "revision": "1"},
+    ]
+    exam_rows_exam_ids = [101, 102]
+    files: dict[str, bytes] = {}
+    m = _resolve_exam_paper_map(exam_rows_exam_ids, paper_rows, files)
+    assert m == {101: 9001, 102: 9001}
+
+
+def test_resolve_multi_paper_requires_exam_sql():
+    paper_rows = [
+        {"id": 9001, "external_paper_id": "P1", "revision": "1"},
+        {"id": 9002, "external_paper_id": "P2", "revision": "1"},
+    ]
+    with pytest.raises(HTTPException) as exc:
+        _resolve_exam_paper_map([101, 102], paper_rows, {})
+    assert "examination_exam" in exc.value.detail
+
+
+def test_resolve_multi_paper_with_exam_sql():
+    paper_rows = [
+        {"id": 9001, "external_paper_id": "P1", "revision": "1"},
+        {"id": 9002, "external_paper_id": "P2", "revision": "1"},
+    ]
+    exam_sql = """
+    INSERT INTO examination_exam (id, paper_source_id) VALUES (101, 9001);
+    INSERT INTO examination_exam (id, paper_source_id) VALUES (102, 9002);
+    """
+    files = {"examination_exam.sql": exam_sql.encode()}
+    m = _resolve_exam_paper_map([101, 102], paper_rows, files)
+    assert m == {101: 9001, 102: 9002}

--
Gitblit v1.8.0