修复MySQL问题

This commit is contained in:
2026-07-27 17:27:17 +08:00 Unverified
parent 514689c7e8
commit 2e422acd19
5 changed files with 79 additions and 24 deletions
@@ -9,7 +9,7 @@ namespace Jiaowu.Api.Tests;
public sealed class ExamArrangementServiceTests
{
[Fact]
public async Task Normal_arrangement_only_updates_selected_sessions_and_requested_resource()
public async Task Normal_arrangement_only_updates_selected_session()
{
await using var connection = new SqliteConnection("Data Source=:memory:");
await connection.OpenAsync();
@@ -37,21 +37,27 @@ public sealed class ExamArrangementServiceTests
plan.Id,
[selected.Id],
assignClassrooms: true,
assignInvigilators: false,
assignInvigilators: true,
CancellationToken.None);
var persistedSelected = await db.ExamSessions.FindAsync(selected.Id);
var persistedUntouched = await db.ExamSessions.FindAsync(untouched.Id);
var persistedSelected = await db.ExamSessions
.Include(x => x.Invigilators)
.SingleAsync(x => x.Id == selected.Id);
var persistedUntouched = await db.ExamSessions
.Include(x => x.Invigilators)
.SingleAsync(x => x.Id == untouched.Id);
Assert.True(result.Success);
Assert.NotNull(persistedSelected!.ClassroomId);
Assert.Null(persistedUntouched!.ClassroomId);
Assert.Empty(persistedSelected.Invigilators);
Assert.NotNull(persistedSelected.ClassroomId);
Assert.Null(persistedUntouched.ClassroomId);
Assert.Single(persistedSelected.Invigilators);
Assert.Empty(persistedUntouched.Invigilators);
Assert.Contains("1个场次处理完成", result.Message);
Assert.Contains("1名监考教师", result.Message);
Assert.Contains("程序设计", result.Message);
}
[Fact]
public async Task Makeup_arrangement_only_updates_selected_sessions_and_requested_resource()
public async Task Makeup_arrangement_only_updates_selected_session()
{
await using var connection = new SqliteConnection("Data Source=:memory:");
await connection.OpenAsync();
@@ -79,16 +85,22 @@ public sealed class ExamArrangementServiceTests
plan.Id,
[selected.Id],
assignClassrooms: true,
assignInvigilators: false,
assignInvigilators: true,
CancellationToken.None);
var persistedSelected = await db.MakeupExamSessions.FindAsync(selected.Id);
var persistedUntouched = await db.MakeupExamSessions.FindAsync(untouched.Id);
var persistedSelected = await db.MakeupExamSessions
.Include(x => x.Invigilators)
.SingleAsync(x => x.Id == selected.Id);
var persistedUntouched = await db.MakeupExamSessions
.Include(x => x.Invigilators)
.SingleAsync(x => x.Id == untouched.Id);
Assert.True(result.Success);
Assert.NotNull(persistedSelected!.ClassroomId);
Assert.Null(persistedUntouched!.ClassroomId);
Assert.Empty(persistedSelected.Invigilators);
Assert.NotNull(persistedSelected.ClassroomId);
Assert.Null(persistedUntouched.ClassroomId);
Assert.Single(persistedSelected.Invigilators);
Assert.Empty(persistedUntouched.Invigilators);
Assert.Contains("1个场次处理完成", result.Message);
Assert.Contains("1名监考教师", result.Message);
Assert.Contains("程序设计", result.Message);
}
@@ -175,6 +187,13 @@ public sealed class ExamArrangementServiceTests
CourseId = secondCourse.Id,
Status = TeachingTaskStatus.Published
};
var invigilator = new Teacher
{
TeacherNumber = $"INVIGILATOR-{suffix}",
Name = "监考教师",
CollegeId = college.Id,
Status = TeacherStatus.Active
};
db.AddRange(
term,
@@ -186,6 +205,7 @@ public sealed class ExamArrangementServiceTests
secondCourse,
firstTask,
secondTask,
invigilator,
new ScheduleTimeSlot
{
AcademicTermId = term.Id,
@@ -1,4 +1,5 @@
using Jiaowu.Api.Infrastructure.Persistence;
using Jiaowu.Api.Infrastructure.Exams;
using Jiaowu.Api.Infrastructure.Teaching;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
@@ -99,6 +100,21 @@ public sealed class MySqlMigrationTests
Assert.Contains(ids[1].ToString(), sql, StringComparison.OrdinalIgnoreCase);
}
[Fact]
public void MySql_invigilator_candidate_query_is_translatable_without_uuid_ordering()
{
using var db = new AppDbContext(CreateMySqlOptions());
var excludedTeacherId =
Guid.Parse("11111111-1111-1111-1111-111111111111");
var sql = InvigilatorCandidateQuery
.Create(db, [excludedTeacherId])
.ToQueryString();
Assert.Contains("Teachers", sql, StringComparison.OrdinalIgnoreCase);
Assert.DoesNotContain("UUID(", sql, StringComparison.OrdinalIgnoreCase);
}
[Fact]
public void MySql_teaching_task_roster_query_is_translatable()
{