This commit is contained in:
2026-03-31 20:51:44 +08:00
parent 5ca759d280
commit d30e4db319
11 changed files with 580 additions and 204 deletions

87
tests/test_tools.py Normal file
View File

@@ -0,0 +1,87 @@
"""测试工具函数"""
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("概率论与数理统计<br>1-17单(1,2)<br>王雪红<br>教3520<br>")
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 == "教3520"
def test_create_course_double_weeks():
"""测试 create_course 解析双周课程"""
course = create_course("计算机系统基础Ⅰ(混合式)<br>2-16双(3,4)<br>李维维<br>教3512<br>")
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 == "教3512"
def test_create_course_with_default_classes():
"""测试 create_course 在需要 default_classes_start 时的解析"""
course = create_course("大学英语IV<br>2节/双周<br> <br> <br>", 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 == "教4101"
# 验证单周课程
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]