From 8ff49b501fcb88fdcf29655edbebbea47d1ca9a1 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Thu, 13 Aug 2026 17:30:03 +0800 Subject: [PATCH] fix: handle unfiltered domestic container lists --- .../DomesticContainerRepository.java | 5 +- .../DomesticContainerRepositoryTest.java | 73 +++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 warehouse/src/test/java/com/baiyue/warehouse/domesticcontainer/repository/DomesticContainerRepositoryTest.java diff --git a/warehouse/src/main/java/com/baiyue/warehouse/domesticcontainer/repository/DomesticContainerRepository.java b/warehouse/src/main/java/com/baiyue/warehouse/domesticcontainer/repository/DomesticContainerRepository.java index 94f5fd866..e57fe3197 100644 --- a/warehouse/src/main/java/com/baiyue/warehouse/domesticcontainer/repository/DomesticContainerRepository.java +++ b/warehouse/src/main/java/com/baiyue/warehouse/domesticcontainer/repository/DomesticContainerRepository.java @@ -104,5 +104,8 @@ public class DomesticContainerRepository { } private static String trim(String value) { return value == null ? null : value.trim(); } - private static String upper(String value) { return trim(value).toUpperCase(java.util.Locale.ROOT); } + private static String upper(String value) { + String normalized = trim(value); + return normalized == null ? null : normalized.toUpperCase(java.util.Locale.ROOT); + } } diff --git a/warehouse/src/test/java/com/baiyue/warehouse/domesticcontainer/repository/DomesticContainerRepositoryTest.java b/warehouse/src/test/java/com/baiyue/warehouse/domesticcontainer/repository/DomesticContainerRepositoryTest.java new file mode 100644 index 000000000..1426c30ab --- /dev/null +++ b/warehouse/src/test/java/com/baiyue/warehouse/domesticcontainer/repository/DomesticContainerRepositoryTest.java @@ -0,0 +1,73 @@ +package com.baiyue.warehouse.domesticcontainer.repository; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baiyue.warehouse.domesticcontainer.dto.DomesticContainerDtos; +import com.baiyue.warehouse.domesticcontainer.entity.DomesticContainerInventoryEntity; +import com.baiyue.warehouse.domesticcontainer.entity.DomesticContainerOrderEntity; +import com.baiyue.warehouse.domesticcontainer.mapper.DomesticContainerInventoryMapper; +import com.baiyue.warehouse.domesticcontainer.mapper.DomesticContainerOrderMapper; +import org.apache.ibatis.builder.MapperBuilderAssistant; +import org.apache.ibatis.session.Configuration; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.springframework.test.util.ReflectionTestUtils; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +class DomesticContainerRepositoryTest { + @BeforeAll + static void initializeTableMetadata() { + Configuration configuration = new Configuration(); + TableInfoHelper.initTableInfo(new MapperBuilderAssistant(configuration, "order-test"), + DomesticContainerOrderEntity.class); + TableInfoHelper.initTableInfo(new MapperBuilderAssistant(configuration, "inventory-test"), + DomesticContainerInventoryEntity.class); + } + + @Test + void pagesOrdersWithoutOptionalFilters() { + DomesticContainerOrderMapper mapper = mock(DomesticContainerOrderMapper.class); + DomesticContainerRepository repository = repositoryWith(mapper, mock(DomesticContainerInventoryMapper.class)); + when(mapper.selectPage(any(Page.class), any())).thenAnswer(invocation -> invocation.getArgument(0)); + + repository.pageOrders("INBOUND", new DomesticContainerDtos.OrderQuery(1, 20, null, null, null, null, null)); + + @SuppressWarnings("unchecked") + ArgumentCaptor> wrapper = + ArgumentCaptor.forClass(LambdaQueryWrapper.class); + verify(mapper).selectPage(any(Page.class), wrapper.capture()); + wrapper.getValue().getSqlSegment(); + assertThat(wrapper.getValue().getParamNameValuePairs().values()).contains(0L, "INBOUND"); + } + + @Test + void pagesInventoriesWithoutOptionalFilters() { + DomesticContainerInventoryMapper mapper = mock(DomesticContainerInventoryMapper.class); + DomesticContainerRepository repository = repositoryWith(mock(DomesticContainerOrderMapper.class), mapper); + when(mapper.selectPage(any(Page.class), any())).thenAnswer(invocation -> invocation.getArgument(0)); + + repository.pageInventories(new DomesticContainerDtos.InventoryQuery(1, 20, null, null, null, null)); + + @SuppressWarnings("unchecked") + ArgumentCaptor> wrapper = + ArgumentCaptor.forClass(LambdaQueryWrapper.class); + verify(mapper).selectPage(any(Page.class), wrapper.capture()); + wrapper.getValue().getSqlSegment(); + assertThat(wrapper.getValue().getParamNameValuePairs().values()).containsExactly(0L); + } + + private static DomesticContainerRepository repositoryWith(DomesticContainerOrderMapper orders, + DomesticContainerInventoryMapper inventories) { + DomesticContainerRepository repository = new DomesticContainerRepository(); + ReflectionTestUtils.setField(repository, "orders", orders); + ReflectionTestUtils.setField(repository, "inventories", inventories); + return repository; + } +}