From d4abdd3db452a8506e488b64f7f000afbfd23996 Mon Sep 17 00:00:00 2001 From: biss Date: Sun, 9 Aug 2026 22:10:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/GradesController.cs | 1 + .../Controllers/MakeupExamsController.cs | 1 + .../TeachingWorkflowRosterTests.cs | 46 +++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/src/Jiaowu.Api/Controllers/GradesController.cs b/src/Jiaowu.Api/Controllers/GradesController.cs index 7be53db..3b499e3 100644 --- a/src/Jiaowu.Api/Controllers/GradesController.cs +++ b/src/Jiaowu.Api/Controllers/GradesController.cs @@ -151,6 +151,7 @@ public sealed class GradesController( var task = await AccessibleTasks() .Include(x => x.Teachers) + .ThenInclude(x => x.Teacher) .FirstOrDefaultAsync(x => x.Id == request.TeachingTaskId, cancellationToken); if (task is null) return NotFound(); if (task.Status is not (TeachingTaskStatus.Published or TeachingTaskStatus.Closed)) diff --git a/src/Jiaowu.Api/Controllers/MakeupExamsController.cs b/src/Jiaowu.Api/Controllers/MakeupExamsController.cs index 1fffc4f..99ab915 100644 --- a/src/Jiaowu.Api/Controllers/MakeupExamsController.cs +++ b/src/Jiaowu.Api/Controllers/MakeupExamsController.cs @@ -737,6 +737,7 @@ public sealed class MakeupExamsController( .Include(x => x.Enrollments) .Include(x => x.TeachingTask!) .ThenInclude(x => x.Teachers) + .ThenInclude(x => x.Teacher) .FirstOrDefaultAsync(x => x.Id == id, cancellationToken); if (session is null) return NotFound(); if (session.MakeupExamPlan!.Status != MakeupExamPlanStatus.Published) diff --git a/tests/Jiaowu.Api.Tests/TeachingWorkflowRosterTests.cs b/tests/Jiaowu.Api.Tests/TeachingWorkflowRosterTests.cs index c8abf01..5847976 100644 --- a/tests/Jiaowu.Api.Tests/TeachingWorkflowRosterTests.cs +++ b/tests/Jiaowu.Api.Tests/TeachingWorkflowRosterTests.cs @@ -227,6 +227,7 @@ public sealed class TeachingWorkflowRosterTests Assert.IsType(attendanceResult); Assert.Equal(1, await db.AttendanceRecords.CountAsync()); + db.ChangeTracker.Clear(); var grades = new GradesController(db, scope); var gradeResult = await grades.CreateSheet( new GradeSheetRequest(task.Id, 40, 60, []), @@ -234,6 +235,51 @@ public sealed class TeachingWorkflowRosterTests Assert.IsType(gradeResult); Assert.Equal(1, await db.GradeRecords.CountAsync()); + var makeupPlan = new MakeupExamPlan + { + AcademicTermId = term.Id, + Name = "补考成绩录入测试", + Status = MakeupExamPlanStatus.Published, + PublishedAt = DateTime.UtcNow + }; + var makeupSession = new MakeupExamSession + { + MakeupExamPlanId = makeupPlan.Id, + TeachingTaskId = task.Id, + ExamDate = new DateOnly(2027, 2, 20), + StartPeriod = 1, + PeriodCount = 2, + StartsAt = new DateTime(2027, 2, 20, 8, 0, 0, DateTimeKind.Utc), + EndsAt = new DateTime(2027, 2, 20, 9, 50, 0, DateTimeKind.Utc), + Enrollments = + [ + new MakeupExamEnrollment + { + StudentId = student.Id, + Reason = MakeupReason.Failed + } + ] + }; + makeupPlan.Sessions.Add(makeupSession); + db.MakeupExamPlans.Add(makeupPlan); + await db.SaveChangesAsync(); + db.ChangeTracker.Clear(); + + var makeup = new MakeupExamsController( + db, + scope, + new MakeupExamEligibilityService(db)); + Assert.IsType(await makeup.RecordScores( + makeupSession.Id, + [new RecordMakeupScoreRequest(student.Id, 75)], + CancellationToken.None)); + Assert.Equal( + 75, + await db.MakeupExamEnrollments + .Where(x => x.MakeupExamSessionId == makeupSession.Id) + .Select(x => x.MakeupScore) + .SingleAsync()); + var selections = new CourseSelectionsController(db, scope); Assert.Single(ReadItems(await selections.GetMyTeachingTasks( term.Id,