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