test: cover all customer dimension weighting rules

This commit is contained in:
2026-08-08 12:04:30 +08:00
parent a35cd868b9
commit 08f71cf17e
@@ -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<CustomerDimensionConfigEntity> 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();
}
}