package jnpf.bizcommon.onlyoffice.service.impl; import jnpf.base.UserInfo; import jnpf.bizcommon.onlyoffice.entity.OnlyOfficeConfigParam; import jnpf.dmsEntity.preview.model.DmsFilePreviewTicket; import jnpf.exception.DataException; import jnpf.util.JsonUtil; import org.junit.Test; import java.util.UUID; import static org.junit.Assert.assertEquals; public class DmsOnlyOfficePreviewTicketValidatorTest { private static final UUID VERSION_ID = UUID.fromString("018f0000-0000-7000-8000-000000000702"); @Test public void acceptsTicketBoundToCurrentUserTenantVersionAndFileName() { DmsOnlyOfficePreviewTicketValidator validator = validator(payload(60_000L)); DmsFilePreviewTicket result = validator.validate(param(), user("tenant-1", "user-1")); assertEquals(VERSION_ID, result.getFileVersionId()); } @Test(expected = DataException.class) public void rejectsExpiredTicket() { DmsOnlyOfficePreviewTicketValidator validator = validator(payload(-1L)); validator.validate(param(), user("tenant-1", "user-1")); } @Test(expected = DataException.class) public void rejectsTicketBelongingToAnotherUser() { DmsOnlyOfficePreviewTicketValidator validator = validator(payload(60_000L)); validator.validate(param(), user("tenant-1", "user-2")); } @Test(expected = DataException.class) public void rejectsTicketBoundToAnotherVersion() { DmsOnlyOfficePreviewTicketValidator validator = validator(payload(60_000L)); OnlyOfficeConfigParam param = param(); param.setFileId("018f0000-0000-7000-8000-000000000799"); validator.validate(param, user("tenant-1", "user-1")); } @Test(expected = DataException.class) public void rejectsPrintTicketForPreviewConfig() { DmsFilePreviewTicket payload = payload(60_000L); payload.setScope(DmsFilePreviewTicket.PRINT_SCOPE); validator(payload).validate(param(), user("tenant-1", "user-1")); } private DmsOnlyOfficePreviewTicketValidator validator(DmsFilePreviewTicket payload) { String json = JsonUtil.getObjectToString(payload); return new DmsOnlyOfficePreviewTicketValidator(ticket -> json); } private DmsFilePreviewTicket payload(long expiresInMillis) { DmsFilePreviewTicket payload = new DmsFilePreviewTicket(); payload.setScope(DmsFilePreviewTicket.SCOPE); payload.setTenantId("tenant-1"); payload.setUserId("user-1"); payload.setFileVersionId(VERSION_ID); payload.setFileName("quality-manual.docx"); payload.setStoragePlatform("seaweedfs-1"); payload.setBucketName("jnpf-dms"); payload.setObjectPath("2026/08/24/document/"); payload.setObjectName("quality-manual-v1.docx"); payload.setExpiresAt(System.currentTimeMillis() + expiresInMillis); return payload; } private OnlyOfficeConfigParam param() { OnlyOfficeConfigParam param = new OnlyOfficeConfigParam(); param.setDmsAccessTicket("ticket"); param.setFileId(VERSION_ID.toString()); param.setFileName("quality-manual.docx"); param.setFileType("dms"); return param; } private UserInfo user(String tenantId, String userId) { UserInfo user = new UserInfo(); user.setTenantId(tenantId); user.setUserId(userId); return user; } }