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