Procházet zdrojové kódy

test(recommend): OrderGrouper TDD 红灯测试(7 项)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
jintao.geng před 1 měsícem
rodič
revize
865531de13

+ 94 - 0
mango-application/src/test/java/com/mangoo/rating/recommend/cart/OrderGrouperTest.java

@@ -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());
+    }
+}