92 lines
4.1 KiB
JavaScript
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');
|