This commit is contained in:
2026-08-11 13:55:16 +08:00
parent 40171b7047
commit 7c2274be31
9 changed files with 320 additions and 8 deletions
@@ -0,0 +1,68 @@
package com.baiyue.firstleg.loading.service;
import com.baiyue.firstleg.entity.LoadingPlanEntity;
import com.baiyue.firstleg.entity.LoadingPlanItemEntity;
import com.baiyue.firstleg.repository.SmartLoadingRepository;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.math.BigDecimal;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class FinanceCostSnapshotServiceTest {
@Mock SmartLoadingRepository repository;
@InjectMocks FinanceCostSnapshotService service;
@Test
void returnsOnlyValidVolumesOwnedByCustomer() {
when(repository.plan(88L)).thenReturn(mock(LoadingPlanEntity.class));
when(repository.items(88L)).thenReturn(List.of(
item(10L, 101L, 1001L, "1.25"),
item(11L, 102L, 1002L, "2.00"),
item(10L, 103L, 1003L, "0")));
var snapshot = service.container(10L, 88L);
assertThat(snapshot.customerId()).isEqualTo(10L);
assertThat(snapshot.containerId()).isEqualTo(88L);
assertThat(snapshot.orders()).containsExactly(
new FinanceCostSnapshotService.OrderVolume(101L, 1001L, new BigDecimal("1.25")));
}
@Test
void rejectsContainerWithoutValidCustomerVolume() {
when(repository.plan(88L)).thenReturn(mock(LoadingPlanEntity.class));
when(repository.items(88L)).thenReturn(List.of(
item(11L, 102L, 1002L, "2.00"),
item(10L, 103L, 1003L, "0")));
assertThatThrownBy(() -> service.container(10L, 88L))
.hasMessageContaining("没有该客户的有效订单体积");
}
@Test
void rejectsUnknownContainer() {
when(repository.plan(88L)).thenReturn(null);
assertThatThrownBy(() -> service.container(10L, 88L))
.hasMessageContaining("柜次不存在");
}
private LoadingPlanItemEntity item(long customerId, long orderId, long inboundId, String volume) {
var item = new LoadingPlanItemEntity();
item.setAccountId(customerId);
item.setOrderId(orderId);
item.setInboundId(inboundId);
item.setVolumeCbm(new BigDecimal(volume));
return item;
}
}