修复教师实验管理页的可见性问题
This commit is contained in:
1 parent
0b63d31e67
commit
7db082639c
2 files changed
+37
-4
No files matched your search
@@ -196,12 +196,11 @@ public sealed class ExperimentsController(
|
|||||||
int page = 1,
|
int page = 1,
|
||||||
int pageSize = 20)
|
int pageSize = 20)
|
||||||
{
|
{
|
||||||
|
// 项目列表按任课教学任务授权。场次的名单、取消和代选仍由
|
||||||
|
// CanManageSession 限制到已绑定的指导教师,不能以此反向过滤项目:
|
||||||
|
// 草稿尚未安排场次,集中安排项目也没有独立的场次指导教师绑定。
|
||||||
var source = ScopedProjects().AsNoTracking();
|
var source = ScopedProjects().AsNoTracking();
|
||||||
var scope = currentUserDataScope.Current;
|
var scope = currentUserDataScope.Current;
|
||||||
if (scope.Scope == DataScope.Self && scope.IsInRole(SystemRoles.Teacher))
|
|
||||||
source = source.Where(x => x.Sessions.Any(session =>
|
|
||||||
session.Instructors.Any(instructor =>
|
|
||||||
instructor.Teacher!.UserId == scope.UserId)));
|
|
||||||
if (academicTermId.HasValue)
|
if (academicTermId.HasValue)
|
||||||
source = source.Where(x =>
|
source = source.Where(x =>
|
||||||
x.TeachingTask!.AcademicTermId == academicTermId);
|
x.TeachingTask!.AcademicTermId == academicTermId);
|
||||||
|
|||||||
@@ -7,11 +7,45 @@ using Jiaowu.Api.Infrastructure.Timetables;
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Data.Sqlite;
|
using Microsoft.Data.Sqlite;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
namespace Jiaowu.Api.Tests;
|
namespace Jiaowu.Api.Tests;
|
||||||
|
|
||||||
public sealed class ExperimentsControllerTests
|
public sealed class ExperimentsControllerTests
|
||||||
{
|
{
|
||||||
|
[Fact]
|
||||||
|
public async Task TeacherManagement_ListsOwnDraftAndPublishedProjectsWithoutSessionInstructorBinding()
|
||||||
|
{
|
||||||
|
await using var fixture = await ExperimentFixture.CreateAsync();
|
||||||
|
var teacherScope = new FixedScope(new CurrentUserScope(
|
||||||
|
fixture.ManagerScope.Current.UserId,
|
||||||
|
fixture.ManagerScope.Current.DisplayName,
|
||||||
|
fixture.ManagerScope.Current.CollegeId,
|
||||||
|
DataScope.Self,
|
||||||
|
new HashSet<string>([SystemRoles.Teacher])));
|
||||||
|
var controller = fixture.Controller(teacherScope);
|
||||||
|
|
||||||
|
Assert.IsType<CreatedResult>(await controller.CreateProject(
|
||||||
|
fixture.ProjectRequest(ExperimentArrangementMode.SelfScheduled),
|
||||||
|
CancellationToken.None));
|
||||||
|
Assert.IsType<CreatedResult>(await controller.CreateProject(
|
||||||
|
fixture.ProjectRequest(ExperimentArrangementMode.Centralized),
|
||||||
|
CancellationToken.None));
|
||||||
|
var centralized = await fixture.Db.ExperimentProjects.SingleAsync(x =>
|
||||||
|
x.ArrangementMode == ExperimentArrangementMode.Centralized);
|
||||||
|
Assert.IsType<NoContentResult>(await controller.PublishProject(
|
||||||
|
centralized.Id, CancellationToken.None));
|
||||||
|
|
||||||
|
var result = Assert.IsType<OkObjectResult>(
|
||||||
|
await controller.GetManagementProjects(
|
||||||
|
null, null, null, null, null, null, null, null,
|
||||||
|
CancellationToken.None));
|
||||||
|
using var response = JsonDocument.Parse(JsonSerializer.Serialize(result.Value));
|
||||||
|
|
||||||
|
Assert.Equal(1, response.RootElement.GetProperty("Total").GetInt32());
|
||||||
|
Assert.Equal(2, response.RootElement.GetProperty("Items").GetArrayLength());
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task BatchProjects_CreateSameDefinitionForSameCourseTasks()
|
public async Task BatchProjects_CreateSameDefinitionForSameCourseTasks()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in new issue
Block a user