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);
|
});
|
});
|