package jnpf.dmsService;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import jnpf.permission.UserApi;
|
import jnpf.permission.entity.UserEntity;
|
import jnpf.exception.DataException;
|
import org.junit.jupiter.api.Test;
|
import java.util.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
import static org.mockito.Mockito.*;
|
import static org.mockito.ArgumentMatchers.*;
|
|
class DmsApprovedVersionPropertiesServiceTest {
|
UserApi users = mock(UserApi.class);
|
DmsApprovedVersionPropertiesService service = new DmsApprovedVersionPropertiesService(users, new ObjectMapper());
|
|
@Test void snapshotsOnlyPersistedReviewersAndDeduplicatesWithoutLosingOrder() {
|
when(users.getUserName(anyList())).thenReturn(List.of(user("author", "制定人"), user("a", "审核甲"), user("b", "审核乙")));
|
var value = service.create("author", "[\"a\",\"b\",\"a\"]");
|
assertEquals("制定人", value.path("prepared_by_name").asText());
|
assertEquals(2, value.path("reviewers").size());
|
assertEquals("a", value.path("reviewers").get(0).path("user_id").asText());
|
assertEquals("审核乙", value.path("reviewers").get(1).path("name").asText());
|
verify(users).getUserName(List.of("a", "b", "author"));
|
}
|
|
@Test void scalarWorkflowOperatorBecomesOneReviewerWithoutNumericConversion() {
|
String id = "878193794397329605";
|
when(users.getUserName(anyList())).thenReturn(List.of(user(id, "审核人")));
|
var value = service.create("author", id);
|
assertEquals(1, value.path("reviewers").size());
|
assertEquals(id, value.path("reviewers").get(0).path("user_id").asText());
|
assertEquals("审核人", value.path("reviewers").get(0).path("name").asText());
|
verify(users).getUserName(List.of(id, "author"));
|
}
|
|
@Test void scalarAndArrayInputsProduceTheSamePublicSnapshot() {
|
when(users.getUserName(anyList())).thenReturn(List.of(user("user-a", "审核人")));
|
assertEquals(service.create("author", "user-a"), service.create("author", "[\"user-a\"]"));
|
}
|
|
@Test void emptyFieldDoesNotInventAReviewer() {
|
when(users.getUserName(anyList())).thenReturn(List.of(user("author", "制定人")));
|
for (String empty : Arrays.asList(null, "", " ", "[]")) {
|
assertTrue(service.create("author", empty).path("reviewers").isEmpty());
|
}
|
}
|
|
@Test void missingDirectoryUserRetainsIdentityWithoutInventingName() {
|
when(users.getUserName(anyList())).thenReturn(List.of());
|
var reviewer = service.create("author", "[\"deleted\"]").path("reviewers").get(0);
|
assertEquals("deleted", reviewer.path("user_id").asText());
|
assertEquals("", reviewer.path("name").asText());
|
}
|
|
@Test void malformedMappingsFailInsteadOfSilentlyDroppingReviewers() {
|
for (String invalid : List.of("a,b", "{}", "null", "[null]", "[1]", "[\"\"]", "[{\"id\":\"a\"}]")) {
|
assertThrows(DataException.class, () -> service.create("author", invalid), invalid);
|
}
|
verifyNoInteractions(users);
|
}
|
|
@Test void nullDirectoryResponsePreservesReviewerIdentity() {
|
when(users.getUserName(anyList())).thenReturn(null);
|
var value = assertDoesNotThrow(() -> service.create("author", "a"));
|
assertEquals("", value.path("prepared_by_name").asText());
|
assertEquals("a", value.path("reviewers").get(0).path("user_id").asText());
|
assertEquals("", value.path("reviewers").get(0).path("name").asText());
|
}
|
|
@Test void directoryExceptionDoesNotBlockSnapshotCreationOrLoseReviewerIds() {
|
when(users.getUserName(anyList())).thenThrow(new IllegalStateException("directory unavailable"));
|
var value = assertDoesNotThrow(() -> service.create("author", "[\"a\",\"b\"]"));
|
assertEquals("", value.path("prepared_by_name").asText());
|
assertEquals(2, value.path("reviewers").size());
|
assertEquals("a", value.path("reviewers").get(0).path("user_id").asText());
|
assertEquals("b", value.path("reviewers").get(1).path("user_id").asText());
|
assertEquals("", value.path("reviewers").get(0).path("name").asText());
|
assertEquals("", value.path("reviewers").get(1).path("name").asText());
|
}
|
|
@Test void partialDirectoryResponseKeepsNamesFoundAndIdsWithoutNames() {
|
when(users.getUserName(anyList())).thenReturn(List.of(user("author", "制定人"), user("a", "审核甲")));
|
var value = service.create("author", "[\"a\",\"b\"]");
|
assertEquals("制定人", value.path("prepared_by_name").asText());
|
assertEquals("审核甲", value.path("reviewers").get(0).path("name").asText());
|
assertEquals("b", value.path("reviewers").get(1).path("user_id").asText());
|
assertEquals("", value.path("reviewers").get(1).path("name").asText());
|
}
|
|
UserEntity user(String id, String name) { var u = new UserEntity(); u.setId(id); u.setRealName(name); return u; }
|
}
|