Files
docs/悦/官网头程下单/tests/storage-transfer-relabel.test.js
T
2026-09-08 18:17:00 +08:00

92 lines
4.1 KiB
JavaScript

const assert = require('node:assert/strict');
const fs = require('node:fs');
const vm = require('node:vm');
const html = fs.readFileSync('workbench.html', 'utf8');
function extractFunction(name) {
const start = html.indexOf(`function ${name}(`);
assert.notEqual(start, -1, `${name} should exist`);
const bodyStart = html.indexOf('{', start);
let depth = 0;
for (let index = bodyStart; index < html.length; index += 1) {
if (html[index] === '{') depth += 1;
if (html[index] === '}') depth -= 1;
if (depth === 0) return html.slice(start, index + 1);
}
throw new Error(`Unable to extract ${name}`);
}
const createPage = html.match(/<div class="page-content" id="page-storage-transfer-create">([\s\S]*?)<!-- ========== PAGE: 仓储转运单详情/)?.[1] || '';
assert.ok(createPage, 'storage transfer create page should exist');
assert.match(createPage, /<input[^>]+id="storage-transfer-relabel-toggle"[^>]+name="relabel"[^>]+type="checkbox"[^>]+checked/);
assert.match(createPage, /id="storage-transfer-relabel-status"[^>]*>已开启</);
assert.match(createPage, /name="relabelRequirement"[\s\S]*?换箱唛[\s\S]*?换SKU标[\s\S]*?既换箱唛,又换SKU标/);
function classList() {
const values = new Set();
return {
toggle(name, enabled) {
if (enabled) values.add(name);
else values.delete(name);
},
contains(name) { return values.has(name); }
};
}
const cartonCard = { classList: classList() };
const skuCard = { classList: classList() };
const hint = { textContent: '' };
const controls = {
relabel: { checked: true },
relabelRequirement: { value: 'Case1', disabled: false },
relabelCartonLabel: { disabled: false, required: false, files: [], closest: () => cartonCard },
relabelSkuLabel: { disabled: false, required: false, files: [], closest: () => skuCard },
relabelRelationFile: { disabled: false, files: [] },
relabelRemark: { disabled: false, value: '' }
};
const form = { elements: controls };
const updateStorageTransferRelabelRequirements = vm.runInNewContext(
`(${extractFunction('updateStorageTransferRelabelRequirements')})`,
{ document: { getElementById: id => id === 'storage-transfer-form' ? form : id === 'storage-transfer-relabel-hint' ? hint : null } }
);
updateStorageTransferRelabelRequirements();
assert.equal(controls.relabelCartonLabel.disabled, false);
assert.equal(controls.relabelCartonLabel.required, true);
assert.equal(controls.relabelSkuLabel.disabled, true);
assert.equal(controls.relabelSkuLabel.required, false);
assert.equal(hint.textContent, '换箱唛:需要上传箱唛');
controls.relabelRequirement.value = 'Case3';
updateStorageTransferRelabelRequirements();
assert.equal(controls.relabelCartonLabel.disabled, false);
assert.equal(controls.relabelSkuLabel.disabled, false);
assert.equal(controls.relabelCartonLabel.required, true);
assert.equal(controls.relabelSkuLabel.required, true);
controls.relabel.checked = false;
updateStorageTransferRelabelRequirements();
assert.equal(controls.relabelCartonLabel.disabled, true);
assert.equal(controls.relabelSkuLabel.disabled, true);
assert.equal(controls.relabelCartonLabel.required, false);
assert.equal(controls.relabelSkuLabel.required, false);
assert.equal(hint.textContent, '未开启换标,无需上传标签文件');
const getStorageTransferRelabelConfig = vm.runInNewContext(`(${extractFunction('getStorageTransferRelabelConfig')})`);
controls.relabel.checked = true;
controls.relabelRequirement.value = 'Case2';
controls.relabelCartonLabel.files = [{ name: 'carton.pdf' }];
controls.relabelSkuLabel.files = [{ name: 'sku.pdf' }];
assert.deepEqual(
JSON.parse(JSON.stringify(getStorageTransferRelabelConfig(form))),
{ relabel: 'yes', relabelRequirement: 'Case2', relabelCartonLabel: '', relabelSkuLabel: 'sku.pdf', relabelRelationFile: '', relabelRemark: '' }
);
controls.relabel.checked = false;
assert.deepEqual(
JSON.parse(JSON.stringify(getStorageTransferRelabelConfig(form))),
{ relabel: 'no', relabelRequirement: '', relabelCartonLabel: '', relabelSkuLabel: '', relabelRelationFile: '', relabelRemark: '' }
);
console.log('storage transfer relabel: ok');