verify-timecard-main-publish.cjs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. 'use strict';
  2. const fs = require('node:fs');
  3. const path = require('node:path');
  4. const assert = require('node:assert/strict');
  5. const { buildCandidate, assertCurrentBaseline, verifyUnchanged, schemaContent } = require('../scripts/publish-timecard-main.cjs');
  6. const file = process.argv[2];
  7. assert.ok(file, '请指定只读线上基线Schema文件;测试不发起网络请求');
  8. const baseline = schemaContent(JSON.parse(fs.readFileSync(file, 'utf8')));
  9. const actions = fs.readFileSync(path.join(__dirname, '../src/timecard-main.actions.js'), 'utf8');
  10. const render = fs.readFileSync(path.join(__dirname, '../src/timecard-main.render.jsx'), 'utf8');
  11. const candidate = buildCandidate(baseline, actions, render);
  12. assert.equal(candidate.functions, 110);
  13. assert.equal(candidate.schema.pages[0].componentsTree[0].dataSource.online.length, 9);
  14. verifyUnchanged(baseline, candidate.schema, candidate.paths);
  15. assertCurrentBaseline(baseline, structuredClone(baseline));
  16. const revisionChanged = structuredClone(baseline);
  17. revisionChanged.gmtModified++;
  18. assert.throws(() => assertCurrentBaseline(baseline, revisionChanged), /线上页面已变化/);
  19. const configurationChanged = structuredClone(baseline);
  20. configurationChanged.config += ' ';
  21. assert.throws(() => assertCurrentBaseline(baseline, configurationChanged), /线上页面已变化/);
  22. const unauthorizedChange = structuredClone(candidate.schema);
  23. unauthorizedChange.pages[0].componentsTree[0].dataSource.online.pop();
  24. assert.throws(() => verifyUnchanged(baseline, unauthorizedChange, candidate.paths));
  25. const missingAction = structuredClone(baseline);
  26. missingAction.actions.list.push({ id: 'unexpectedExistingAction', title: '既有动作' });
  27. assert.throws(() => buildCandidate(missingAction, actions, render), /不能移除原动作/);
  28. const duplicateJsx = structuredClone(baseline);
  29. duplicateJsx.pages[0].componentsTree.push({ componentName: 'Jsx', props: { render: {} } });
  30. assert.throws(() => buildCandidate(duplicateJsx, actions, render), /唯一的既有Jsx/);
  31. assert.throws(() => buildCandidate(baseline, actions, render + '\n// 💾'), /EMOJI|emoji/i);
  32. assert.throws(() => schemaContent({ success: false, content: baseline }), /Schema响应无效/);
  33. console.log('通过:双文件编译、原配置与9个数据源保留、并发版本拒绝、范围外变更拒绝、动作删除拒绝及完整内容校验。');