重构学员证书签发与批量导入流程

This commit is contained in:
Certificate System
2026-08-14 11:37:09 +08:00
parent 522f529c6a
commit 5e33657268
16 changed files with 1047 additions and 370 deletions

View File

@@ -6,10 +6,12 @@ from pydantic import ValidationError
from app.api.routes.admin_imports import (
COL_ISSUE_DATE,
COL_COURSE_END_DATE,
COL_COURSE_NAME,
COL_COURSE_START_DATE,
COL_NAME,
COL_PHONE,
COL_PROJECT,
COL_STAGE_NAME,
TEMPLATE_HEADERS,
build_import_template_workbook,
date_is_valid,
@@ -33,7 +35,7 @@ def test_row_errors_require_project_code_to_exist():
COL_COURSE_END_DATE: "2026-05-31",
COL_ISSUE_DATE: "2026-06-01",
}
assert "Project code is inactive or missing" in row_errors(row, {"DBY"})
assert "项目代码不存在或已停用" in row_errors(row, {"DBY"})
def test_date_is_valid_rejects_bad_text():
@@ -70,16 +72,20 @@ def test_import_template_contains_date_examples_and_validation():
instruction_sheet = workbook["填写说明"]
assert [cell.value for cell in data_sheet[1]] == TEMPLATE_HEADERS
assert data_sheet.column_dimensions["D"].number_format == "yyyy-mm-dd"
assert data_sheet.column_dimensions["F"].number_format == "yyyy-mm-dd"
assert len(data_sheet.data_validations.dataValidation) == 3
assert instruction_sheet["C5"].value == "2026-06-01"
assert "YYYY-MM-DD" in instruction_sheet["D5"].value
instruction_rows = {row[0].value: row for row in instruction_sheet.iter_rows(min_row=2)}
assert instruction_rows[COL_COURSE_START_DATE][2].value == "2026-06-01"
assert "实际开始日期" in instruction_rows[COL_COURSE_START_DATE][3].value
assert COL_COURSE_NAME in TEMPLATE_HEADERS
assert COL_STAGE_NAME in TEMPLATE_HEADERS
def test_certificate_create_rejects_reversed_course_period():
with pytest.raises(ValidationError, match="课程结束日期不能早于课程开始日期"):
CertificateCreate(
learner_id=1,
learner_name="张三",
learner_phone="13800000000",
project_code="DBY",
course_start_date="2026-06-30",
course_end_date="2026-06-01",
@@ -89,7 +95,8 @@ def test_certificate_create_rejects_reversed_course_period():
def test_certificate_create_has_no_issuer_field():
certificate = CertificateCreate(
learner_id=1,
learner_name="张三",
learner_phone="13800000000",
project_code="DBY",
course_start_date="2026-06-01",
course_end_date="2026-06-30",