merge: allow teacher admins to manage school classes

bugfix/ai-assessment-evidence-rescore
chenyuan 1 month ago
commit 1cd3846005

@ -459,8 +459,9 @@ public class UserController {
@RequestParam(required = false) String operatorId) {
Userinfo operator = StringUtils.isBlank(operatorId) ? null : userinfoMapper.selectByPrimaryKey(operatorId);
if (isSchoolTeacher(operator) && isTeacherRosterMode(operator.getSchoolId())) {
String createdBy = isTeacherAdmin(operator) ? null : operatorId;
PageInfo<SchoolClassDto> pageInfo = schoolService.seleteSchoolClass(index, size, operator.getSchoolId(),
className, classSn, null, operatorId, "TEACHING");
className, classSn, null, createdBy, "TEACHING");
return new ResultEntity<>(HttpStatus.OK, "班级管理-查询成功", pageInfo);
}
PageInfo<SchoolClassDto> pageInfo = schoolService.seleteSchoolClass(index, size, schoolId, className, classSn, schoolMajorId);
@ -1863,6 +1864,10 @@ public class UserController {
if (isPlatformAdmin(operator)) {
return true;
}
if (isTeacherAdmin(operator)
&& StringUtils.equals(operator.getSchoolId(), schoolClass.getSchoolId())) {
return true;
}
if (!Integer.valueOf(3).equals(operator.getRole())) {
return false;
}

@ -3,6 +3,7 @@ package com.sztzjy.linkCommerce.controller.stu;
import com.sztzjy.linkCommerce.entity.School;
import com.sztzjy.linkCommerce.entity.SchoolClass;
import com.sztzjy.linkCommerce.entity.SchoolClassExample;
import com.sztzjy.linkCommerce.entity.dto.SchoolClassDto;
import com.sztzjy.linkCommerce.entity.SchoolFaculty;
import com.sztzjy.linkCommerce.entity.SchoolMajor;
import com.sztzjy.linkCommerce.entity.TeachingClassStudent;
@ -16,6 +17,7 @@ import com.sztzjy.linkCommerce.mapper.TeachingClassStudentMapper;
import com.sztzjy.linkCommerce.mapper.UserinfoMapper;
import com.sztzjy.linkCommerce.service.UserInfoService;
import com.sztzjy.linkCommerce.service.SchoolProductConfigService;
import com.sztzjy.linkCommerce.service.SchoolService;
import com.sztzjy.linkCommerce.entity.importDto.SchoolAdminStudentImportDTO;
import com.sztzjy.linkCommerce.entity.importDto.TeachingClassStudentImportDTO;
import com.sztzjy.linkCommerce.util.Pinyin4jUtil;
@ -43,6 +45,36 @@ import static org.mockito.Mockito.when;
class UserControllerTeacherAdminTest {
@Test
void teacherAdminClassListIncludesEveryTeachingClassInSchool() {
UserController controller = controllerWithCommonMocks();
controller.schoolService = mock(SchoolService.class);
when(controller.schoolProductConfigService.isTeacherRosterManaged("school-1")).thenReturn(true);
when(controller.schoolService.seleteSchoolClass(1, 10, "school-1", null, null, null, null, "TEACHING"))
.thenReturn(new PageInfo<>());
ResultEntity<PageInfo<SchoolClassDto>> result = controller.seleteSchoolClass(
1, 10, "other-school", null, null, null, "teacher-admin");
assertEquals(HttpStatus.OK, result.getStatusCode());
verify(controller.schoolService).seleteSchoolClass(
1, 10, "school-1", null, null, null, null, "TEACHING");
}
@Test
void ordinaryTeacherClassListRemainsLimitedToOwnedTeachingClasses() {
UserController controller = controllerWithCommonMocks();
controller.schoolService = mock(SchoolService.class);
when(controller.schoolProductConfigService.isTeacherRosterManaged("school-1")).thenReturn(true);
when(controller.schoolService.seleteSchoolClass(1, 10, "school-1", null, null, null, "teacher-1", "TEACHING"))
.thenReturn(new PageInfo<>());
controller.seleteSchoolClass(1, 10, "other-school", null, null, null, "teacher-1");
verify(controller.schoolService).seleteSchoolClass(
1, 10, "school-1", null, null, null, "teacher-1", "TEACHING");
}
@Test
void addTeacherAccountAlwaysCreatesOrdinaryTeacher() {
UserController controller = controllerWithCommonMocks();
@ -505,6 +537,21 @@ class UserControllerTeacherAdminTest {
verify(controller.schoolClassMapper, never()).deleteByPrimaryKey("class-1");
}
@Test
void teacherAdminCanDeleteAnotherTeachersLocalClassInSameSchool() {
UserController controller = controllerWithCommonMocks();
SchoolClass schoolClass = classCreatedBy("teacher-2");
schoolClass.setDataSource("LOCAL");
when(controller.schoolClassMapper.selectByPrimaryKey("class-1")).thenReturn(schoolClass);
when(controller.teachingClassStudentMapper.countByTeachingClassId("class-1")).thenReturn(0L);
when(controller.schoolClassMapper.deleteByPrimaryKey("class-1")).thenReturn(1);
ResultEntity result = controller.deleteSchoolClass("class-1", "teacher-admin");
assertEquals(HttpStatus.OK, result.getStatusCode());
verify(controller.schoolClassMapper).deleteByPrimaryKey("class-1");
}
@Test
void teacherAdminCanDeleteOwnLocalAdminClass() {
UserController controller = controllerWithCommonMocks();
@ -594,6 +641,24 @@ class UserControllerTeacherAdminTest {
verify(controller.schoolClassMapper, never()).deleteByPrimaryKey("class-1");
}
@Test
void teacherAdminCanUpdateAnotherTeachersLocalClassInSameSchool() {
UserController controller = controllerWithCommonMocks();
SchoolClass existing = classCreatedBy("teacher-2");
existing.setDataSource("LOCAL");
SchoolClass update = new SchoolClass();
update.setSchoolClassId("class-1");
update.setClassName("updated-class");
when(controller.schoolClassMapper.selectByPrimaryKey("class-1")).thenReturn(existing);
when(controller.schoolClassMapper.updateByPrimaryKeySelective(any(SchoolClass.class))).thenReturn(1);
ResultEntity result = controller.updateSchoolClass(update, "teacher-admin");
assertEquals(HttpStatus.OK, result.getStatusCode());
verify(controller.schoolClassMapper).updateByPrimaryKeySelective(update);
assertEquals("teacher-2", update.getCreatedBy());
}
@Test
void teacherAdminCanUpdateOwnLocalAdminClass() {
UserController controller = controllerWithCommonMocks();

Loading…
Cancel
Save