package com.ruoyi.config; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertFalse; import java.io.InputStream; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Test; /** 测试双设备绑定、字段快照和接收状态的 Mapper 契约。 */ class TestDeviceBindingMapperContractTest { @Test void persistsAndReadsCollectorMappingsAndFieldSnapshots() { String mapper = resource("mapper/system/TTestMapper.xml"); String snapshotMapper = resource("mapper/system/TSharedFieldSnapshotMapper.xml"); assertTrue(mapper.contains("id=\"insertTestCollectorChannel\"")); assertTrue(mapper.contains("id=\"selectTestCollectorChannels\"")); assertTrue(snapshotMapper.contains("id=\"insert\"")); assertTrue(snapshotMapper.contains("id=\"selectByTestId\"")); assertTrue(mapper.contains("reception_status = 'NOT_STARTED'")); assertTrue(mapper.contains("channel_count channelCount")); assertTrue(mapper.contains("id=\"selectBatteryNosByTestIds\"")); assertTrue(mapper.contains("channel_fact.channel_id channelId")); assertTrue(mapper.contains("id=\"selectReceptionChannelForUpdate\"")); assertTrue(mapper.contains("channel_fact.online_status onlineStatus")); assertTrue(mapper.contains("channel_fact.last_seen_at_utc lastSeenAtUtc")); assertTrue(mapper.contains("then 'RUNNING_ABNORMAL'")); assertTrue(mapper.contains("exception_fact.interval_status = 'OPEN'")); assertTrue(mapper.contains("set test_status = 'COMPLETED'")); assertFalse(mapper.contains("group_concat")); } private static String resource(String path) { try (InputStream stream = TestDeviceBindingMapperContractTest.class.getClassLoader().getResourceAsStream(path)) { if (stream == null) throw new AssertionError("缺少资源 " + path); return new String(stream.readAllBytes(), StandardCharsets.UTF_8); } catch (Exception exception) { throw new AssertionError("无法读取资源 " + path, exception); } } }