package com.sinata.appointment.service;
|
|
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
import com.sinata.appointment.constants.ApprovalInstanceStatus;
|
import com.sinata.appointment.constants.QrcodeTicketStatus;
|
import com.sinata.appointment.entity.AppointmentOrder;
|
import com.sinata.appointment.entity.AppointmentVisitor;
|
import com.sinata.appointment.entity.ApprovalInstance;
|
import com.sinata.appointment.entity.MpUser;
|
import com.sinata.appointment.entity.MpVisitor;
|
import com.sinata.appointment.entity.QrcodeTicket;
|
import com.sinata.appointment.mapper.AppointmentOrderMapper;
|
import com.sinata.appointment.mapper.AppointmentVisitorMapper;
|
import com.sinata.appointment.mapper.ApprovalInstanceMapper;
|
import com.sinata.appointment.mapper.BizVisitReasonMapper;
|
import com.sinata.appointment.mapper.MpUserMapper;
|
import com.sinata.appointment.mapper.MpVisitorMapper;
|
import com.sinata.appointment.mapper.QrcodeTicketMapper;
|
import java.time.LocalDate;
|
import java.util.List;
|
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.mockito.InjectMocks;
|
import org.mockito.Mock;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
|
@ExtendWith(MockitoExtension.class)
|
class PostApprovalOrchestrationServiceTest {
|
|
@Mock
|
private IntegrationHikvisionService integrationHikvisionService;
|
@Mock
|
private IntegrationWechatService integrationWechatService;
|
@Mock
|
private QrcodeTicketMapper qrcodeTicketMapper;
|
@Mock
|
private AppointmentOrderMapper appointmentOrderMapper;
|
@Mock
|
private ApprovalInstanceMapper approvalInstanceMapper;
|
@Mock
|
private AppointmentVisitorMapper appointmentVisitorMapper;
|
@Mock
|
private MpVisitorMapper mpVisitorMapper;
|
@Mock
|
private MpUserMapper mpUserMapper;
|
@Mock
|
private BizVisitReasonMapper bizVisitReasonMapper;
|
@Mock
|
private SysBizSettingCacheService sysBizSettingCacheService;
|
|
@InjectMocks
|
private PostApprovalOrchestrationService postApprovalOrchestrationService;
|
|
@Test
|
void onOrderFullyApprovedBatchesProfilesAndReusesExistingTickets() {
|
AppointmentOrder order = new AppointmentOrder();
|
order.setId(1L);
|
order.setVisitedUserId(8L);
|
order.setVisitStartDate(LocalDate.now().plusDays(1));
|
|
ApprovalInstance instance = new ApprovalInstance();
|
instance.setStatus(ApprovalInstanceStatus.APPROVED);
|
|
AppointmentVisitor reusedVisitor = new AppointmentVisitor();
|
reusedVisitor.setOrderId(1L);
|
reusedVisitor.setMpVisitorId(11L);
|
reusedVisitor.setName("张三");
|
|
AppointmentVisitor newVisitor = new AppointmentVisitor();
|
newVisitor.setOrderId(1L);
|
newVisitor.setMpVisitorId(12L);
|
newVisitor.setName("李四");
|
|
QrcodeTicket reusedTicket = new QrcodeTicket();
|
reusedTicket.setId(1001L);
|
reusedTicket.setOrderId(1L);
|
reusedTicket.setMpVisitorId(11L);
|
reusedTicket.setTicketStatus(QrcodeTicketStatus.UNUSED);
|
|
MpVisitor profile1 = new MpVisitor();
|
profile1.setId(11L);
|
profile1.setVisitorName("张三");
|
|
MpVisitor profile2 = new MpVisitor();
|
profile2.setId(12L);
|
profile2.setVisitorName("李四");
|
|
MpUser visitedUser = new MpUser();
|
visitedUser.setId(8L);
|
visitedUser.setNickName("员工A");
|
|
when(approvalInstanceMapper.selectOne(any())).thenReturn(instance);
|
when(appointmentVisitorMapper.selectList(any())).thenReturn(List.of(reusedVisitor, newVisitor));
|
when(mpVisitorMapper.selectList(any())).thenReturn(List.of(profile1, profile2));
|
when(qrcodeTicketMapper.selectList(any())).thenReturn(List.of(reusedTicket));
|
when(sysBizSettingCacheService.getValue(any())).thenReturn("7");
|
when(mpUserMapper.selectOne(any())).thenReturn(visitedUser);
|
when(integrationHikvisionService.requestQrcodePayload(
|
eq(order),
|
eq(newVisitor),
|
eq(profile2),
|
eq(visitedUser),
|
any(),
|
any(),
|
any(),
|
any(),
|
eq(7 * 24 * 60),
|
any(),
|
any()))
|
.thenReturn("payload-2");
|
|
postApprovalOrchestrationService.onOrderFullyApproved(order);
|
|
verify(appointmentOrderMapper).updateById(order);
|
verify(mpVisitorMapper, times(1)).selectList(any());
|
verify(qrcodeTicketMapper, times(1)).selectList(any());
|
verify(qrcodeTicketMapper, times(1)).insert(any(QrcodeTicket.class));
|
verify(integrationHikvisionService, times(1))
|
.requestQrcodePayload(
|
eq(order),
|
eq(newVisitor),
|
eq(profile2),
|
eq(visitedUser),
|
any(),
|
any(),
|
any(),
|
any(),
|
eq(7 * 24 * 60),
|
any(),
|
any());
|
verify(integrationWechatService).notifyApprovalFinalResult(order, true);
|
}
|
|
@Test
|
void onOrderFullyApprovedSkipsWhenLatestInstanceNotApproved() {
|
AppointmentOrder order = new AppointmentOrder();
|
order.setId(1L);
|
|
ApprovalInstance instance = new ApprovalInstance();
|
instance.setStatus(ApprovalInstanceStatus.IN_PROGRESS);
|
|
when(approvalInstanceMapper.selectOne(any())).thenReturn(instance);
|
|
postApprovalOrchestrationService.onOrderFullyApproved(order);
|
|
verify(appointmentOrderMapper, never()).updateById(any());
|
verify(appointmentVisitorMapper, never()).selectList(any());
|
verify(qrcodeTicketMapper, never()).insert(any());
|
}
|
}
|