package jnpf.dmsService;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import jnpf.dmsEntity.preview.form.DmsFilePreviewTicketRequest;
|
import jnpf.dmsEntity.download.form.DmsFileDownloadTicketRequest;
|
import jnpf.dmsEntity.print.form.DmsFilePrintTicketRequest;
|
import jnpf.dmsEntity.watermark.DmsWatermarkParameters;
|
import jnpf.exception.DataException;
|
import org.junit.jupiter.api.Test;
|
|
import java.util.Arrays;
|
import java.util.List;
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
class DmsWatermarkParametersTest {
|
private final ObjectMapper mapper = new ObjectMapper();
|
|
@Test
|
void allThreeRequestsPreserveIndependentValuesLabelsOrderAndDuplicatePages() throws Exception {
|
for (Class<? extends DmsWatermarkParameters> type : Arrays.asList(DmsFilePreviewTicketRequest.class,
|
DmsFileDownloadTicketRequest.class, DmsFilePrintTicketRequest.class)) {
|
DmsWatermarkParameters request = mapper.readValue(
|
"{\"customBarcode\":[{\"page\":5,\"barValue\":\"REC-005\",\"barText\":\"中文 {/CUN} <&>\"},"
|
+ "{\"page\":4,\"barValue\":\"REC-004\",\"barText\":\"Page four\"},"
|
+ "{\"page\":4,\"barValue\":\"SECOND-004\",\"barText\":\"Another label\"}]}", type);
|
DmsWatermarkParameters normalized = request.normalized();
|
assertEquals(List.of(5, 4, 4), normalized.getCustomBarcode().stream().map(DmsWatermarkParameters.CustomBarcode::getPage).toList());
|
assertEquals("REC-005", normalized.getCustomBarcode().get(0).getBarValue());
|
assertEquals("中文 {/CUN} <&>", normalized.getCustomBarcode().get(0).getBarText());
|
assertEquals("SECOND-004", normalized.getCustomBarcode().get(2).getBarValue());
|
assertEquals(normalized, mapper.readValue(mapper.writeValueAsString(normalized), DmsWatermarkParameters.class));
|
request.getCustomBarcode().get(0).setBarText("changed after snapshot");
|
request.getCustomBarcode().clear();
|
assertEquals(3, normalized.getCustomBarcode().size());
|
assertEquals("中文 {/CUN} <&>", normalized.getCustomBarcode().get(0).getBarText());
|
}
|
}
|
|
@Test
|
void eachEntryCanOmitPageIncludingMultipleGlobalEntriesMixedWithSpecificPages() throws Exception {
|
assertNull(mapper.readValue("{}", DmsWatermarkParameters.class).normalized().getCustomBarcode());
|
DmsWatermarkParameters value = mapper.readValue("{\"customBarcode\":["
|
+ "{\"barValue\":\"A\",\"barText\":\"All pages\"},"
|
+ "{\"page\":4,\"barValue\":\"B\",\"barText\":\"Only four\"},"
|
+ "{\"barValue\":\"C\",\"barText\":\"Also all pages\"}]}", DmsWatermarkParameters.class).normalized();
|
assertEquals(3, value.getCustomBarcode().size());
|
assertNull(value.getCustomBarcode().get(0).getPage());
|
assertEquals(4, value.getCustomBarcode().get(1).getPage());
|
assertNull(value.getCustomBarcode().get(2).getPage());
|
}
|
|
@Test
|
void rejectsIncompleteEntriesAndInvalidPages() throws Exception {
|
for (String entries : List.of("[]", "[null]", "[{}]",
|
"[{\"barValue\":\"REC\"}]", "[{\"barText\":\"Label\"}]",
|
"[{\"barValue\":\" \",\"barText\":\"Label\"}]",
|
"[{\"barValue\":\"REC\",\"barText\":\" \"}]",
|
"[{\"barValue\":\"REC\",\"barText\":\"Label\",\"page\":0}]",
|
"[{\"barValue\":\"REC\",\"barText\":\"Label\",\"page\":-1}]")) {
|
DmsWatermarkParameters value = mapper.readValue("{\"customBarcode\":" + entries + "}", DmsWatermarkParameters.class);
|
assertThrows(DataException.class, value::normalized, entries);
|
}
|
for (String field : List.of("barValue", "barText")) {
|
DmsWatermarkParameters tooLong = mapper.readValue("{\"customBarcode\":[{\"barValue\":\"REC\",\"barText\":\"Label\",\""
|
+ field + "\":\"" + "a".repeat(2001) + "\"}]}", DmsWatermarkParameters.class);
|
assertThrows(DataException.class, tooLong::normalized);
|
}
|
}
|
|
@Test
|
void refusesJacksonCoercionOfFractionalStringBooleanAndArrayPages() {
|
for (String page : List.of("1.5", "\"2\"", "true", "[2]", "2147483648")) {
|
assertThrows(Exception.class, () -> mapper.readValue(
|
"{\"customBarcode\":[{\"barValue\":\"REC\",\"barText\":\"Label\",\"page\":" + page + "}]}", DmsFilePreviewTicketRequest.class));
|
}
|
}
|
|
@Test
|
void printRangeIsIndependentOfWatermarkPages() throws Exception {
|
DmsFilePrintTicketRequest request = mapper.readValue(
|
"{\"customBarcode\":[{\"page\":5,\"barValue\":\"REC\",\"barText\":\"Label\"}],\"printPages\":\"2-3\",\"copies\":2}",
|
DmsFilePrintTicketRequest.class);
|
assertEquals("2-3", request.getPrintPages());
|
assertEquals(2, request.getCopies());
|
assertEquals(5, request.normalized().getCustomBarcode().get(0).getPage());
|
}
|
|
@Test
|
void optionalBusinessTypesAreCopiedAndDeduplicated() throws Exception {
|
assertNull(mapper.readValue("{}", DmsWatermarkParameters.class).normalized().getWatermarkBusinessTypes());
|
assertEquals(List.of(), mapper.readValue("{\"watermarkBusinessTypes\":[]}",
|
DmsWatermarkParameters.class).normalized().getWatermarkBusinessTypes());
|
DmsWatermarkParameters request = mapper.readValue(
|
"{\"watermarkBusinessTypes\":[\"RECORD\",\"REPORT\",\"RECORD\"]}",
|
DmsFilePreviewTicketRequest.class);
|
DmsWatermarkParameters normalized = request.normalized();
|
assertEquals(List.of("RECORD", "REPORT"), normalized.getWatermarkBusinessTypes());
|
request.getWatermarkBusinessTypes().clear();
|
assertEquals(2, normalized.getWatermarkBusinessTypes().size());
|
for (String invalid : List.of("[null]", "[\"\"]", "[\" RECORD\"]")) {
|
DmsWatermarkParameters value = mapper.readValue("{\"watermarkBusinessTypes\":" + invalid + "}",
|
DmsWatermarkParameters.class);
|
assertThrows(DataException.class, value::normalized);
|
}
|
}
|
}
|