排课版本新建、编辑、复制、发布、归档和删除。
周课表视图,支持12节课、单双周和起止周。 自动校验教师、行政班、教室、时间段冲突。 校验教室容量、教学任务状态和学期范围。 SQLite 开发环境自动升级,MySQL 提供正式 EF Core 迁移。 Vue 已编译为静态文件并随 ASP.NET Core 发布,无需 npm run dev。 桌面端和390px移动端页面均已验收。
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
using Jiaowu.Api.Domain.Academic;
|
||||
using Jiaowu.Api.Infrastructure.Scheduling;
|
||||
|
||||
namespace Jiaowu.Api.Tests;
|
||||
|
||||
public sealed class ScheduleConflictTests
|
||||
{
|
||||
[Fact]
|
||||
public void Same_classroom_and_overlapping_weeks_conflict()
|
||||
{
|
||||
var classroomId = Guid.NewGuid();
|
||||
var first = Entry(classroomId, WeekPattern.All, new TeachingTask
|
||||
{
|
||||
TaskNumber = "TASK-1",
|
||||
Name = "教学班一"
|
||||
});
|
||||
var second = Entry(classroomId, WeekPattern.All, new TeachingTask
|
||||
{
|
||||
TaskNumber = "TASK-2",
|
||||
Name = "教学班二"
|
||||
});
|
||||
|
||||
Assert.True(ScheduleConflictDetector.TimeOverlaps(first, second));
|
||||
Assert.Equal("教室", ScheduleConflictDetector.ConflictReason(first, second));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Odd_and_even_week_arrangements_do_not_overlap()
|
||||
{
|
||||
var first = Entry(Guid.NewGuid(), WeekPattern.Odd, new TeachingTask
|
||||
{
|
||||
TaskNumber = "TASK-1",
|
||||
Name = "教学班一"
|
||||
});
|
||||
var second = Entry(Guid.NewGuid(), WeekPattern.Even, new TeachingTask
|
||||
{
|
||||
TaskNumber = "TASK-2",
|
||||
Name = "教学班二"
|
||||
});
|
||||
|
||||
Assert.False(ScheduleConflictDetector.TimeOverlaps(first, second));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Shared_teacher_conflicts_across_different_classrooms()
|
||||
{
|
||||
var teacherId = Guid.NewGuid();
|
||||
var firstTask = new TeachingTask
|
||||
{
|
||||
TaskNumber = "TASK-1",
|
||||
Name = "教学班一",
|
||||
Teachers = [new TeachingTaskTeacher { TeacherId = teacherId }]
|
||||
};
|
||||
var secondTask = new TeachingTask
|
||||
{
|
||||
TaskNumber = "TASK-2",
|
||||
Name = "教学班二",
|
||||
Teachers = [new TeachingTaskTeacher { TeacherId = teacherId }]
|
||||
};
|
||||
var first = Entry(Guid.NewGuid(), WeekPattern.All, firstTask);
|
||||
var second = Entry(Guid.NewGuid(), WeekPattern.All, secondTask);
|
||||
|
||||
Assert.Equal("教师", ScheduleConflictDetector.ConflictReason(first, second));
|
||||
}
|
||||
|
||||
private static ScheduleEntry Entry(
|
||||
Guid classroomId,
|
||||
WeekPattern weekPattern,
|
||||
TeachingTask task) =>
|
||||
new()
|
||||
{
|
||||
ClassroomId = classroomId,
|
||||
DayOfWeek = 1,
|
||||
StartPeriod = 1,
|
||||
PeriodCount = 2,
|
||||
StartWeek = 1,
|
||||
EndWeek = 16,
|
||||
WeekPattern = weekPattern,
|
||||
TeachingTask = task
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user