"""测试工具函数""" from pathlib import Path import pytest from njupt_mcp.resources.types import Course from njupt_mcp.tools.course.create_course_schedule import ( create_course, create_course_schedule, ) TEST_HTML_PATH = Path(__file__).parent.parent / "src" / "njupt_mcp" / "resources" / "course_schedule" / "B240423-22.html" def test_create_course_basic(): """测试 create_course 解析常规课程字符串""" course = create_course("概率论与数理统计
1-17单(1,2)
王雪红
教3-520
") assert course.name == "概率论与数理统计" assert course.weeks == [1, 3, 5, 7, 9, 11, 13, 15, 17] assert course.classes == [1, 2] assert course.teacher == "王雪红" assert course.classroom == "教3-520" def test_create_course_double_weeks(): """测试 create_course 解析双周课程""" course = create_course("计算机系统基础Ⅰ(混合式)
2-16双(3,4)
李维维
教3-512
") assert course.name == "计算机系统基础Ⅰ(混合式)" assert course.weeks == [2, 4, 6, 8, 10, 12, 14, 16] assert course.classes == [3, 4] assert course.teacher == "李维维" assert course.classroom == "教3-512" def test_create_course_with_default_classes(): """测试 create_course 在需要 default_classes_start 时的解析""" course = create_course("大学英语IV
2节/双周


", default_classes_start=3) assert course.name == "大学英语IV" assert course.weeks == [2, 4, 6, 8, 10, 12, 14, 16] assert course.classes == [3, 4] assert course.teacher is None assert course.classroom is None def test_create_course_schedule_from_html(): """测试从 HTML 文件解析课程表""" courses = create_course_schedule(str(TEST_HTML_PATH)) assert isinstance(courses, list) assert len(courses) == 20 assert all(isinstance(c, Course) for c in courses) # 验证几个典型课程 course_names = [c.name for c in courses] assert "计算机问题求解:使用算法(混合式)" in course_names assert "概率论与数理统计" in course_names assert "形势与政策IV" in course_names # 查找并验证特定课程 xingshi = next(c for c in courses if c.name == "形势与政策IV") assert xingshi.weeks == [6, 7, 8] assert xingshi.classes == [10, 11, 12] assert xingshi.teacher == "陈骏" assert xingshi.classroom == "教4-101" # 验证单周课程 gailv = [c for c in courses if c.name == "概率论与数理统计" and c.classes == [1, 2]][0] assert gailv.weeks == [1, 3, 5, 7, 9, 11, 13, 15, 17] # 验证合并单元格中的多课程(数据库系统基础出现两次,不同老师) db_courses = [c for c in courses if c.name == "数据库系统基础"] assert len(db_courses) == 2 teachers = {c.teacher for c in db_courses} assert teachers == {"黄楠", "李博文"} # 验证无教师/教室的课程(大学英语IV、体育 IV) english_courses = [c for c in courses if c.name == "大学英语IV"] assert len(english_courses) == 3 for c in english_courses: assert c.teacher is None assert c.classroom is None tiyu = [c for c in courses if c.name == "体育 IV"][0] assert tiyu.teacher is None assert tiyu.classroom is None assert tiyu.classes == [6, 7]