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}
|