刘光辉
3 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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(); }
}