yeg
2026-09-02 1eafc84ff7546fcd51d1f2884c77400b75529e3b
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package com.ruoyi.system.service.impl;
 
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.system.domain.TTestDataRevisionAction;
import com.ruoyi.system.domain.TTestDataOverride;
import com.ruoyi.system.mapper.TTestMapper;
 
/** Ticket26:修订行为按一次提交查询,且三类数据与三类操作均受服务端约束。 */
@ExtendWith(MockitoExtension.class)
class TestConsoleDataRevisionQueryServiceTest
{
    @Mock
    private TTestMapper mapper;
    @InjectMocks
    private TestConsoleDataServiceImpl service;
    private TTestDataRevisionAction query;
 
    @BeforeEach
    void setUp()
    {
        query = new TTestDataRevisionAction();
        query.setTestId(26L);
        query.setDataType("STEP");
        query.setOperationType("EDIT");
    }
 
    @Test
    void delegatesOneActionQueryWithFilters()
    {
        TTestDataRevisionAction action = new TTestDataRevisionAction();
        action.setActionId(101L);
        when(mapper.selectDataRevisionActions(query)).thenReturn(List.of(action));
 
        assertEquals(101L, service.selectActions(query).get(0).getActionId());
        verify(mapper).selectDataRevisionActions(query);
    }
 
    @Test
    void rejectsUnknownDataTypeAndOperation()
    {
        query.setDataType("CELL");
        assertThrows(ServiceException.class, () -> service.selectActions(query));
        query.setDataType("CYCLE");
        query.setOperationType("RESTORE");
        assertThrows(ServiceException.class, () -> service.selectActions(query));
    }
 
    @Test
    void returnsReadOnlyActionDetail()
    {
        TTestDataRevisionAction action = new TTestDataRevisionAction();
        action.setActionId(99L);
        action.setOperationType("DELETE");
        when(mapper.selectDataRevisionActionById(99L)).thenReturn(action);
 
        assertEquals("DELETE", service.selectActionById(99L).getOperationType());
        assertThrows(ServiceException.class, () -> service.selectActionById(0L));
    }
 
    @Test
    void rejectsIdentitySummaryThatDoesNotMatchOverrides()
    {
        TTestDataRevisionAction action = new TTestDataRevisionAction();
        action.setTestId(26L); action.setDataType("REALTIME"); action.setOperationType("DELETE");
        action.setScopeSummary("删除一条实时数据"); action.setIdentitySummary("[\"record-1\"]");
        action.setReason("异常点"); action.setOperatorName("tester");
        TTestDataOverride override = new TTestDataOverride();
        override.setStableIdentity("record-2"); override.setDeleted(true);
 
        assertThrows(ServiceException.class,
                () -> service.submitAction(action, List.of(override), List.of(), List.of()));
    }
 
    @Test
    void rejectsIdentitySummaryWithExtraIdentity()
    {
        TTestDataRevisionAction action = new TTestDataRevisionAction();
        action.setTestId(26L); action.setDataType("STEP"); action.setOperationType("DELETE");
        action.setScopeSummary("删除一条工步数据"); action.setIdentitySummary("[\"step:1:2:3:4\",\"step:1:2:3:5\"]");
        action.setReason("异常工步"); action.setOperatorName("tester");
        TTestDataOverride override = new TTestDataOverride();
        override.setStableIdentity("step:1:2:3:4"); override.setDeleted(true);
 
        assertThrows(ServiceException.class,
                () -> service.submitAction(action, List.of(override), List.of(), List.of()));
    }
 
    @Test
    void keepsOriginalSamplesWhenDeletingStepAggregate()
    {
        TTestDataRevisionAction action = new TTestDataRevisionAction();
        action.setTestId(26L); action.setDataType("STEP"); action.setOperationType("DELETE");
        action.setScopeSummary("删除一条工步数据"); action.setIdentitySummary("[\"step:1:2:3:4\"]");
        action.setReason("异常工步"); action.setOperatorName("tester");
        TTestDataOverride override = new TTestDataOverride();
        override.setStableIdentity("step:1:2:3:4"); override.setDeleted(true);
        service.submitAction(action, List.of(override), List.of(), List.of());
 
        verify(mapper).insertDataRevisionAction(action);
        verify(mapper).upsertDataOverride(override);
        org.mockito.Mockito.verifyNoMoreInteractions(mapper);
    }
}