longz
2026-05-28 23fe797f9dded6d7ec9ecbcf760f764374dea8e0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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());
    }
}