79 分钟以前 0be509d1d1485b4d8593da8ef125cca3d079d235
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package cn.iocoder.yudao.module.mes.service.wm.materialstock;
 
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockPageReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.materialstock.MesWmMaterialStockMapper;
import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemTypeService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.bean.override.mockito.MockitoBean;
 
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.function.Consumer;
 
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;
 
/**
 * {@link MesWmMaterialStockServiceImpl} 的单元测试
 *
 * @author 芋道源码
 */
@Import(MesWmMaterialStockServiceImpl.class)
public class MesWmMaterialStockServiceImplTest extends BaseDbUnitTest {
 
    @Resource
    private MesWmMaterialStockServiceImpl materialStockService;
 
    @Resource
    private MesWmMaterialStockMapper materialStockMapper;
 
    @MockitoBean
    private MesMdItemService itemService;
    @MockitoBean
    private MesMdItemTypeService itemTypeService;
    @MockitoBean
    private MesWmWarehouseAreaService areaService;
    @MockitoBean
    private MesWmWarehouseService warehouseService;
 
    @Test
    public void testGetMaterialStockPage_virtualFilterOnly() {
        // 准备数据:虚拟仓库存 + 普通仓库存
        Long virtualWarehouseId = 100L;
        Long normalWarehouseId = 200L;
        MesWmMaterialStockDO virtualStock = createMaterialStockPojo(o -> o.setWarehouseId(virtualWarehouseId));
        MesWmMaterialStockDO normalStock = createMaterialStockPojo(o -> o.setWarehouseId(normalWarehouseId));
        materialStockMapper.insert(virtualStock);
        materialStockMapper.insert(normalStock);
        mockVirtualWarehouse(virtualWarehouseId);
 
        // 调用:只看虚拟仓
        MesWmMaterialStockPageReqVO reqVO = new MesWmMaterialStockPageReqVO();
        reqVO.setVirtualFilter(MesWmMaterialStockPageReqVO.VIRTUAL_FILTER_ONLY);
        PageResult<MesWmMaterialStockDO> result = materialStockService.getMaterialStockPage(reqVO);
 
        // 断言:只返回虚拟仓库存,且 total 与列表一致
        assertEquals(1, result.getTotal());
        assertEquals(1, result.getList().size());
        assertEquals(virtualStock.getId(), result.getList().get(0).getId());
    }
 
    @Test
    public void testGetMaterialStockPage_virtualFilterExclude() {
        // 准备数据:虚拟仓库存 + 普通仓库存
        Long virtualWarehouseId = 100L;
        Long normalWarehouseId = 200L;
        MesWmMaterialStockDO virtualStock = createMaterialStockPojo(o -> o.setWarehouseId(virtualWarehouseId));
        MesWmMaterialStockDO normalStock = createMaterialStockPojo(o -> o.setWarehouseId(normalWarehouseId));
        materialStockMapper.insert(virtualStock);
        materialStockMapper.insert(normalStock);
        mockVirtualWarehouse(virtualWarehouseId);
 
        // 调用:排除虚拟仓
        MesWmMaterialStockPageReqVO reqVO = new MesWmMaterialStockPageReqVO();
        reqVO.setVirtualFilter(MesWmMaterialStockPageReqVO.VIRTUAL_FILTER_EXCLUDE);
        PageResult<MesWmMaterialStockDO> result = materialStockService.getMaterialStockPage(reqVO);
 
        // 断言:只返回普通仓库存,且 total 与列表一致
        assertEquals(1, result.getTotal());
        assertEquals(1, result.getList().size());
        assertEquals(normalStock.getId(), result.getList().get(0).getId());
    }
 
    private MesWmMaterialStockDO createMaterialStockPojo(Consumer<MesWmMaterialStockDO> consumer) {
        return randomPojo(MesWmMaterialStockDO.class, o -> {
            o.setQuantity(new BigDecimal("10.00"));
            o.setReceiptTime(LocalDateTime.of(2026, 1, 1, 0, 0));
            o.setFrozen(false);
            o.setDeleted(false);
            consumer.accept(o);
        });
    }
 
    private void mockVirtualWarehouse(Long virtualWarehouseId) {
        MesWmWarehouseDO virtualWarehouse = new MesWmWarehouseDO();
        virtualWarehouse.setId(virtualWarehouseId);
        when(warehouseService.getWarehouseByCode(MesWmWarehouseDO.WIP_VIRTUAL_WAREHOUSE))
                .thenReturn(virtualWarehouse);
    }
 
}