刘光辉
11 小时以前 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
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);
  });
});