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);
|
}
|
}
|