You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
5.2 KiB
Java

package com.sztzjy.linkCommerce.controller.stu;
import com.sztzjy.linkCommerce.entity.SchoolClass;
import com.sztzjy.linkCommerce.entity.TaskAllocation;
import com.sztzjy.linkCommerce.mapper.SchoolClassMapper;
import com.sztzjy.linkCommerce.mapper.TaskAllocationMapper;
import com.sztzjy.linkCommerce.service.SchoolDefaultTaskService;
import com.sztzjy.linkCommerce.util.ResultEntity;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.springframework.http.HttpStatus;
import org.springframework.test.util.ReflectionTestUtils;
import java.util.Collections;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
class TaskAllocationControllerTest {
@Test
void teacherCannotUpdateTaskAllocationForClassCreatedByAnotherTeacher() {
TaskAllocationController controller = new TaskAllocationController();
controller.taskAllocationMapper = mock(TaskAllocationMapper.class);
controller.schoolClassMapper = mock(SchoolClassMapper.class);
SchoolClass schoolClass = new SchoolClass();
schoolClass.setSchoolClassId("class-1");
schoolClass.setCreatedBy("teacher-2");
when(controller.schoolClassMapper.selectByPrimaryKey("class-1")).thenReturn(schoolClass);
ResultEntity result = controller.updateTaskAllocationByClassId(Collections.emptyList(), "class-1", "school-1", "teacher-1");
assertEquals(HttpStatus.BAD_REQUEST, result.getStatusCode());
verify(controller.taskAllocationMapper, never()).deleteByExample(org.mockito.ArgumentMatchers.any());
}
@Test
void teacherCannotUpdateTaskAllocationForAdminClassEvenWhenCreatedBySelf() {
TaskAllocationController controller = controllerWithMocks();
SchoolClass schoolClass = new SchoolClass();
schoolClass.setSchoolClassId("admin-1");
schoolClass.setCreatedBy("teacher-1");
schoolClass.setClassType("ADMIN");
when(controller.schoolClassMapper.selectByPrimaryKey("admin-1")).thenReturn(schoolClass);
ResultEntity result = controller.updateTaskAllocationByClassId(Collections.emptyList(), "admin-1", "school-1", "teacher-1");
assertEquals(HttpStatus.BAD_REQUEST, result.getStatusCode());
verify(controller.taskAllocationMapper, never()).deleteByExample(any());
}
@Test
void teacherCanUpdateTaskAllocationForOwnedTeachingClass() {
TaskAllocationController controller = controllerWithMocks();
SchoolClass schoolClass = new SchoolClass();
schoolClass.setSchoolClassId("teaching-1");
schoolClass.setSchoolId("school-1");
schoolClass.setCreatedBy("teacher-1");
schoolClass.setClassType("TEACHING");
when(controller.schoolClassMapper.selectByPrimaryKey("teaching-1")).thenReturn(schoolClass);
TaskAllocation allocation = new TaskAllocation();
allocation.setModule("comprehensive-case-training");
allocation.setSort(1);
ResultEntity result = controller.updateTaskAllocationByClassId(Collections.singletonList(allocation), "teaching-1", "school-1", "teacher-1");
ArgumentCaptor<TaskAllocation> captor = ArgumentCaptor.forClass(TaskAllocation.class);
assertEquals(HttpStatus.OK, result.getStatusCode());
verify(controller.taskAllocationMapper).deleteByExample(any());
verify(controller.taskAllocationMapper, org.mockito.Mockito.times(2)).insert(captor.capture());
List<TaskAllocation> inserted = captor.getAllValues();
assertNotNull(inserted.get(0).getId());
assertEquals(TaskAllocation.PUBLICATION_MARKER, inserted.get(0).getModule());
assertEquals((byte) 1, inserted.get(0).getDisabledStatus());
assertEquals("comprehensive-case-training", inserted.get(1).getModule());
assertEquals((byte) 0, inserted.get(1).getDisabledStatus());
assertEquals("teaching-1", inserted.get(1).getClassId());
assertEquals("school-1", inserted.get(1).getSchoolId());
}
@Test
void taskLookupUsesSchoolDefaultResolverForTeachingClass() {
TaskAllocationController controller = controllerWithMocks();
SchoolDefaultTaskService defaultTaskService = mock(SchoolDefaultTaskService.class);
ReflectionTestUtils.setField(controller, "schoolDefaultTaskService", defaultTaskService);
TaskAllocation allocation = new TaskAllocation();
allocation.setModule("学校默认任务");
when(defaultTaskService.resolveForTeachingClass("teaching-1")).thenReturn(List.of(allocation));
ResultEntity<List<TaskAllocation>> result = controller.selectTaskAllocationByClassId("teaching-1");
assertEquals(List.of(allocation), result.getBody().getData());
}
private TaskAllocationController controllerWithMocks() {
TaskAllocationController controller = new TaskAllocationController();
controller.taskAllocationMapper = mock(TaskAllocationMapper.class);
controller.schoolClassMapper = mock(SchoolClassMapper.class);
return controller;
}
}