test(firstleg): keep sailing copy dates in the future
This commit is contained in:
+10
-8
@@ -13,6 +13,7 @@ import org.mockito.MockitoAnnotations;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -25,6 +26,7 @@ import static org.mockito.Mockito.when;
|
||||
class SailingCalendarServiceTest {
|
||||
@Mock private SailingCalendarRepository repository;
|
||||
@InjectMocks private SailingCalendarService service;
|
||||
private final LocalDateTime copiedDeparture = LocalDateTime.now(ZoneId.of("Asia/Shanghai")).plusDays(14);
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
@@ -33,8 +35,8 @@ class SailingCalendarServiceTest {
|
||||
|
||||
@Test
|
||||
void replaysAnExistingCopyInsteadOfReturningAnInternalError() {
|
||||
SailingEntity source = sailing(1L, "SL-SOURCE", "MANUAL", "QA-20261005", LocalDateTime.of(2026, 10, 5, 10, 0));
|
||||
SailingEntity existing = sailing(2L, "SL-COPY", "COPY", "QA-20261005", LocalDateTime.of(2026, 10, 12, 10, 0));
|
||||
SailingEntity source = sailing(1L, "SL-SOURCE", "MANUAL", "QA-20261005", copiedDeparture.minusDays(7));
|
||||
SailingEntity existing = sailing(2L, "SL-COPY", "COPY", "QA-20261005", copiedDeparture);
|
||||
SailingHistoryEntity history = new SailingHistoryEntity();
|
||||
history.setAction("COPY"); history.setReason("复制自SL-SOURCE"); history.setSailingId(2L);
|
||||
when(repository.sailing(1L)).thenReturn(source);
|
||||
@@ -45,7 +47,7 @@ class SailingCalendarServiceTest {
|
||||
when(repository.bookingSummary(any(SailingEntity.class))).thenReturn(null);
|
||||
|
||||
var result = service.copy(1L, 7L, "admin",
|
||||
new CopyRequest(existing.getEtdAt(), LocalDateTime.of(2026, 10, 9, 18, 0)));
|
||||
new CopyRequest(existing.getEtdAt(), copiedDeparture.minusDays(3)));
|
||||
|
||||
assertThat(result.sailing().id()).isEqualTo(2L);
|
||||
verify(repository, never()).insert(any(SailingEntity.class));
|
||||
@@ -53,13 +55,13 @@ class SailingCalendarServiceTest {
|
||||
|
||||
@Test
|
||||
void reportsBusinessConflictForAnUnrelatedExistingSailing() {
|
||||
SailingEntity source = sailing(1L, "SL-SOURCE", "MANUAL", "QA-20261005", LocalDateTime.of(2026, 10, 5, 10, 0));
|
||||
SailingEntity existing = sailing(2L, "SL-OTHER", "TEMPLATE", "QA-20261005", LocalDateTime.of(2026, 10, 12, 10, 0));
|
||||
SailingEntity source = sailing(1L, "SL-SOURCE", "MANUAL", "QA-20261005", copiedDeparture.minusDays(7));
|
||||
SailingEntity existing = sailing(2L, "SL-OTHER", "TEMPLATE", "QA-20261005", copiedDeparture);
|
||||
when(repository.sailing(1L)).thenReturn(source);
|
||||
when(repository.sailingByBusinessKey(8L, "MATSON", "CNNGB", "USLGB", existing.getEtdAt(), "QA-20261005")).thenReturn(existing);
|
||||
|
||||
assertThatThrownBy(() -> service.copy(1L, 7L, "admin",
|
||||
new CopyRequest(existing.getEtdAt(), LocalDateTime.of(2026, 10, 9, 18, 0))))
|
||||
new CopyRequest(existing.getEtdAt(), copiedDeparture.minusDays(3))))
|
||||
.isInstanceOf(BizException.class)
|
||||
.hasMessageContaining("已存在航次 QA-20261005");
|
||||
verify(repository, never()).insert(any(SailingEntity.class));
|
||||
@@ -67,11 +69,11 @@ class SailingCalendarServiceTest {
|
||||
|
||||
@Test
|
||||
void rejectsCutoffAtOrAfterCopiedDeparture() {
|
||||
SailingEntity source = sailing(1L, "SL-SOURCE", "MANUAL", "QA-20261005", LocalDateTime.of(2026, 10, 5, 10, 0));
|
||||
SailingEntity source = sailing(1L, "SL-SOURCE", "MANUAL", "QA-20261005", copiedDeparture.minusDays(7));
|
||||
when(repository.sailing(1L)).thenReturn(source);
|
||||
|
||||
assertThatThrownBy(() -> service.copy(1L, 7L, "admin",
|
||||
new CopyRequest(LocalDateTime.of(2026, 10, 12, 10, 0), LocalDateTime.of(2026, 10, 12, 10, 0))))
|
||||
new CopyRequest(copiedDeparture, copiedDeparture)))
|
||||
.isInstanceOf(BizException.class)
|
||||
.hasMessageContaining("收货截止必须早于开船");
|
||||
verify(repository, never()).insert(any(SailingEntity.class));
|
||||
|
||||
Reference in New Issue
Block a user