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 taskCaptor = ArgumentCaptor.forClass(ApprovalTask.class); verify(approvalTaskMapper, org.mockito.Mockito.times(2)).updateById(taskCaptor.capture()); List 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()); } }