ruoyi-admin/src/test/java/com/battery/business/service/impl/TestConsoleDataRevisionQueryServiceTest.java
@@ -18,6 +18,13 @@
    private final TTestMapper mapper = mock(TTestMapper.class);
    private final TestConsoleDataServiceImpl service = new TestConsoleDataServiceImpl(mapper);
    @org.junit.jupiter.api.BeforeEach void generatedRevisionId()
    {
        when(mapper.insertDataRevisionAction(any())).thenAnswer(call -> {
            ((TTestDataRevisionAction) call.getArgument(0)).setActionId(1L); return 1;
        });
    }
    @Test void savesDatabaseBeforeContentInsteadOfClientClaims()
    {
        var action = action("EDIT", "realtime:7");
@@ -65,6 +72,26 @@
        verify(mapper, never()).insertDataRevisionAction(any());
    }
    @Test void medianEditAuditsPreviousValuesAndPreservesLegacyFacts()
    {
        var action = action("EDIT", "step:7"); action.setDataType("STEP");
        String previous = "{\"chargeMedianVoltage\":0,\"dischargeMedianVoltage\":1.1709,\"chargePeakVoltage\":1.8,\"dischargeValleyVoltage\":0.8}";
        when(mapper.selectDataRecord(1L, "STEP", 7L)).thenReturn(Map.of("extension_measurements_json", previous));
        var item = new DataRevisionItem(); item.setStableIdentity("step:7");
        item.setFieldValues("{\"chargeMedianVoltage\":1.6431,\"dischargeMedianVoltage\":null}");
        service.submitAction(action, List.of(item));
        assertEquals(previous, JSON.parseArray(action.getBeforeContentJson()).getJSONObject(0).getString("extension_measurements_json"));
        var before = JSON.parseArray(action.getChangesSummary()).getJSONObject(0).getJSONObject("before");
        assertEquals(new BigDecimal("1.1709"), before.getBigDecimal("dischargeMedianVoltage"));
        var values = org.mockito.ArgumentCaptor.forClass(Map.class);
        verify(mapper).updateDataRecord(eq(1L), eq("STEP"), eq(7L), values.capture());
        var extension = JSON.parseObject(values.getValue().get("extension_measurements_json").toString());
        assertEquals(new BigDecimal("1.6431"), extension.getBigDecimal("chargeMedianVoltage"));
        assertNull(extension.get("dischargeMedianVoltage"));
        assertEquals(new BigDecimal("1.8"), extension.getBigDecimal("chargePeakVoltage"));
        assertEquals(new BigDecimal("0.8"), extension.getBigDecimal("dischargeValleyVoltage"));
    }
    @Test void rejectsIdentityEditsAndNonNumericMeasurements()
    {
        when(mapper.selectDataRecord(1L, "REALTIME", 7L)).thenReturn(Map.of("voltage_v", 3.7));