init
This commit is contained in:
87
tests/test_tools.py
Normal file
87
tests/test_tools.py
Normal 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>教3-520<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 == "教3-520"
|
||||
|
||||
|
||||
def test_create_course_double_weeks():
|
||||
"""测试 create_course 解析双周课程"""
|
||||
course = create_course("计算机系统基础Ⅰ(混合式)<br>2-16双(3,4)<br>李维维<br>教3-512<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 == "教3-512"
|
||||
|
||||
|
||||
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 == "教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]
|
||||
Reference in New Issue
Block a user