刘光辉
13 小时以前 0dfe84494048ce27ba8449831782128412d3eb13
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
import { spawnSync } from 'node:child_process';
import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { join, resolve } from 'node:path';
import process from 'node:process';
 
import { afterEach, describe, expect, it } from 'vitest';
 
const temporaryDirectories: string[] = [];
afterEach(() => temporaryDirectories.splice(0).forEach((directory) => rmSync(directory, { force: true, recursive: true })));
 
function fixture() {
  const root = mkdtempSync(join(tmpdir(), 'eln-backend-config-'));
  temporaryDirectories.push(root);
  const releaseRoot = join(root, 'public-releases');
  const configDirectory = join(root, 'backend-config');
  mkdirSync(releaseRoot);
  mkdirSync(configDirectory);
  return { configDirectory, releaseRoot };
}
 
function runGenerator(output: string, releaseRoot: string) {
  return spawnSync(process.execPath, [resolve('scripts/generate-backend-config.mjs')], {
    cwd: process.cwd(),
    encoding: 'utf8',
    env: {
      ...process.env,
      ONLYOFFICE_PLUGIN_CONFIG_OUTPUT: output,
      ONLYOFFICE_PLUGIN_API_BASE_URL: 'https://api.example.com/',
      ONLYOFFICE_PLUGIN_PUBLIC_BASE_URL: 'https://office.example.com/onlyoffice-plugins/',
      ONLYOFFICE_RELEASE_ROOT: releaseRoot,
    },
  });
}
 
describe('backend config generator', () => {
  it('生成固定版本和场景绑定的 YAML 片段', () => {
    const { configDirectory, releaseRoot } = fixture();
    const output = join(configDirectory, 'onlyoffice-plugin.yaml');
 
    const result = runGenerator(output, releaseRoot);
 
    expect(result.status).toBe(0);
    expect(readFileSync(output, 'utf8')).toBe(
      `plugins:\n  definitions:\n    eln-template-annotator:\n      guid: 'asc.{2D6D6CB6-F6FC-45B7-8EC7-0CC1940F1A6F}'\n      version: '0.1.0'\n      public-base-url: 'https://office.example.com/onlyoffice-plugins'\n      release: '0.1.0'\n      api-base-url: 'https://api.example.com'\n  scenes:\n    - biz-scene: eln.template.annotate\n      biz-module: eln.template\n      plugin-codes:\n        - eln-template-annotator\n      autostart-plugin-code: eln-template-annotator\n      disabled-plugin-guids:\n        - 'asc.{AA2EA9B6-9EC2-415F-9762-634EE8D9A95E}'\n`,
    );
  });
 
  it('拒绝把后端 YAML 写入插件公网 release 根目录', () => {
    const { releaseRoot } = fixture();
    const output = join(releaseRoot, 'onlyoffice-plugin.yaml');
 
    const result = runGenerator(output, releaseRoot);
 
    expect(result.status).toBe(1);
    expect(result.stderr).toContain('must be outside ONLYOFFICE_RELEASE_ROOT');
    expect(existsSync(output)).toBe(false);
  });
});