package cn.iocoder.yudao.module.mes.dal.mysql.wm.productsales; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesDetailDO; import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import java.math.BigDecimal; import java.util.List; import java.util.function.Consumer; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; import static org.junit.jupiter.api.Assertions.*; /** * {@link MesWmProductSalesDetailMapper} 的单元测试 *

* 覆盖:selectListByLineId、selectListBySalesId、deleteByLineId、deleteBySalesId */ public class MesWmProductSalesDetailMapperTest extends BaseDbUnitTest { @Resource private MesWmProductSalesDetailMapper detailMapper; // ==================== 辅助方法 ==================== /** * 创建明细 DO,固定 BigDecimal 精度为 2 位,避免 H2 decimal(14,2) 精度不匹配 */ private MesWmProductSalesDetailDO createDetailPojo(Consumer consumer) { return randomPojo(MesWmProductSalesDetailDO.class, o -> { o.setQuantity(new BigDecimal("10.00")); consumer.accept(o); }); } // ==================== selectListByLineId ==================== @Test public void testSelectListByLineId_match() { Long lineId = 100L; MesWmProductSalesDetailDO match = createDetailPojo(o -> { o.setLineId(lineId); o.setSalesId(1L); }); detailMapper.insert(match); // 插入另一条不同 lineId 的记录,不应被返回 detailMapper.insert(cloneIgnoreId(match, o -> o.setLineId(999L))); List result = detailMapper.selectListByLineId(lineId); assertEquals(1, result.size()); assertPojoEquals(match, result.get(0)); } @Test public void testSelectListByLineId_multipleRows() { Long lineId = 200L; MesWmProductSalesDetailDO detail1 = createDetailPojo(o -> { o.setLineId(lineId); o.setSalesId(2L); }); MesWmProductSalesDetailDO detail2 = createDetailPojo(o -> { o.setLineId(lineId); o.setSalesId(2L); }); detailMapper.insert(detail1); detailMapper.insert(detail2); List result = detailMapper.selectListByLineId(lineId); assertEquals(2, result.size()); } @Test public void testSelectListByLineId_noMatch() { MesWmProductSalesDetailDO detail = createDetailPojo(o -> { o.setLineId(300L); o.setSalesId(3L); }); detailMapper.insert(detail); List result = detailMapper.selectListByLineId(999L); assertTrue(result.isEmpty()); } // ==================== selectListBySalesId ==================== @Test public void testSelectListBySalesId_match() { Long salesId = 10L; MesWmProductSalesDetailDO match = createDetailPojo(o -> { o.setSalesId(salesId); o.setLineId(1L); }); detailMapper.insert(match); // 插入另一条不同 salesId 的记录 detailMapper.insert(cloneIgnoreId(match, o -> o.setSalesId(888L))); List result = detailMapper.selectListBySalesId(salesId); assertEquals(1, result.size()); assertPojoEquals(match, result.get(0)); } @Test public void testSelectListBySalesId_multipleRows() { Long salesId = 20L; MesWmProductSalesDetailDO detail1 = createDetailPojo(o -> { o.setSalesId(salesId); o.setLineId(11L); }); MesWmProductSalesDetailDO detail2 = createDetailPojo(o -> { o.setSalesId(salesId); o.setLineId(12L); }); detailMapper.insert(detail1); detailMapper.insert(detail2); List result = detailMapper.selectListBySalesId(salesId); assertEquals(2, result.size()); } @Test public void testSelectListBySalesId_noMatch() { MesWmProductSalesDetailDO detail = createDetailPojo(o -> { o.setSalesId(30L); o.setLineId(2L); }); detailMapper.insert(detail); List result = detailMapper.selectListBySalesId(9999L); assertTrue(result.isEmpty()); } // ==================== deleteByLineId ==================== @Test public void testDeleteByLineId_deletesOnlyTargetLine() { Long lineId = 400L; MesWmProductSalesDetailDO toDelete = createDetailPojo(o -> { o.setLineId(lineId); o.setSalesId(4L); }); MesWmProductSalesDetailDO toKeep = createDetailPojo(o -> { o.setLineId(500L); o.setSalesId(4L); }); detailMapper.insert(toDelete); detailMapper.insert(toKeep); detailMapper.deleteByLineId(lineId); // lineId=400 的记录已被逻辑删除 List deletedResult = detailMapper.selectListByLineId(lineId); assertTrue(deletedResult.isEmpty(), "lineId=400 的记录应被删除"); // lineId=500 的记录保留 List keptResult = detailMapper.selectListByLineId(500L); assertEquals(1, keptResult.size()); } @Test public void testDeleteByLineId_multipleRows() { Long lineId = 600L; detailMapper.insert(createDetailPojo(o -> { o.setLineId(lineId); o.setSalesId(5L); })); detailMapper.insert(createDetailPojo(o -> { o.setLineId(lineId); o.setSalesId(5L); })); detailMapper.deleteByLineId(lineId); List result = detailMapper.selectListByLineId(lineId); assertTrue(result.isEmpty(), "同 lineId 下的所有记录均应被删除"); } // ==================== deleteBySalesId ==================== @Test public void testDeleteBySalesId_deletesOnlyTargetSales() { Long salesId = 700L; MesWmProductSalesDetailDO toDelete = createDetailPojo(o -> { o.setSalesId(salesId); o.setLineId(6L); }); MesWmProductSalesDetailDO toKeep = createDetailPojo(o -> { o.setSalesId(800L); o.setLineId(7L); }); detailMapper.insert(toDelete); detailMapper.insert(toKeep); detailMapper.deleteBySalesId(salesId); // salesId=700 的记录已被逻辑删除 List deletedResult = detailMapper.selectListBySalesId(salesId); assertTrue(deletedResult.isEmpty(), "salesId=700 的记录应被删除"); // salesId=800 的记录保留 List keptResult = detailMapper.selectListBySalesId(800L); assertEquals(1, keptResult.size()); } @Test public void testDeleteBySalesId_multipleRows() { Long salesId = 900L; detailMapper.insert(createDetailPojo(o -> { o.setSalesId(salesId); o.setLineId(8L); })); detailMapper.insert(createDetailPojo(o -> { o.setSalesId(salesId); o.setLineId(9L); })); detailMapper.insert(createDetailPojo(o -> { o.setSalesId(salesId); o.setLineId(10L); })); detailMapper.deleteBySalesId(salesId); List result = detailMapper.selectListBySalesId(salesId); assertTrue(result.isEmpty(), "同 salesId 下的所有记录均应被删除"); } }