From 08f71cf17e4e0607edddf04f02034ade1f97761a Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Sat, 8 Aug 2026 12:04:30 +0800 Subject: [PATCH] test: cover all customer dimension weighting rules --- ...erDimensionWeightingTerminalRulesTest.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 firstleg/src/test/java/com/baiyue/firstleg/service/CustomerDimensionWeightingTerminalRulesTest.java diff --git a/firstleg/src/test/java/com/baiyue/firstleg/service/CustomerDimensionWeightingTerminalRulesTest.java b/firstleg/src/test/java/com/baiyue/firstleg/service/CustomerDimensionWeightingTerminalRulesTest.java new file mode 100644 index 000000000..46f8d80f3 --- /dev/null +++ b/firstleg/src/test/java/com/baiyue/firstleg/service/CustomerDimensionWeightingTerminalRulesTest.java @@ -0,0 +1,62 @@ +package com.baiyue.firstleg.service; + +import com.baiyue.firstleg.domain.CustomerDimensionBoxType; +import com.baiyue.firstleg.entity.CustomerDimensionConfigEntity; +import com.baiyue.firstleg.repository.CustomerDimensionConfigRepository; +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** Locks the four customer rules used by both batch and single-carton measurement paths. */ +class CustomerDimensionWeightingTerminalRulesTest { + private final CustomerDimensionConfigRepository repository = mock(CustomerDimensionConfigRepository.class); + private final CustomerDimensionWeightingService service = new CustomerDimensionWeightingService(repository); + + @Test + void resolvesAllFourConfiguredCartonRules() { + when(repository.findAll(10001L)).thenReturn(rules(10001L)); + var ruleSet = service.load(10001L); + + assertWeighted(ruleSet, "10", "10", "10", CustomerDimensionBoxType.SMALL, + "34", "24", "24", "0.020"); + assertWeighted(ruleSet, "35", "25", "25", CustomerDimensionBoxType.MEDIUM, + "44", "34", "34", "0.051"); + assertWeighted(ruleSet, "45", "35", "35", CustomerDimensionBoxType.LARGE, + "54", "44", "44", "0.105"); + assertWeighted(ruleSet, "55", "45", "45", CustomerDimensionBoxType.EXTRA_LARGE, + "64", "54", "54", "0.187"); + } + + private static void assertWeighted(CustomerDimensionWeightingService.RuleSet rules, + String length, String width, String height, + CustomerDimensionBoxType type, + String outerLength, String outerWidth, String outerHeight, + String unitVolume) { + var weighted = rules.resolve(new BigDecimal(length), new BigDecimal(width), new BigDecimal(height)); + assertThat(weighted.boxType()).isEqualTo(type); + assertThat(weighted.outerLengthCm()).isEqualByComparingTo(outerLength); + assertThat(weighted.outerWidthCm()).isEqualByComparingTo(outerWidth); + assertThat(weighted.outerHeightCm()).isEqualByComparingTo(outerHeight); + assertThat(weighted.unitVolumeCbm()).isEqualByComparingTo(unitVolume); + } + + private static List rules(long tenantId) { + return Arrays.stream(CustomerDimensionBoxType.values()).map(type -> { + CustomerDimensionConfigEntity rule = new CustomerDimensionConfigEntity(); + rule.setTenantId(tenantId); + rule.setBoxType(type); + rule.setVersion(0); + rule.setInnerLengthCm(type.defaultLengthCm()); + rule.setInnerWidthCm(type.defaultWidthCm()); + rule.setInnerHeightCm(type.defaultHeightCm()); + rule.setEdgeAdditionCm(new BigDecimal("2.000")); + return rule; + }).toList(); + } +}