test: cover all customer dimension weighting rules
This commit is contained in:
+62
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user