package jnpf.dmsService;
|
|
import jnpf.base.ActionResult;
|
import jnpf.dmsEntity.preview.enums.DmsPreviewFormat;
|
import jnpf.dmsEntity.preview.model.DmsFilePreviewTicket;
|
import jnpf.dmsEntity.preview.model.DmsWatermarkSnapshot;
|
import jnpf.dmsService.file.DmsOnlyOfficePrepareApi;
|
import jnpf.exception.DataException;
|
import org.junit.jupiter.api.Test;
|
|
import java.util.Collections;
|
import java.util.List;
|
|
import static org.junit.jupiter.api.Assertions.assertSame;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
class DmsPreviewPreparationClientTest {
|
private final DmsOnlyOfficePrepareApi api = mock(DmsOnlyOfficePrepareApi.class);
|
private final DmsPreviewPreparationClient client = new DmsPreviewPreparationClient(api);
|
|
@Test
|
void keepsLazyStreamingWhenThereIsNoCustomBarcode() {
|
DmsFilePreviewTicket ticket = new DmsFilePreviewTicket();
|
DmsWatermarkSnapshot everyPage = new DmsWatermarkSnapshot();
|
everyPage.setRenderPages(null);
|
ticket.setWatermarks(List.of(everyPage));
|
|
assertSame(ticket, client.prepare(ticket));
|
verify(api, never()).prepare(ticket);
|
}
|
|
@Test
|
void preparesPdfBeforeIssuingWhenCustomBarcodeTargetsPhysicalPages() {
|
DmsFilePreviewTicket source = selectedPageTicket();
|
DmsFilePreviewTicket prepared = new DmsFilePreviewTicket();
|
prepared.setWatermarks(Collections.emptyList());
|
@SuppressWarnings("unchecked")
|
ActionResult<DmsFilePreviewTicket> response = mock(ActionResult.class);
|
when(response.getCode()).thenReturn(200);
|
when(response.getData()).thenReturn(prepared);
|
when(api.prepare(source)).thenReturn(response);
|
|
assertSame(prepared, client.prepare(source));
|
verify(api).prepare(source);
|
}
|
|
@Test
|
void keepsImageCustomBarcodeInDirectTicketWithoutPreparingPdf() {
|
DmsFilePreviewTicket ticket = selectedPageTicket();
|
ticket.setFileName("evidence.PNG");
|
|
assertSame(ticket, client.prepare(ticket));
|
verify(api, never()).prepare(ticket);
|
}
|
|
@Test
|
void preparesPdfWhenExplicitlyRequestedWithoutCustomBarcode() {
|
DmsFilePreviewTicket source = new DmsFilePreviewTicket();
|
source.setFileName("quality.docx");
|
source.setPreviewFormat(DmsPreviewFormat.PDF);
|
source.setWatermarks(Collections.emptyList());
|
DmsFilePreviewTicket prepared = new DmsFilePreviewTicket();
|
@SuppressWarnings("unchecked")
|
ActionResult<DmsFilePreviewTicket> response = mock(ActionResult.class);
|
when(response.getCode()).thenReturn(200);
|
when(response.getData()).thenReturn(prepared);
|
when(api.prepare(source)).thenReturn(response);
|
|
assertSame(prepared, client.prepare(source));
|
verify(api).prepare(source);
|
}
|
|
@Test
|
void keepsImageSourceWhenPdfPreviewWasRequestedByGenericCaller() {
|
DmsFilePreviewTicket ticket = new DmsFilePreviewTicket();
|
ticket.setFileName("evidence.png");
|
ticket.setMimeType("image/png");
|
ticket.setPreviewFormat(DmsPreviewFormat.PDF);
|
ticket.setWatermarks(Collections.emptyList());
|
|
assertSame(ticket, client.prepare(ticket));
|
verify(api, never()).prepare(ticket);
|
}
|
|
@Test
|
void keepsExistingPdfWhenPdfPreviewIsRequested() {
|
DmsFilePreviewTicket ticket = new DmsFilePreviewTicket();
|
ticket.setFileName("quality.PDF");
|
ticket.setPreviewFormat(DmsPreviewFormat.PDF);
|
|
assertSame(ticket, client.prepare(ticket));
|
verify(api, never()).prepare(ticket);
|
}
|
|
@Test
|
void rejectsMissingPreparationResult() {
|
DmsFilePreviewTicket source = selectedPageTicket();
|
@SuppressWarnings("unchecked")
|
ActionResult<DmsFilePreviewTicket> response = mock(ActionResult.class);
|
when(response.getCode()).thenReturn(400);
|
when(response.getMsg()).thenReturn("准备失败");
|
when(api.prepare(source)).thenReturn(response);
|
|
assertThrows(DataException.class, () -> client.prepare(source));
|
}
|
|
private DmsFilePreviewTicket selectedPageTicket() {
|
DmsFilePreviewTicket ticket = new DmsFilePreviewTicket();
|
ticket.setFileName("quality.docx");
|
DmsWatermarkSnapshot selected = new DmsWatermarkSnapshot();
|
selected.setCustomBarcode(true);
|
selected.setRenderPages(List.of(1));
|
ticket.setWatermarks(List.of(selected));
|
return ticket;
|
}
|
}
|