实验成绩 Excel 流程
This commit is contained in:
@@ -4,6 +4,8 @@ using Jiaowu.Api.Domain.Identity;
|
||||
using Jiaowu.Api.Infrastructure.Auth;
|
||||
using Jiaowu.Api.Infrastructure.Grades;
|
||||
using Jiaowu.Api.Infrastructure.Persistence;
|
||||
using ClosedXML.Excel;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Data.Sqlite;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
@@ -72,6 +74,56 @@ public sealed class ExperimentGradesControllerTests
|
||||
CancellationToken.None));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Teacher_CanDownloadAndImportExperimentGradeTemplate()
|
||||
{
|
||||
await using var fixture = await ExperimentGradeFixture.CreateAsync();
|
||||
var project = new ExperimentProject
|
||||
{
|
||||
TeachingTaskId = fixture.Task.Id,
|
||||
Code = "LAB-EXCEL",
|
||||
Name = "Excel 实验成绩",
|
||||
ArrangementMode = ExperimentArrangementMode.Centralized,
|
||||
StartDate = fixture.Term.StartDate,
|
||||
EndDate = fixture.Term.EndDate,
|
||||
Status = ExperimentProjectStatus.Published,
|
||||
PublishedAt = DateTime.UtcNow
|
||||
};
|
||||
fixture.Db.ExperimentProjects.Add(project);
|
||||
await fixture.Db.SaveChangesAsync();
|
||||
|
||||
var admin = fixture.ExperimentGrades(fixture.AdminScope);
|
||||
await admin.CreateSheet(new ExperimentGradeSheetRequest(
|
||||
project.Id, 1, 60,
|
||||
[new ExperimentGradeItemRequest("操作", ExperimentGradeItemKind.Operation, 100)]),
|
||||
CancellationToken.None);
|
||||
var sheet = await fixture.Db.ExperimentGradeSheets.SingleAsync();
|
||||
fixture.Db.ChangeTracker.Clear();
|
||||
|
||||
var teacher = fixture.ExperimentGrades(fixture.TeacherScope);
|
||||
var template = Assert.IsType<FileContentResult>(await teacher.DownloadTemplate(
|
||||
sheet.Id, CancellationToken.None));
|
||||
Assert.Equal("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||
template.ContentType);
|
||||
await using var templateStream = new MemoryStream(template.FileContents);
|
||||
await using var stream = new MemoryStream();
|
||||
using (var workbook = new XLWorkbook(templateStream))
|
||||
{
|
||||
var worksheet = workbook.Worksheet("实验成绩导入");
|
||||
worksheet.Cell("D2").Value = "已完成";
|
||||
worksheet.Cell("E2").Value = 85;
|
||||
workbook.SaveAs(stream);
|
||||
}
|
||||
stream.Position = 0;
|
||||
var file = new FormFile(stream, 0, stream.Length, "file", "实验成绩导入模板.xlsx");
|
||||
Assert.IsType<OkObjectResult>(await teacher.ImportRecords(
|
||||
sheet.Id, file, CancellationToken.None));
|
||||
fixture.Db.ChangeTracker.Clear();
|
||||
Assert.Equal(85m, await fixture.Db.ExperimentGradeRecords
|
||||
.Select(record => record.TotalScore)
|
||||
.SingleAsync());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ManagementList_IsPagedFilteredAndCollegeScoped()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user