package jnpf.bizcommon.onlyoffice.service.impl;
|
|
import jnpf.dmsEntity.preview.model.DmsFilePreviewTicket;
|
import jnpf.bizcommon.onlyoffice.entity.OnlyOfficeProperties;
|
import jnpf.exception.DataException;
|
import jnpf.onlyoffice.DmsPreviewPdfRequest;
|
import jnpf.util.JsonUtil;
|
import org.junit.Test;
|
|
import java.util.UUID;
|
|
import static org.junit.Assert.assertArrayEquals;
|
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.fail;
|
public class DmsOnlyOfficePreviewServiceTest {
|
private static final UUID VERSION_ID =
|
UUID.fromString("018f0000-0000-7000-8000-000000000702");
|
|
@Test
|
public void convertsBaseOnceAndStampsPreviewWatermarks() {
|
DmsFilePreviewTicket ticket = ticket(DmsFilePreviewTicket.SCOPE);
|
byte[] base = new byte[]{1, 2};
|
byte[] result = new byte[]{3, 4};
|
StubRenderer renderer = new StubRenderer(base);
|
StubComposer composer = new StubComposer(result);
|
DmsOnlyOfficePreviewService service = new DmsOnlyOfficePreviewService(renderer, composer,
|
value -> JsonUtil.getObjectToString(ticket));
|
|
assertArrayEquals(result, service.render(
|
new DmsPreviewPdfRequest(VERSION_ID, "source-ticket")));
|
assertEquals(1, renderer.calls);
|
assertEquals(1, composer.calls);
|
assertEquals(ticket, composer.ticket);
|
}
|
|
@Test
|
public void rejectsPrintTicketForPreviewConversion() {
|
DmsFilePreviewTicket ticket = ticket(DmsFilePreviewTicket.PRINT_SCOPE);
|
DmsOnlyOfficePreviewService service = new DmsOnlyOfficePreviewService(
|
new StubRenderer(new byte[]{1}), new StubComposer(new byte[]{2}),
|
value -> JsonUtil.getObjectToString(ticket));
|
|
try {
|
service.render(new DmsPreviewPdfRequest(VERSION_ID, "source-ticket"));
|
fail("expected preview scope validation");
|
} catch (DataException expected) {
|
assertEquals("DMS 预览票据与文件版本不匹配", expected.getMessage());
|
}
|
}
|
|
private DmsFilePreviewTicket ticket(String scope) {
|
DmsFilePreviewTicket ticket = new DmsFilePreviewTicket();
|
ticket.setScope(scope);
|
ticket.setTenantId("tenant-1");
|
ticket.setUserId("user-1");
|
ticket.setFileVersionId(VERSION_ID);
|
ticket.setFileName("quality-manual.docx");
|
ticket.setStoragePlatform("seaweedfs-1");
|
ticket.setBucketName("jnpf-dms");
|
ticket.setObjectPath("2026/08/24/document/");
|
ticket.setObjectName("quality-manual-v1.docx");
|
ticket.setExpiresAt(System.currentTimeMillis() + 60_000L);
|
return ticket;
|
}
|
|
private static final class StubRenderer extends OnlyOfficeDmsPrintRenderer {
|
private final byte[] result;
|
private int calls;
|
|
private StubRenderer(byte[] result) {
|
super(new OnlyOfficeProperties());
|
this.result = result;
|
}
|
|
@Override
|
public byte[] renderBase(DmsFilePreviewTicket ticket, String accessTicket) {
|
calls++;
|
return result;
|
}
|
}
|
|
private static final class StubComposer extends DmsOnlyOfficePrintPdfComposer {
|
private final byte[] result;
|
private int calls;
|
private DmsFilePreviewTicket ticket;
|
|
private StubComposer(byte[] result) {
|
super(new OnlyOfficeProperties());
|
this.result = result;
|
}
|
|
@Override
|
public byte[] composePreview(byte[] basePdf, DmsFilePreviewTicket ticket) {
|
calls++;
|
this.ticket = ticket;
|
return result;
|
}
|
}
|
}
|