智慧水务管理系统 - 精河县供水工程综合管理平台

WxHallServiceTest.java 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package com.water.revenue;
  2. import com.water.revenue.entity.FaqItem;
  3. import com.water.revenue.entity.IntentRule;
  4. import com.water.revenue.entity.WxPayOrder;
  5. import com.water.revenue.mapper.FaqItemMapper;
  6. import com.water.revenue.mapper.IntentRuleMapper;
  7. import com.water.revenue.mapper.WxPayOrderMapper;
  8. import com.water.revenue.service.wxhall.FaqService;
  9. import com.water.revenue.service.wxhall.IntentService;
  10. import com.water.revenue.service.wxhall.WxPayService;
  11. import org.junit.jupiter.api.Test;
  12. import org.junit.jupiter.api.extension.ExtendWith;
  13. import org.mockito.InjectMocks;
  14. import org.mockito.Mock;
  15. import org.mockito.junit.jupiter.MockitoExtension;
  16. import java.math.BigDecimal;
  17. import java.util.List;
  18. import java.util.Map;
  19. import static org.junit.jupiter.api.Assertions.*;
  20. import static org.mockito.ArgumentMatchers.any;
  21. import static org.mockito.Mockito.*;
  22. @ExtendWith(MockitoExtension.class)
  23. class WxHallServiceTest {
  24. @Mock private WxPayOrderMapper wxPayOrderMapper;
  25. @Mock private FaqItemMapper faqItemMapper;
  26. @Mock private IntentRuleMapper intentRuleMapper;
  27. @InjectMocks private WxPayService wxPayService;
  28. @InjectMocks private FaqService faqService;
  29. @InjectMocks private IntentService intentService;
  30. @Test
  31. void testUnifiedOrder() {
  32. when(wxPayOrderMapper.insert(any())).thenReturn(1);
  33. when(wxPayOrderMapper.updateById(any())).thenReturn(1);
  34. Map<String, Object> result = wxPayService.unifiedOrder(
  35. "openid123", "C001", "2024-01", new BigDecimal("50.00"), null);
  36. assertNotNull(result.get("outTradeNo"));
  37. assertEquals(5000, result.get("totalFee"));
  38. assertNotNull(result.get("prepayId"));
  39. verify(wxPayOrderMapper).insert(any(WxPayOrder.class));
  40. }
  41. @Test
  42. void testPayNotify() {
  43. WxPayOrder order = new WxPayOrder();
  44. order.setOutTradeNo("WXPAY20240101000001");
  45. order.setStatus("pending");
  46. when(wxPayOrderMapper.selectByOutTradeNo(any())).thenReturn(order);
  47. when(wxPayOrderMapper.updateById(any())).thenReturn(1);
  48. Map<String, String> xmlData = Map.of(
  49. "out_trade_no", "WXPAY20240101000001",
  50. "transaction_id", "TX123",
  51. "result_code", "SUCCESS",
  52. "sign", "test_sign"
  53. );
  54. Map<String, Object> result = wxPayService.payNotify(xmlData);
  55. assertEquals("SUCCESS", result.get("return_code"));
  56. verify(wxPayOrderMapper).updateById(any(WxPayOrder.class));
  57. }
  58. @Test
  59. void testRefund() {
  60. WxPayOrder order = new WxPayOrder();
  61. order.setOutTradeNo("WXPAY001");
  62. order.setStatus("success");
  63. order.setAmount(new BigDecimal("50.00"));
  64. when(wxPayOrderMapper.selectByOutTradeNo(any())).thenReturn(order);
  65. when(wxPayOrderMapper.updateById(any())).thenReturn(1);
  66. Map<String, Object> result = wxPayService.refund("WXPAY001", new BigDecimal("30.00"), "用户申请");
  67. assertEquals("refunded", result.get("status"));
  68. assertEquals(new BigDecimal("30.00"), result.get("refundAmount"));
  69. }
  70. @Test
  71. void testSearchFaq() {
  72. FaqItem faq = new FaqItem();
  73. faq.setId(1L);
  74. faq.setQuestion("如何查询水费?");
  75. faq.setAnswer("通过公众号查询");
  76. when(faqItemMapper.selectList(any())).thenReturn(List.of(faq));
  77. List<FaqItem> results = faqService.searchFaq("水费");
  78. assertFalse(results.isEmpty());
  79. assertEquals(1, results.size());
  80. }
  81. @Test
  82. void testGetHotFaqs() {
  83. FaqItem faq = new FaqItem();
  84. faq.setHitCount(100);
  85. when(faqItemMapper.selectList(any())).thenReturn(List.of(faq));
  86. List<FaqItem> results = faqService.getHotFaqs(5);
  87. assertFalse(results.isEmpty());
  88. }
  89. @Test
  90. void testIntentResolve() {
  91. IntentRule rule = new IntentRule();
  92. rule.setId(1L);
  93. rule.setPattern(".*查.*账单.*");
  94. rule.setIntentType("QUERY_BILL");
  95. rule.setResponse("正在查询...");
  96. rule.setHitCount(0);
  97. when(intentRuleMapper.selectList(any())).thenReturn(List.of(rule));
  98. when(intentRuleMapper.updateById(any())).thenReturn(1);
  99. Map<String, Object> result = intentService.resolve("我想查账单");
  100. assertNotNull(result);
  101. assertEquals("QUERY_BILL", result.get("intentType"));
  102. }
  103. @Test
  104. void testIntentResolveNoMatch() {
  105. when(intentRuleMapper.selectList(any())).thenReturn(List.of());
  106. Map<String, Object> result = intentService.resolve("今天天气怎么样");
  107. assertNotNull(result);
  108. assertEquals("UNKNOWN", result.get("intentType"));
  109. }
  110. @Test
  111. void testCreateFaq() {
  112. FaqItem faq = new FaqItem();
  113. faq.setQuestion("新问题");
  114. faq.setAnswer("新答案");
  115. faq.setCategory("其他");
  116. when(faqItemMapper.insert(any())).thenReturn(1);
  117. FaqItem result = faqService.createFaq(faq);
  118. assertNotNull(result);
  119. assertEquals("新问题", result.getQuestion());
  120. verify(faqItemMapper).insert(any(FaqItem.class));
  121. }
  122. }