diff --git a/firstleg/src/test/java/com/baiyue/firstleg/sailingcalendar/service/SailingCalendarServiceTest.java b/firstleg/src/test/java/com/baiyue/firstleg/sailingcalendar/service/SailingCalendarServiceTest.java index 1c7a8635a..8381c951c 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/sailingcalendar/service/SailingCalendarServiceTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/sailingcalendar/service/SailingCalendarServiceTest.java @@ -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));