longz
2026-04-27 25df88d0ab9d7444ed1d162b9efa1259ac2f6f66
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
92
93
94
95
96
97
98
99
100
101
102
103
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.BizVisitReason;
import com.sinata.appointment.entity.MpUser;
import com.sinata.appointment.integration.WechatMiniGateway;
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 BizVisitReasonMapper bizVisitReasonMapper;
 
    private IntegrationWechatService integrationWechatService;
 
    @BeforeEach
    void setUp() {
        integrationWechatService =
                new IntegrationWechatService(wechatMiniGateway, mpUserMapper, 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("张三");
 
        BizVisitReason reason = new BizVisitReason();
        reason.setReasonCode("BUSINESS");
        reason.setReasonName("商务洽谈");
 
        when(mpUserMapper.selectOne(any(LambdaQueryWrapper.class))).thenReturn(submitter);
        when(bizVisitReasonMapper.selectOne(any(LambdaQueryWrapper.class))).thenReturn(reason);
 
        integrationWechatService.notifyApprovalFinalResult(order, true);
 
        @SuppressWarnings("unchecked")
        ArgumentCaptor<Map<String, String>> dataCaptor = ArgumentCaptor.forClass(Map.class);
        verify(wechatMiniGateway)
                .sendSubscribeMessage(
                        eq("openid-123"),
                        eq("4FQovCBNFM7rth42AWHTusHajO788eT9VpplSN4ZG2s"),
                        eq("pages/record/index"),
                        dataCaptor.capture());
 
        Map<String, String> payload = dataCaptor.getValue();
        assertEquals("审核通过", payload.get("thing1"));
        assertEquals("张三", payload.get("thing2"));
        assertEquals("2026-04-24 上午", payload.get("time3"));
        assertEquals("商务洽谈", payload.get("thing4"));
    }
 
    @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());
    }
}