package jnpf.elnService.template; import jnpf.util.JsonUtil; import org.junit.Test; import java.util.LinkedHashMap; import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; public class TemplateAnnotationTicketServiceTest { @Test public void parsesEverySignedBinding() { TemplateAnnotationTicketService service = service(validPayload()); TemplateAnnotationTicketService.AnnotationTicketContext context = service.parse("ticket-1"); assertEquals("tenant-a", context.getTenantId()); assertEquals("user-1", context.getUserId()); assertEquals("template-1", context.getTemplateId()); assertEquals("file-1", context.getFileId()); } @Test public void rejectsWrongScopeSceneAndGuid() { assertInvalid(payload("scope", "onlyoffice:eln-template-fill")); assertInvalid(payload("bizScene", "eln.template.fill")); assertInvalid(payload("pluginGuid", "asc.{OTHER}")); } @Test public void rejectsEveryMissingOrBlankBinding() { String[] keys = {"scope", "tenantId", "userId", "fileId", "bizDataId", "bizModule", "bizScene", "pluginGuid"}; for (String key : keys) { Map missing = validPayload(); missing.remove(key); assertInvalid(missing); assertInvalid(payload(key, " ")); } } @Test public void rejectsExpiredAndLegacyPayloads() { assertInvalid(new TemplateAnnotationTicketService(ticket -> null)); assertInvalid(new TemplateAnnotationTicketService(ticket -> validPayload())); assertInvalid(new TemplateAnnotationTicketService(ticket -> "null")); } private TemplateAnnotationTicketService service(Map payload) { return new TemplateAnnotationTicketService(ticket -> JsonUtil.getObjectToString(payload)); } private Map payload(String key, String value) { Map payload = validPayload(); payload.put(key, value); return payload; } private void assertInvalid(Map payload) { assertInvalid(service(payload)); } private void assertInvalid(TemplateAnnotationTicketService service) { try { service.parse("ticket-1"); fail("expected invalid annotation ticket"); } catch (TemplateAnnotationTicketService.InvalidAnnotationTicketException e) { assertEquals(401, e.getStatus()); } } private Map validPayload() { Map payload = new LinkedHashMap<>(); payload.put("scope", "onlyoffice:eln-template-annotate"); payload.put("tenantId", "tenant-a"); payload.put("userId", "user-1"); payload.put("fileId", "file-1"); payload.put("bizDataId", "template-1"); payload.put("bizModule", "eln.template"); payload.put("bizScene", "eln.template.annotate"); payload.put("pluginGuid", "asc.{2D6D6CB6-F6FC-45B7-8EC7-0CC1940F1A6F}"); return payload; } }