Files
njupt-mcp/tests/test_tools.py
2026-03-31 20:51:44 +08:00

88 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""测试工具函数"""
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]