From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master
---
jnpf-biz-common/jnpf-biz-common-onlyoffice/src/test/java/jnpf/bizcommon/onlyoffice/service/impl/OnlyOfficePluginResolverTest.java | 144 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 144 insertions(+), 0 deletions(-)
diff --git a/jnpf-biz-common/jnpf-biz-common-onlyoffice/src/test/java/jnpf/bizcommon/onlyoffice/service/impl/OnlyOfficePluginResolverTest.java b/jnpf-biz-common/jnpf-biz-common-onlyoffice/src/test/java/jnpf/bizcommon/onlyoffice/service/impl/OnlyOfficePluginResolverTest.java
new file mode 100644
index 0000000..32d3a56
--- /dev/null
+++ b/jnpf-biz-common/jnpf-biz-common-onlyoffice/src/test/java/jnpf/bizcommon/onlyoffice/service/impl/OnlyOfficePluginResolverTest.java
@@ -0,0 +1,144 @@
+package jnpf.bizcommon.onlyoffice.service.impl;
+
+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.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+public class OnlyOfficePluginResolverTest {
+
+ private OnlyOfficePluginResolver resolver;
+
+ @Before
+ public void setUp() {
+ OnlyOfficeProperties properties = new OnlyOfficeProperties();
+ OnlyOfficeProperties.PluginDefinition definition = definition(
+ "asc.{2D6D6CB6-F6FC-45B7-8EC7-0CC1940F1A6F}",
+ "http://localhost:4173/onlyoffice-plugins/", "0.1.0-dev", "http://localhost:30000");
+ Map<String, OnlyOfficeProperties.PluginDefinition> definitions = new LinkedHashMap<>();
+ definitions.put("eln-template-annotator", definition);
+ properties.getPlugins().setDefinitions(definitions);
+
+ OnlyOfficeProperties.PluginSceneMapping mapping = new OnlyOfficeProperties.PluginSceneMapping();
+ mapping.setBizScene("eln.template.annotate");
+ mapping.setBizModule("eln.template");
+ mapping.setPluginCodes(Collections.singletonList("eln-template-annotator"));
+ mapping.setAutostartPluginCode("eln-template-annotator");
+ mapping.setDisabledPluginGuids(Collections.singletonList(
+ "asc.{AA2EA9B6-9EC2-415F-9762-634EE8D9A95E}"));
+ properties.getPlugins().setScenes(Collections.singletonList(mapping));
+ resolver = new OnlyOfficePluginResolver(properties);
+ }
+
+ @Test
+ public void emptySceneDoesNotResolvePlugin() {
+ assertEquals(Collections.emptyList(), resolver.resolve(param(null, null, null)));
+ }
+
+ @Test
+ public void validSceneBuildsManifestAndRuntimeContext() {
+ OnlyOfficePluginResolver.ResolvedPlugin resolved = resolver.resolve(
+ param("eln.template.annotate", "eln.template", "record-1")).get(0);
+
+ assertEquals("http://localhost:4173/onlyoffice-plugins/0.1.0-dev/eln-template-annotator/config.json",
+ resolved.getManifestUrl());
+ Map<String, Object> context = resolved.runtimeContext("file-1", "record-1");
+ assertEquals("file-1", context.get("documentId"));
+ assertEquals("record-1", context.get("bizDataId"));
+ assertEquals("eln.template", context.get("bizModule"));
+ assertEquals("eln.template.annotate", context.get("bizScene"));
+ assertEquals("0.1.0", context.get("pluginVersion"));
+ assertNull(context.get("canAnnotate"));
+ assertEquals("http://localhost:30000", context.get("apiBaseUrl"));
+ assertEquals("eln-template-annotator", resolved.getPluginCode());
+ assertEquals("asc.{2D6D6CB6-F6FC-45B7-8EC7-0CC1940F1A6F}", resolved.getGuid());
+ assertEquals(true, resolved.isAutostart());
+ assertEquals(Collections.singletonList("asc.{AA2EA9B6-9EC2-415F-9762-634EE8D9A95E}"),
+ resolved.getDisabledPluginGuids());
+ }
+
+ @Test
+ public void multiplePluginsPreserveConfiguredOrder() {
+ OnlyOfficeProperties properties = new OnlyOfficeProperties();
+ Map<String, OnlyOfficeProperties.PluginDefinition> definitions = new LinkedHashMap<>();
+ definitions.put("plugin-b", definition("asc.{GUID-B}", "https://plugins.example.com", "2.0.0", "https://api-b.example.com"));
+ definitions.put("plugin-a", definition("asc.{GUID-A}", "https://plugins.example.com", "1.0.0", "https://api-a.example.com"));
+ properties.getPlugins().setDefinitions(definitions);
+ OnlyOfficeProperties.PluginSceneMapping mapping = new OnlyOfficeProperties.PluginSceneMapping();
+ mapping.setBizScene("multi.scene");
+ mapping.setBizModule("multi.module");
+ mapping.setPluginCodes(java.util.Arrays.asList("plugin-a", "plugin-b"));
+ properties.getPlugins().setScenes(Collections.singletonList(mapping));
+
+ List<OnlyOfficePluginResolver.ResolvedPlugin> resolved = new OnlyOfficePluginResolver(properties)
+ .resolve(param("multi.scene", "multi.module", "record-1"));
+
+ assertEquals("asc.{GUID-A}", resolved.get(0).getGuid());
+ assertEquals("https://plugins.example.com/1.0.0/plugin-a/config.json", resolved.get(0).getManifestUrl());
+ assertEquals("asc.{GUID-B}", resolved.get(1).getGuid());
+ }
+
+ @Test(expected = DataException.class)
+ public void unknownPluginReferenceIsRejected() {
+ OnlyOfficeProperties properties = new OnlyOfficeProperties();
+ OnlyOfficeProperties.PluginSceneMapping mapping = new OnlyOfficeProperties.PluginSceneMapping();
+ mapping.setBizScene("unknown.plugin");
+ mapping.setBizModule("eln.template");
+ mapping.setPluginCodes(Collections.singletonList("missing"));
+ properties.getPlugins().setScenes(Collections.singletonList(mapping));
+ new OnlyOfficePluginResolver(properties).resolve(param("unknown.plugin", "eln.template", "record-1"));
+ }
+
+ @Test(expected = DataException.class)
+ public void duplicatePluginGuidIsRejected() {
+ OnlyOfficeProperties properties = new OnlyOfficeProperties();
+ Map<String, OnlyOfficeProperties.PluginDefinition> definitions = new LinkedHashMap<>();
+ definitions.put("plugin-a", definition("asc.{SAME-GUID}", "https://plugins.example.com", "1.0.0", "https://api.example.com"));
+ definitions.put("plugin-b", definition("asc.{SAME-GUID}", "https://plugins.example.com", "1.0.0", "https://api.example.com"));
+ properties.getPlugins().setDefinitions(definitions);
+ OnlyOfficeProperties.PluginSceneMapping mapping = new OnlyOfficeProperties.PluginSceneMapping();
+ mapping.setBizScene("duplicate.guid");
+ mapping.setBizModule("eln.template");
+ mapping.setPluginCodes(java.util.Arrays.asList("plugin-a", "plugin-b"));
+ properties.getPlugins().setScenes(Collections.singletonList(mapping));
+
+ new OnlyOfficePluginResolver(properties).resolve(param("duplicate.guid", "eln.template", "record-1"));
+ }
+
+ @Test(expected = DataException.class)
+ public void unknownSceneIsRejected() {
+ resolver.resolve(param("eln.unknown", "eln.template", "record-1"));
+ }
+
+ @Test(expected = DataException.class)
+ public void mismatchedModuleIsRejected() {
+ resolver.resolve(param("eln.template.annotate", "other", "record-1"));
+ }
+
+ private OnlyOfficeConfigParam param(String bizScene, String bizModule, String bizDataId) {
+ OnlyOfficeConfigParam param = new OnlyOfficeConfigParam();
+ param.setBizScene(bizScene);
+ param.setBizModule(bizModule);
+ param.setBizDataId(bizDataId);
+ return param;
+ }
+
+ private OnlyOfficeProperties.PluginDefinition definition(String guid, String publicBaseUrl, String release, String apiBaseUrl) {
+ OnlyOfficeProperties.PluginDefinition definition = new OnlyOfficeProperties.PluginDefinition();
+ definition.setGuid(guid);
+ definition.setVersion(release.replace("-dev", ""));
+ definition.setPublicBaseUrl(publicBaseUrl);
+ definition.setRelease(release);
+ definition.setApiBaseUrl(apiBaseUrl);
+ return definition;
+ }
+}
--
Gitblit v1.8.0