刘光辉
4 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
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
package jnpf.dmsService;
 
import com.fasterxml.jackson.databind.ObjectMapper;
import jnpf.dmsMapper.DmsVersionPropertiesMapper;
import jnpf.dmsEntity.storage.vo.DmsVersionProperties;
import jnpf.exception.DataException;
import org.junit.jupiter.api.Test;
import java.util.UUID;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
 
class DmsVersionPropertiesServiceTest {
    DmsVersionPropertiesMapper mapper = mock(DmsVersionPropertiesMapper.class);
    DmsVersionPropertiesService service = new DmsVersionPropertiesService(mapper);
    ObjectMapper json = new ObjectMapper();
    UUID version = UUID.randomUUID();
    jnpf.dmsEntity.permission.entity.DmsFileVersionEntity row = new jnpf.dmsEntity.permission.entity.DmsFileVersionEntity();
 
    @Test void insertsVersionWithSnapshotAndRejectsFailedPersistence() throws Exception {
        var value = json.readTree("{\"prepared_by_name\":\"张三\",\"reviewers\":[{\"user_id\":\"u\",\"name\":\"李四\"}]}");
        when(mapper.insertVersion(row, value.toString())).thenReturn(1);
        service.insertVersion(row, value);
        verify(mapper).insertVersion(row, value.toString());
        when(mapper.insertVersion(row, value.toString())).thenReturn(0);
        assertThrows(DataException.class, () -> service.insertVersion(row, value));
    }
    @Test void retryComparesJsonSemanticallyAndNeverUpdatesStoredProperties() throws Exception {
        var saved = new DmsVersionProperties(); saved.setId(version);
        saved.setExtendedProperties(json.readTree("{\"prepared_by_name\":\"张三\",\"reviewers\":[]}"));
        when(mapper.find("t", version)).thenReturn(saved);
        service.verifyRetry("t", version, json.readTree("{\"reviewers\":[],\"prepared_by_name\":\"张三\"}"));
        assertThrows(DataException.class, () -> service.verifyRetry("t", version,
                json.readTree("{\"prepared_by_name\":\"修改姓名\"}")));
        verify(mapper, never()).insertVersion(any(), nullable(String.class));
    }
    @Test void omittedPropertiesRemainCompatibleWithLegacyVersionsAndCallers() {
        when(mapper.insertVersion(row, null)).thenReturn(1);
        service.insertVersion(row, null);
        verify(mapper).insertVersion(row, null);
        clearInvocations(mapper);
        service.verifyRetry("t", version, null);
        verifyNoInteractions(mapper);
    }
    @Test void rejectsMalformedKnownFieldsBeforeDatabaseWrite() throws Exception {
        for (String malformed : new String[]{"[]", "{\"reviewers\":\"人名\"}", "{\"reviewers\":[{\"name\":\"缺ID\"}]}", "{\"prepared_by_name\":12}"}) {
            var value = json.readTree(malformed);
            assertThrows(DataException.class, () -> service.insertVersion(row, value));
        }
        verifyNoInteractions(mapper);
    }
}