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