import { readFileSync } from 'node:fs';
|
import { resolve } from 'node:path';
|
|
import { describe, expect, it } from 'vitest';
|
|
import { parseRegistry } from '../src/registry.mjs';
|
|
const registrySource = readFileSync(resolve(import.meta.dirname, '../../registry.yaml'), 'utf8');
|
|
describe('ONLYOFFICE plugin registry', () => {
|
it('parses the two fixed 0.1.0 plugins and scenes', () => {
|
const registry = parseRegistry(registrySource);
|
|
expect(registry.release).toBe('0.1.0-dev');
|
expect(registry.plugins).toMatchObject([
|
{ code: 'eln-template-annotator', devPort: 4181, bizScene: 'eln.template.annotate', version: '0.1.0' },
|
{ code: 'eln-template-filler', devPort: 4182, bizScene: 'eln.template.fill', version: '0.1.0' },
|
]);
|
});
|
|
it.each([
|
['code', ' - code: eln-template-annotator', ' - code: eln-template-filler', '插件编码重复'],
|
['guid', ' guid: asc.{2D6D6CB6-F6FC-45B7-8EC7-0CC1940F1A6F}', ' guid: asc.{7F4E8F35-5D66-47F8-A5B4-6AB3FAACF565}', '插件 GUID 重复'],
|
['dev-port', ' dev-port: 4181', ' dev-port: 4182', '插件开发端口重复'],
|
['biz-scene', ' biz-scene: eln.template.annotate', ' biz-scene: eln.template.fill', '业务场景重复'],
|
])('rejects duplicate %s', (_key, before, after, message) => {
|
const source = registrySource.replace(before, after);
|
expect(() => parseRegistry(source)).toThrow(message);
|
});
|
|
it.each([
|
[registrySource.replace('version: 0.1.0\n dev-port: 4181', 'version: 0.1.1\n dev-port: 4181'), '插件版本必须为 0.1.0'],
|
[registrySource.replace('directory: eln-template-annotator', 'directory: ../annotator'), '插件目录无效'],
|
[registrySource.replace('package: onlyoffice-eln-template-annotator', "package: '@bad/pkg'"), '插件包名无效'],
|
])('rejects unsafe registry input', (source, message) => {
|
expect(() => parseRegistry(source)).toThrow(message);
|
});
|
});
|