|
|
@@ -0,0 +1,94 @@
|
|
|
+package com.mangoo.rating.recommend.cart;
|
|
|
+
|
|
|
+import com.mangoo.rating.recommend.response.recommend.RecommendCardVO;
|
|
|
+import com.mangoo.rating.recommend.service.recommend.OrderGrouper;
|
|
|
+import com.mangoo.rating.recommend.response.recommend.OrderSuggestionVO;
|
|
|
+import org.junit.jupiter.api.Test;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
|
+import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
+
|
|
|
+/**
|
|
|
+ * OrderGrouper TDD 单测
|
|
|
+ *
|
|
|
+ * @author gengjintao
|
|
|
+ * @date 2026/06/24
|
|
|
+ */
|
|
|
+class OrderGrouperTest {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 构造测试用卡 VO,仅设置 clientCardId 与 recommendEfficiency(其他字段不参与分组)
|
|
|
+ */
|
|
|
+ private RecommendCardVO c(String no, int eff) {
|
|
|
+ RecommendCardVO v = new RecommendCardVO();
|
|
|
+ v.setClientCardId(no);
|
|
|
+ v.setRecommendEfficiency(eff);
|
|
|
+ return v;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void 空输入_返回空订单列表() {
|
|
|
+ List<OrderSuggestionVO> orders = OrderGrouper.group(new ArrayList<>());
|
|
|
+ assertTrue(orders.isEmpty());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void null输入_返回空订单列表() {
|
|
|
+ List<OrderSuggestionVO> orders = OrderGrouper.group(null);
|
|
|
+ assertTrue(orders.isEmpty());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void 单卡_返回单订单_组号1() {
|
|
|
+ List<OrderSuggestionVO> orders = OrderGrouper.group(Arrays.asList(c("a", 2)));
|
|
|
+ assertEquals(1, orders.size());
|
|
|
+ assertEquals(1, orders.get(0).getGroupNo());
|
|
|
+ assertEquals(2, orders.get(0).getEfficiency());
|
|
|
+ assertEquals(1, orders.get(0).getCardCount());
|
|
|
+ assertEquals("a", orders.get(0).getCards().get(0).getClientCardId());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void 全同档_合并为一单() {
|
|
|
+ List<OrderSuggestionVO> orders = OrderGrouper.group(Arrays.asList(c("a", 1), c("b", 1), c("c", 1)));
|
|
|
+ assertEquals(1, orders.size());
|
|
|
+ assertEquals(1, orders.get(0).getEfficiency());
|
|
|
+ assertEquals(3, orders.get(0).getCardCount());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void 两档_按档位升序输出_组号从1递增() {
|
|
|
+ // 输入 闪评/普通 乱序,期望输出 普通(1) 在前
|
|
|
+ List<OrderSuggestionVO> orders = OrderGrouper.group(Arrays.asList(c("x", 3), c("y", 1), c("z", 1)));
|
|
|
+ assertEquals(2, orders.size());
|
|
|
+ assertEquals(1, orders.get(0).getGroupNo());
|
|
|
+ assertEquals(1, orders.get(0).getEfficiency());
|
|
|
+ assertEquals(2, orders.get(0).getCardCount());
|
|
|
+ assertEquals(2, orders.get(1).getGroupNo());
|
|
|
+ assertEquals(3, orders.get(1).getEfficiency());
|
|
|
+ assertEquals(1, orders.get(1).getCardCount());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void 三档同时存在_最多3个订单_按档位升序() {
|
|
|
+ List<OrderSuggestionVO> orders = OrderGrouper.group(Arrays.asList(c("a", 2), c("b", 3), c("c", 1)));
|
|
|
+ assertEquals(3, orders.size());
|
|
|
+ assertEquals(1, orders.get(0).getEfficiency()); // 普通
|
|
|
+ assertEquals(2, orders.get(1).getEfficiency()); // 快速
|
|
|
+ assertEquals(3, orders.get(2).getEfficiency()); // 闪评
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void 组内卡列表保持原顺序() {
|
|
|
+ // 同档卡 a/b/c 输入顺序 a c b,期望分组内顺序 a c b
|
|
|
+ List<OrderSuggestionVO> orders = OrderGrouper.group(Arrays.asList(c("a", 1), c("c", 1), c("b", 1)));
|
|
|
+ assertEquals(1, orders.size());
|
|
|
+ assertEquals("a", orders.get(0).getCards().get(0).getClientCardId());
|
|
|
+ assertEquals("c", orders.get(0).getCards().get(1).getClientCardId());
|
|
|
+ assertEquals("b", orders.get(0).getCards().get(2).getClientCardId());
|
|
|
+ }
|
|
|
+}
|