11 小时以前 b29d86d9ed34fd890eb14cb7a75f6ae4f7148865
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
package cn.iocoder.yudao.module.mes.service.trace.consumer;
 
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.mes.dal.dataobject.trace.consumer.MesTraceConsumerScanEventDO;
import cn.iocoder.yudao.module.mes.dal.mysql.trace.consumer.MesTraceConsumerScanEventMapper;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.Import;
 
import java.util.List;
 
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
 
/**
 * {@link MesTraceConsumerScanEventServiceImpl} 的单元测试
 *
 * @author 超级管理员
 */
@Import(MesTraceConsumerScanEventServiceImpl.class)
public class MesTraceConsumerScanEventServiceImplTest extends BaseDbUnitTest {
 
    @Resource
    private MesTraceConsumerScanEventService eventService;
 
    @Resource
    private MesTraceConsumerScanEventMapper eventMapper;
 
    /**
     * 查询刚插入的第一条事件(id 由序列/雪花算法生成,不固定为 1)
     */
    private MesTraceConsumerScanEventDO getFirstEvent() {
        List<MesTraceConsumerScanEventDO> list = eventMapper.selectList(null);
        return list.isEmpty() ? null : list.get(0);
    }
 
    @Test
    public void testRecordScan_成功事件落库() {
        // 无请求上下文时 IP/UA/渠道为空,但事件仍应落库且不抛异常
        eventService.recordScan("PC-RAW-CODE", "PC-CODE-001", "BAG", 100L, true, null);
 
        MesTraceConsumerScanEventDO event = getFirstEvent();
        assertNotNull(event);
        assertEquals("PC-RAW-CODE", event.getTraceCode());
        assertEquals("PC-CODE-001", event.getNormalizedCode());
        assertEquals("BAG", event.getSourceType());
        assertEquals(100L, event.getBatchId());
        assertTrue(Boolean.TRUE.equals(event.getSuccess()));
        assertNull(event.getErrorCode());
        assertNull(event.getIpHash()); // 无请求上下文无明文 IP,也不应保存
        assertNull(event.getChannel());
        assertNotNull(event.getEventTime());
    }
 
    @Test
    public void testRecordScan_失败事件落库() {
        eventService.recordScan("NOT-EXIST", null, null, null, false, "MES_TRACE_CODE_NOT_FOUND");
 
        MesTraceConsumerScanEventDO event = getFirstEvent();
        assertNotNull(event);
        assertFalse(Boolean.TRUE.equals(event.getSuccess()));
        assertEquals("MES_TRACE_CODE_NOT_FOUND", event.getErrorCode());
        assertNull(event.getSourceType());
        assertNull(event.getBatchId());
    }
 
    @Test
    public void testRecordScan_超长码截断() {
        String longCode = "X".repeat(500);
        eventService.recordScan(longCode, longCode, "BATCH", null, true, null);
 
        MesTraceConsumerScanEventDO event = getFirstEvent();
        assertNotNull(event);
        // traceCode 截断到 255、normalizedCode 截断到 128
        assertEquals(255, event.getTraceCode().length());
        assertEquals(128, event.getNormalizedCode().length());
    }
 
    @Test
    public void testRecordScan_记录异常不影响接口() {
        // recordScan 内部吞掉异常,事件仍应正常落库
        eventService.recordScan("CODE", "CODE", "BATCH", null, true, null);
        assertNotNull(getFirstEvent());
    }
 
}