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());
|
}
|
|
}
|