RuleSyncServiceImplTest.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package com.mangoo.rating.recommend.cart;
  2. import com.mangoo.rating.recommend.AjaxResult;
  3. import com.mangoo.rating.recommend.manager.ActiveBatchManager;
  4. import com.mangoo.rating.recommend.manager.CardPopManager;
  5. import com.mangoo.rating.recommend.manager.CardValueHistoryManager;
  6. import com.mangoo.rating.recommend.manager.RatingRecommendRuleManager;
  7. import com.mangoo.rating.recommend.po.RatingRecommendRulePO;
  8. import com.mangoo.rating.recommend.request.recommend.RuleSyncCardDTO;
  9. import com.mangoo.rating.recommend.request.recommend.RuleSyncRequest;
  10. import com.mangoo.rating.recommend.service.impl.RuleSyncServiceImpl;
  11. import org.junit.jupiter.api.BeforeEach;
  12. import org.junit.jupiter.api.Test;
  13. import org.junit.jupiter.api.extension.ExtendWith;
  14. import org.mockito.ArgumentCaptor;
  15. import org.mockito.Captor;
  16. import org.mockito.InjectMocks;
  17. import org.mockito.Mock;
  18. import org.mockito.junit.jupiter.MockitoExtension;
  19. import java.util.ArrayList;
  20. import java.util.Arrays;
  21. import java.util.Collections;
  22. import java.util.List;
  23. import static org.junit.jupiter.api.Assertions.assertEquals;
  24. import static org.junit.jupiter.api.Assertions.assertNotEquals;
  25. import static org.mockito.Mockito.lenient;
  26. import static org.mockito.Mockito.never;
  27. import static org.mockito.Mockito.verify;
  28. import static org.mockito.Mockito.when;
  29. /**
  30. * RuleSyncServiceImpl Mockito 单测
  31. *
  32. * @author gengjintao
  33. * @date 2026/06/25
  34. */
  35. @ExtendWith(MockitoExtension.class)
  36. class RuleSyncServiceImplTest {
  37. @Mock
  38. private RatingRecommendRuleManager ruleManager;
  39. @Mock
  40. private CardPopManager cardPopManager;
  41. @Mock
  42. private CardValueHistoryManager cardValueHistoryManager;
  43. @Mock
  44. private ActiveBatchManager activeBatchManager;
  45. @InjectMocks
  46. private RuleSyncServiceImpl ruleSyncService;
  47. @Captor
  48. private ArgumentCaptor<List<RatingRecommendRulePO>> ruleListCaptor;
  49. @BeforeEach
  50. void setUp() {
  51. // 默认无生效批次 + 清旧批次查询返回空,避免 NPE
  52. lenient().when(activeBatchManager.selectActiveBatchNo()).thenReturn(null);
  53. lenient().when(ruleManager.selectDistinctBatchNos()).thenReturn(Collections.emptyList());
  54. }
  55. private RuleSyncCardDTO card(String cardId) {
  56. RuleSyncCardDTO c = new RuleSyncCardDTO();
  57. c.setCardId(cardId);
  58. c.setPlayer("p");
  59. c.setYear("2026");
  60. c.setSeries("s");
  61. c.setCardSet("BASE");
  62. // 评级时效字段已重构:旧 recommendEfficiency(int) -> 新 evaluateEfficiencyId(Long)
  63. c.setEvaluateEfficiencyId(2L);
  64. return c;
  65. }
  66. private RuleSyncRequest req(String batchNo, RuleSyncCardDTO... cards) {
  67. RuleSyncRequest r = new RuleSyncRequest();
  68. r.setBatchNo(batchNo);
  69. r.setCards(new ArrayList<>(Arrays.asList(cards)));
  70. return r;
  71. }
  72. private int code(AjaxResult r) {
  73. return ((Number) r.get("code")).intValue();
  74. }
  75. @Test
  76. void 正常_全量替换并切批次() {
  77. AjaxResult result = ruleSyncService.sync(req("2026062501", card("CARD-1")));
  78. assertEquals(0, code(result)); // 成功码 0
  79. // 切指针到新批次
  80. verify(activeBatchManager).updateActiveBatchNo("2026062501");
  81. // 规则批量插入被调用
  82. verify(ruleManager).batchInsert(ruleListCaptor.capture());
  83. assertEquals(1, ruleListCaptor.getValue().size());
  84. }
  85. @Test
  86. void 空batchNo_拒绝且不写库() {
  87. AjaxResult result = ruleSyncService.sync(req("", card("CARD-1")));
  88. assertNotEquals(0, code(result));
  89. verify(ruleManager, never()).batchInsert(org.mockito.ArgumentMatchers.anyList());
  90. verify(activeBatchManager, never()).updateActiveBatchNo(org.mockito.ArgumentMatchers.anyString());
  91. }
  92. @Test
  93. void 空cards_拒绝() {
  94. RuleSyncRequest r = new RuleSyncRequest();
  95. r.setBatchNo("2026062501");
  96. r.setCards(new ArrayList<>());
  97. AjaxResult result = ruleSyncService.sync(r);
  98. assertNotEquals(0, code(result));
  99. verify(ruleManager, never()).batchInsert(org.mockito.ArgumentMatchers.anyList());
  100. }
  101. @Test
  102. void 旧批次_拒绝回灌() {
  103. when(activeBatchManager.selectActiveBatchNo()).thenReturn("2026062502");
  104. AjaxResult result = ruleSyncService.sync(req("2026062501", card("CARD-1")));
  105. assertNotEquals(0, code(result)); // 新批次 <= 生效批次,拒绝
  106. verify(ruleManager, never()).batchInsert(org.mockito.ArgumentMatchers.anyList());
  107. }
  108. @Test
  109. void cardId去重_重复只插一条() {
  110. AjaxResult result = ruleSyncService.sync(req("2026062501", card("DUP"), card("DUP")));
  111. assertEquals(0, code(result));
  112. verify(ruleManager).batchInsert(ruleListCaptor.capture());
  113. assertEquals(1, ruleListCaptor.getValue().size()); // 同 cardId 去重为 1
  114. }
  115. }