package com.sinata.appointment.service;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.mockito.Mockito.mockStatic;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
import com.sinata.appointment.config.MiniStpUtil;
|
import com.sinata.appointment.constants.ApprovalNodeCode;
|
import com.sinata.appointment.constants.ApprovalTaskStatus;
|
import com.sinata.appointment.dto.MiniApprovalActionRequest;
|
import com.sinata.appointment.entity.AppointmentOrder;
|
import com.sinata.appointment.entity.ApprovalInstance;
|
import com.sinata.appointment.entity.ApprovalTask;
|
import com.sinata.appointment.mapper.AppointmentOrderMapper;
|
import com.sinata.appointment.mapper.ApprovalInstanceMapper;
|
import com.sinata.appointment.mapper.ApprovalTaskMapper;
|
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.mockito.ArgumentCaptor;
|
import org.mockito.InjectMocks;
|
import org.mockito.Mock;
|
import org.mockito.MockedStatic;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
|
@ExtendWith(MockitoExtension.class)
|
class MiniHandlerApprovalApplicationServiceTest {
|
|
@Mock
|
private ApprovalTaskMapper approvalTaskMapper;
|
@Mock
|
private ApprovalInstanceMapper approvalInstanceMapper;
|
@Mock
|
private AppointmentOrderMapper appointmentOrderMapper;
|
@Mock
|
private ApprovalEngineService approvalEngineService;
|
@Mock
|
private PostApprovalOrchestrationService postApprovalOrchestrationService;
|
@Mock
|
private com.sinata.appointment.mapper.BizApprovalNodeConfigMapper bizApprovalNodeConfigMapper;
|
@Mock
|
private com.sinata.appointment.mapper.MpPassAccessAreaMapper mpPassAccessAreaMapper;
|
@Mock
|
private com.sinata.appointment.mapper.MpPassLocalUnitMapper mpPassLocalUnitMapper;
|
@Mock
|
private com.fasterxml.jackson.databind.ObjectMapper objectMapper;
|
|
@InjectMocks
|
private MiniHandlerApprovalApplicationService miniHandlerApprovalApplicationService;
|
|
@Test
|
void handleOtherActionShouldAppendNoticeIdsWithoutDuplicatesForLevel3() {
|
ApprovalTask task = new ApprovalTask();
|
task.setId(100L);
|
task.setUuid("task-uuid");
|
task.setInstanceId(300L);
|
task.setNodeCode(ApprovalNodeCode.LEVEL3_LOCAL_DEPT_LEADER);
|
task.setAssigneeUserId(99L);
|
task.setTaskStatus(ApprovalTaskStatus.PENDING);
|
task.setNoticeIds("2,3");
|
|
ApprovalInstance inst = new ApprovalInstance();
|
inst.setId(300L);
|
inst.setOrderId(200L);
|
|
AppointmentOrder order = new AppointmentOrder();
|
order.setId(200L);
|
|
MiniApprovalActionRequest request = new MiniApprovalActionRequest();
|
request.setTaskId(100L);
|
request.setTaskUuid("task-uuid");
|
request.setApprove(true);
|
request.setComment("同意");
|
request.setNoticeIds(java.util.List.of(3L, 4L, 4L));
|
|
when(approvalTaskMapper.selectById(100L)).thenReturn(task);
|
when(approvalInstanceMapper.selectById(300L)).thenReturn(inst, inst);
|
when(appointmentOrderMapper.selectById(200L)).thenReturn(order);
|
when(approvalEngineService.isCurrentNodeComplete(inst)).thenReturn(false);
|
|
try (MockedStatic<MiniStpUtil> mockedStatic = mockStatic(MiniStpUtil.class)) {
|
mockedStatic.when(MiniStpUtil::getLoginIdAsLong).thenReturn(99L);
|
|
miniHandlerApprovalApplicationService.handleOtherAction(request);
|
}
|
|
ArgumentCaptor<ApprovalTask> taskCaptor = ArgumentCaptor.forClass(ApprovalTask.class);
|
verify(approvalTaskMapper).updateById(taskCaptor.capture());
|
assertEquals("2,3,4", taskCaptor.getValue().getNoticeIds());
|
}
|
}
|