This commit is contained in:
wujinliang
2026-08-27 21:48:47 +08:00
parent daf0ee2acd
commit 9d54c57b7c
38 changed files with 432 additions and 37 deletions
@@ -18,6 +18,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -127,6 +128,31 @@ class OverseasStorageFeeServiceTest {
verify(repository, never()).updateRule(any());
}
@Test
void replacesExistingTiersWhenAddingOrRemovingAGroupTier() {
OverseasStorageFeeRuleEntity rule = rule();
when(repository.find(10L)).thenReturn(rule);
List<OverseasStorageFeeDtos.TierRequest> tiers = List.of(
typedTier("STORAGE", "CBM", 1, 30),
typedTier("STORAGE", "CBM", 31, null),
typedTier("RETURN_STORAGE", "PALLET", 1, 60),
typedTier("RETURN_STORAGE", "PALLET", 61, null));
OverseasStorageFeeDtos.UpdateRequest request = new OverseasStorageFeeDtos.UpdateRequest(
10001L, "绀轰緥瀹㈡埛", "USD", tiers, 1);
when(repository.updateRule(any())).thenReturn(1);
service.update(10L, request);
var calls = inOrder(repository);
calls.verify(repository).updateRule(rule);
calls.verify(repository).deleteTiers(10L);
calls.verify(repository).insertTiers(org.mockito.ArgumentMatchers.argThat(saved ->
saved.size() == 4
&& saved.stream().filter(tier -> "STORAGE".equals(tier.getFeeType())).count() == 2
&& saved.stream().filter(tier -> "RETURN_STORAGE".equals(tier.getFeeType())).count() == 2
&& saved.stream().anyMatch(tier -> tier.getStartDay() == 31 && tier.getEndDay() == null)));
}
@Test
void initializesNineDefaultTiersIdempotently() {
doAnswer(invocation -> { OverseasStorageFeeRuleEntity rule = invocation.getArgument(0); rule.setId(77L); return null; })