package jnpf.bizcommon.onlyoffice.service.impl;
|
|
import jnpf.base.UserInfo;
|
import jnpf.base.model.uploadedit.UploadEditLease;
|
import jnpf.bizcommon.onlyoffice.entity.OnlyOfficeConfigParam;
|
import jnpf.bizcommon.onlyoffice.entity.OnlyOfficeProperties;
|
import jnpf.exception.DataException;
|
import org.junit.Before;
|
import org.junit.Test;
|
import java.util.Map;
|
import static org.junit.Assert.*;
|
import static org.mockito.Mockito.*;
|
|
public class UploadEditSceneConfigBuilderTest {
|
private UploadEditSceneConfigBuilder builder;
|
private UploadEditSessionSupport support;
|
private OnlyOfficeSceneBuildContext context;
|
private UploadEditLease lease;
|
private DmsQianpiyeTicketIssuer ticketIssuer;
|
@Before public void setup() {
|
jnpf.util.context.SpringContext.setApplicationContext(mock(org.springframework.context.ApplicationContext.class));
|
support = mock(UploadEditSessionSupport.class);
|
OnlyOfficeProperties properties = new OnlyOfficeProperties();
|
properties.getUploadFile().setEditEnabled(true);
|
ticketIssuer = mock(DmsQianpiyeTicketIssuer.class);
|
builder = new UploadEditSceneConfigBuilder(support, properties, ticketIssuer);
|
OnlyOfficeConfigParam param = new OnlyOfficeConfigParam(); param.setFileType("annex"); param.setMode("edit");
|
param.setFileId("lease"); param.setBizDataId("draft"); param.setFileName("test.docx");
|
UserInfo user = new UserInfo(); user.setUserId("owner");
|
context = new OnlyOfficeSceneBuildContext(param, null, user, "tenant");
|
lease = new UploadEditLease(); lease.setLeaseId("lease"); lease.setDraftId("draft");
|
lease.setFile(Map.of("fileId", "physical-file", "name", "test.docx"));
|
when(support.lease("tenant", "owner", "lease")).thenReturn(lease);
|
}
|
private void denied() { try { builder.build(context); fail("expected denial"); } catch (DataException expected) { } }
|
@Test public void authorizedLeaseUsesOriginalPhysicalSource() {
|
OnlyOfficeSceneBuildPlan plan = builder.build(context);
|
assertEquals("physical-file", plan.sourceFileId()); assertTrue(plan.canEdit());
|
assertFalse(plan.uploadQianpiyeAnnotatorEnabled());
|
assertFalse(plan.uploadFileAllowDownload()); verify(support).lease("tenant", "owner", "lease");
|
}
|
@Test public void enabledPluginUsesPhysicalSourceAndDmsTicketContext() {
|
lease.setQianpiyeAnnotatorEnabled(true);
|
when(ticketIssuer.issue(any(), any(), any())).thenReturn("signed-ticket");
|
OnlyOfficeSceneBuildPlan plan = builder.build(context);
|
assertTrue(plan.uploadQianpiyeAnnotatorEnabled());
|
Map<String, Object> pluginContext = new java.util.LinkedHashMap<>();
|
plan.customizePluginContext("dms-qianpiye-annotator",
|
"asc.{C764F7D6-055D-4C7D-97FD-83D2C4440585}", pluginContext, true);
|
assertEquals(true, pluginContext.get("canAnnotate"));
|
assertEquals("onlyoffice:dms-qianpiye", pluginContext.get("scope"));
|
assertEquals("signed-ticket", pluginContext.get("ticket"));
|
verify(ticketIssuer).issue(argThat(param -> "physical-file".equals(param.getFileId())
|
&& "dms.qianpiye".equals(param.getBizScene()) && "dms".equals(param.getBizModule())),
|
eq(context.getUser()), any());
|
}
|
@Test public void replacedLeaseUsesTheCurrentPhysicalFile() {
|
lease.setFile(Map.of("fileId", "replacement", "name", "test.docx")); lease.setAllowDownload(true);
|
OnlyOfficeSceneBuildPlan plan = builder.build(context);
|
assertEquals("replacement", plan.sourceFileId()); assertTrue(plan.uploadFileAllowDownload());
|
}
|
@Test public void failedLeaseAuthorizationCannotProduceConfig() {
|
when(support.lease(any(), any(), any())).thenThrow(new DataException("revoked")); denied();
|
}
|
@Test public void wrongFilenameRejected() { context.getParam().setFileName("other.docx"); denied(); }
|
@Test public void wrongDraftRejected() { context.getParam().setBizDataId("other"); denied(); }
|
}
|