ruoyi-admin/src/test/java/com/battery/business/service/impl/TDetectionCabinetServiceImplTest.java
@@ -94,7 +94,7 @@
        assertEquals(new BigDecimal("120.50"), savedCabinet.getCapacity());
        assertEquals("OFFLINE", savedCabinet.getOnlineStatus());
        assertEquals("0", savedCabinet.getStatus());
        assertNull(savedCabinet.getCurrentTest());
        assertTrue(savedCabinet.getRelatedTests().isEmpty());
    }
    /**
@@ -134,10 +134,10 @@
    }
    /**
     * 验证检测柜主列表从通道事实派生旧页面展示字段,不读取数据库不存在的列。
     * 验证检测柜主列表保留操作校验所需派生状态,不读取数据库不存在的列。
     */
    @Test
    void detectionCabinetListSqlShouldDeriveLegacyPresentationFields() throws IOException
    void detectionCabinetListSqlShouldDeriveOperationStateWithoutCurrentTest() throws IOException
    {
        try (InputStream input = getClass().getResourceAsStream(
                "/mapper/battery/TDetectionCabinetMapper.xml"))
@@ -150,7 +150,7 @@
            assertFalse(selectSql.contains("online_status, test_status"));
            assertFalse(selectSql.contains("current_test, status"));
            assertTrue(selectSql.contains("as test_status"));
            assertTrue(selectSql.contains("as current_test"));
            assertFalse(selectSql.contains("current_test"));
            String activeTestSql = sqlFragment(mapperXml, "activeCabinetTestExists");
            assertTrue(activeTestSql.contains("t_test_channel_binding"));
            assertTrue(activeTestSql.contains("t_detection_channel"));
@@ -193,6 +193,26 @@
        return mapperXml.substring(start, end);
    }
    /**
     * 通道显示号:来源自己报了叫法就用它(操作员拿它跟厂商软件对上),没报就回退到身份里的「单元-通道」。
     * 显示号只是展示,不参与通道身份。
     */
    @Test
    void channelDisplayNoPrefersTheSourceOwnLabelAndFallsBackToTheIdentity()
    {
        ChannelCandidate declared = new ChannelCandidate(new ChannelIdentity("j22", 0, 0, 1, 26), true,
                DeviceWorkStatus.UNKNOWN, java.time.Instant.now(), null, null, "27");
        assertEquals("27", TDetectionCabinetServiceImpl.channelDisplayNo(declared));
        ChannelCandidate blank = new ChannelCandidate(new ChannelIdentity("j22", 0, 0, 1, 26), true,
                DeviceWorkStatus.UNKNOWN, java.time.Instant.now(), null, null, "   ");
        assertEquals("1-26", TDetectionCabinetServiceImpl.channelDisplayNo(blank));
        ChannelCandidate absent = new ChannelCandidate(new ChannelIdentity("neware76", 21, 3, 1, 4), true,
                DeviceWorkStatus.UNKNOWN, java.time.Instant.now());
        assertEquals("1-4", TDetectionCabinetServiceImpl.channelDisplayNo(absent));
    }
    private CabinetCandidate candidate(String deviceCode, boolean online, DeviceWorkStatus workStatus)
    {
        java.time.Instant observedAt = java.time.Instant.now();
@@ -206,7 +226,7 @@
    }
    /**
     * 验证设备选择列表读取 Redis 候选,并保持原前端字段和状态文本。
     * 验证设备选择列表读取候选的设备事实,不推断系统测试关系。
     */
    @Test
    void selectDiscoveredCabinetListShouldMapPersistedCabinetFacts()
@@ -220,8 +240,9 @@
        assertEquals("192.168.1.10", devices.get(0).getIp());
        assertEquals("AA:BB:CC:DD:EE:FF", devices.get(0).getMac());
        assertEquals("在线", devices.get(0).getOnlineStatus());
        assertEquals("测试中", devices.get(0).getTestStatus());
        assertEquals("待确认", devices.get(0).getCurrentTest());
        var fields = new com.fasterxml.jackson.databind.ObjectMapper().valueToTree(devices.get(0));
        assertFalse(fields.has("testStatus"));
        assertFalse(fields.has("currentTest"));
        assertEquals("一号模拟柜", devices.get(0).getName());
        assertEquals("开发模拟器", devices.get(0).getManufacturer());
        assertEquals("BTS Virtual Cabinet", devices.get(0).getModel());