package com.sinata.appointment.service;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
import com.sinata.appointment.constants.ApprovalInstanceStatus;
|
import com.sinata.appointment.constants.ApprovalTaskStatus;
|
import com.sinata.appointment.entity.ApprovalInstance;
|
import com.sinata.appointment.entity.ApprovalTask;
|
import com.sinata.appointment.mapper.ApprovalInstanceMapper;
|
import com.sinata.appointment.mapper.ApprovalTaskMapper;
|
import com.sinata.appointment.mapper.BizApprovalNodeConfigMapper;
|
import com.sinata.appointment.mapper.MpPassLocalUnitMapper;
|
import com.sinata.appointment.mapper.MpPassLocalUnitMemberMapper;
|
import com.sinata.appointment.mapper.MpStaffGroupMemberMapper;
|
import com.sinata.appointment.mapper.MpUserMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import java.util.List;
|
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.mockito.ArgumentCaptor;
|
import org.mockito.Mock;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
|
@ExtendWith(MockitoExtension.class)
|
class ApprovalEngineServiceTest {
|
|
@Mock
|
private BizApprovalNodeConfigMapper bizApprovalNodeConfigMapper;
|
@Mock
|
private ApprovalInstanceMapper approvalInstanceMapper;
|
@Mock
|
private ApprovalTaskMapper approvalTaskMapper;
|
@Mock
|
private MpUserMapper mpUserMapper;
|
@Mock
|
private MpPassLocalUnitMapper mpPassLocalUnitMapper;
|
@Mock
|
private MpPassLocalUnitMemberMapper mpPassLocalUnitMemberMapper;
|
@Mock
|
private MpStaffGroupMemberMapper mpStaffGroupMemberMapper;
|
@Mock
|
private SysBizSettingCacheService sysBizSettingCacheService;
|
|
@Test
|
void cancelInstanceMarksPendingAndWaitingTasksAsCancelled() {
|
ApprovalEngineService approvalEngineService =
|
new ApprovalEngineService(
|
bizApprovalNodeConfigMapper,
|
approvalInstanceMapper,
|
approvalTaskMapper,
|
mpUserMapper,
|
mpPassLocalUnitMapper,
|
mpPassLocalUnitMemberMapper,
|
mpStaffGroupMemberMapper,
|
sysBizSettingCacheService,
|
new ObjectMapper());
|
|
ApprovalInstance instance = new ApprovalInstance();
|
instance.setId(1L);
|
instance.setStatus(ApprovalInstanceStatus.IN_PROGRESS);
|
|
ApprovalTask pendingTask = new ApprovalTask();
|
pendingTask.setId(10L);
|
pendingTask.setTaskStatus(ApprovalTaskStatus.PENDING);
|
|
ApprovalTask waitingTask = new ApprovalTask();
|
waitingTask.setId(11L);
|
waitingTask.setTaskStatus(ApprovalTaskStatus.WAITING);
|
|
when(approvalTaskMapper.selectList(any())).thenReturn(List.of(pendingTask, waitingTask));
|
|
approvalEngineService.cancelInstance(instance, "预约人取消");
|
|
assertEquals(ApprovalInstanceStatus.CANCELLED, instance.getStatus());
|
verify(approvalInstanceMapper).updateById(instance);
|
|
ArgumentCaptor<ApprovalTask> taskCaptor = ArgumentCaptor.forClass(ApprovalTask.class);
|
verify(approvalTaskMapper, org.mockito.Mockito.times(2)).updateById(taskCaptor.capture());
|
List<ApprovalTask> updatedTasks = taskCaptor.getAllValues();
|
assertEquals(ApprovalTaskStatus.CANCELLED, updatedTasks.get(0).getTaskStatus());
|
assertEquals("预约人取消", updatedTasks.get(0).getComment());
|
assertEquals(ApprovalTaskStatus.CANCELLED, updatedTasks.get(1).getTaskStatus());
|
assertEquals("预约人取消", updatedTasks.get(1).getComment());
|
}
|
}
|