This commit is contained in:
2026-09-10 12:18:33 +08:00
parent 443b01c8a8
commit 98f61ba3ed
22 changed files with 371 additions and 56 deletions
@@ -9,7 +9,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class CustomerDimensionRuleClientContractTest {
@Test
void usesOneAtomicCallForTheFourDefaultBoxDimensionRecords() throws Exception {
void usesOneAtomicCallForBoxDimensionsAndWeightCoefficientRule() throws Exception {
FeignClient feign = CustomerDimensionRuleClient.class.getAnnotation(FeignClient.class);
PostMapping initialize = CustomerDimensionRuleClient.class
.getMethod("initialize", String.class,
@@ -25,6 +25,6 @@ class CustomerDimensionRuleClientContractTest {
assertThat(compensate.value()).containsExactly("/defaults");
assertThat(CustomerDimensionRuleClient.InitializationResponse.class.getRecordComponents())
.extracting(java.lang.reflect.RecordComponent::getName)
.containsExactly("configId", "createdByThisInitialization");
.containsExactly("configId", "chargeRuleId", "createdByThisInitialization");
}
}
@@ -43,15 +43,33 @@ class CustomerDimensionInitializationRelayTest {
CustomerDimensionInitializationTask task = task("INITIALIZE", 0);
when(repository.claim(anyLong(), anyString(), any(LocalDateTime.class))).thenReturn(task);
when(client.initialize(anyString(), any())).thenReturn(ApiResponse.success(
new CustomerDimensionRuleClient.InitializationResponse(91L, true)));
new CustomerDimensionRuleClient.InitializationResponse(91L, 191L, true)));
relay.deliver(10001L);
ArgumentCaptor<CustomerDimensionRuleClient.InitializationRequest> request =
ArgumentCaptor.forClass(CustomerDimensionRuleClient.InitializationRequest.class);
verify(client).initialize(anyString(), request.capture());
assertTrue("柏悦物流".equals(request.getValue().customerName()));
verify(repository).markReady(task, workerId(), 91L);
verify(repository, never()).recordFailure(any(), anyString(), anyInt(), any(), anyString(),
anyString(), any(Boolean.class));
}
@Test
void missingWeightCoefficientRuleKeepsInitializationFromBecomingReady() {
CustomerDimensionInitializationTask task = task("INITIALIZE", 0);
when(repository.claim(anyLong(), anyString(), any(LocalDateTime.class))).thenReturn(task);
when(client.initialize(anyString(), any())).thenReturn(ApiResponse.success(
new CustomerDimensionRuleClient.InitializationResponse(91L, null, true)));
relay.deliver(10001L);
verify(repository, never()).markReady(any(), anyString(), any());
verify(repository).recordFailure(any(), anyString(), anyInt(), any(), anyString(),
anyString(), any(Boolean.class));
}
@Test
void transientFailureStaysPendingWithDiagnosticAndBackoff() {
CustomerDimensionInitializationTask task = task("INITIALIZE", 0);
@@ -95,7 +113,7 @@ class CustomerDimensionInitializationRelayTest {
}
private CustomerDimensionInitializationTask task(String action, int attempts) {
return new CustomerDimensionInitializationTask(10001L, 9001L, "iam-customer-create:10001",
return new CustomerDimensionInitializationTask(10001L, 9001L, "柏悦物流", "iam-customer-create:10001",
action, "SENDING", attempts, 3);
}