package com.sinata.appointment.service;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.sinata.appointment.entity.AppointmentOrder;
|
import com.sinata.appointment.entity.MpUser;
|
import com.sinata.appointment.integration.WechatMiniGateway;
|
import com.sinata.appointment.mapper.ApprovalTaskMapper;
|
import com.sinata.appointment.mapper.AppointmentVisitorMapper;
|
import com.sinata.appointment.mapper.BizVisitReasonMapper;
|
import com.sinata.appointment.mapper.MpUserMapper;
|
import java.time.LocalDate;
|
import java.util.Map;
|
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.Test;
|
import org.mockito.ArgumentCaptor;
|
import org.mockito.Mock;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
|
@ExtendWith(MockitoExtension.class)
|
class IntegrationWechatServiceTest {
|
|
@Mock
|
private WechatMiniGateway wechatMiniGateway;
|
|
@Mock
|
private MpUserMapper mpUserMapper;
|
|
@Mock
|
private ApprovalTaskMapper approvalTaskMapper;
|
|
@Mock
|
private AppointmentVisitorMapper appointmentVisitorMapper;
|
|
@Mock
|
private BizVisitReasonMapper bizVisitReasonMapper;
|
|
private IntegrationWechatService integrationWechatService;
|
|
@BeforeEach
|
void setUp() {
|
integrationWechatService =
|
new IntegrationWechatService(
|
wechatMiniGateway,
|
mpUserMapper,
|
approvalTaskMapper,
|
appointmentVisitorMapper,
|
bizVisitReasonMapper);
|
}
|
|
@Test
|
void shouldSendApprovalResultSubscribeMessage() {
|
AppointmentOrder order = new AppointmentOrder();
|
order.setSubmitterId(2L);
|
order.setOrderNo("YY20260424001");
|
order.setVisitStartDate(LocalDate.of(2026, 4, 24));
|
order.setVisitReasonCode("BUSINESS");
|
order.setVisitTimeMode("SINGLE");
|
order.setVisitTimeSlot("AM");
|
|
MpUser submitter = new MpUser();
|
submitter.setId(2L);
|
submitter.setOpenId("openid-123");
|
submitter.setNickName("张三");
|
|
when(mpUserMapper.selectOne(any(LambdaQueryWrapper.class))).thenReturn(submitter);
|
|
integrationWechatService.notifyApprovalFinalResult(order, true);
|
|
@SuppressWarnings("unchecked")
|
ArgumentCaptor<Map<String, String>> dataCaptor = ArgumentCaptor.forClass(Map.class);
|
verify(wechatMiniGateway)
|
.sendSubscribeMessage(
|
eq("openid-123"),
|
eq("rIJpfN51_q818RTpJAqTe5ssTwWCHnxDM5rpq64uuKM"),
|
eq("pages/record/index"),
|
dataCaptor.capture());
|
|
Map<String, String> payload = dataCaptor.getValue();
|
assertEquals("通过", payload.get("phrase4"));
|
assertEquals("2026-04-24 09:00", payload.get("time2"));
|
assertEquals("预约审核通过", payload.get("thing5"));
|
}
|
|
@Test
|
void shouldSkipWhenSubmitterHasNoOpenId() {
|
AppointmentOrder order = new AppointmentOrder();
|
order.setSubmitterId(2L);
|
order.setOrderNo("YY20260424001");
|
|
MpUser submitter = new MpUser();
|
submitter.setId(2L);
|
submitter.setOpenId("");
|
|
when(mpUserMapper.selectOne(any(LambdaQueryWrapper.class))).thenReturn(submitter);
|
|
integrationWechatService.notifyApprovalFinalResult(order, false);
|
|
verify(wechatMiniGateway, never())
|
.sendSubscribeMessage(any(), any(), any(), any());
|
}
|
}
|