package com.sztzjy.linkCommerce.controller.stu; import com.sztzjy.linkCommerce.config.exception.UnAuthorizedException; import com.sztzjy.linkCommerce.config.security.JwtUser; import com.sztzjy.linkCommerce.config.security.TokenProvider; import com.sztzjy.linkCommerce.entity.TaskAllocation; import com.sztzjy.linkCommerce.entity.Userinfo; import com.sztzjy.linkCommerce.entity.SchoolDefaultTaskInitialization; import com.sztzjy.linkCommerce.mapper.UserinfoMapper; import com.sztzjy.linkCommerce.service.SchoolDefaultTaskService; import org.junit.jupiter.api.Test; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.test.util.ReflectionTestUtils; import java.util.List; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; class SchoolDefaultTaskControllerTest { @Test void managerTeacherCanSaveDefaultsForOwnSchool() { SchoolDefaultTaskController controller = new SchoolDefaultTaskController(); SchoolDefaultTaskService service = mock(SchoolDefaultTaskService.class); UserinfoMapper userinfoMapper = mock(UserinfoMapper.class); ReflectionTestUtils.setField(controller, "schoolDefaultTaskService", service); ReflectionTestUtils.setField(controller, "userinfoMapper", userinfoMapper); when(userinfoMapper.selectByPrimaryKey("teacher-1")).thenReturn(teacher("teacher-1", "school-1", true)); SchoolDefaultTaskInitialization ready = new SchoolDefaultTaskInitialization(); ready.setStatus("READY"); when(service.getInitialization("school-1")).thenReturn(ready); controller.replace(java.util.Arrays.asList(task("学校默认任务")), requestFor("teacher-1", "school-1")); verify(service).replaceSchoolDefault(eq("school-1"), anyList()); } @Test void ordinaryTeacherCannotSaveDefaults() { SchoolDefaultTaskController controller = new SchoolDefaultTaskController(); UserinfoMapper userinfoMapper = mock(UserinfoMapper.class); ReflectionTestUtils.setField(controller, "userinfoMapper", userinfoMapper); when(userinfoMapper.selectByPrimaryKey("teacher-2")).thenReturn(teacher("teacher-2", "school-1", false)); assertThrows(UnAuthorizedException.class, () -> controller.replace(java.util.Arrays.asList(task("学校默认任务")), requestFor("teacher-2", "school-1"))); } private Userinfo teacher(String userId, String schoolId, boolean teacherAdmin) { Userinfo user = new Userinfo(); user.setUserId(userId); user.setSchoolId(schoolId); user.setRole(3); user.setTeacherAdmin(teacherAdmin); return user; } private TaskAllocation task(String module) { TaskAllocation task = new TaskAllocation(); task.setModule(module); task.setDisabledStatus((byte) 0); return task; } private MockHttpServletRequest requestFor(String userId, String schoolId) { JwtUser user = new JwtUser(); user.setUserId(userId); user.setSchoolId(schoolId); user.setRoleId(3); user.setUsername(userId); MockHttpServletRequest request = new MockHttpServletRequest(); request.setUserPrincipal(new UsernamePasswordAuthenticationToken(user, null)); request.addHeader("Authorization", "Bearer " + TokenProvider.createToken(user)); return request; } }