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