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

75 lines
4.8 KiB
JavaScript

const assert = require('node:assert/strict');
const fs = require('node:fs');
const html = fs.readFileSync('workbench.html', 'utf8');
const list = html.match(/<div class="page-content" id="page-return-relabel-list">([\s\S]*?)<div class="page-content" id="page-return-relabel-create">/)?.[1] || '';
const detail = html.match(/<div class="page-content" id="page-return-relabel-detail">([\s\S]*?)<!-- ========== PAGE: 旧退货入库/)?.[1] || '';
const detailScript = html.match(/function openReturnRelabelDetail\(orderId\)\{([\s\S]*?)\n \}/)?.[1] || '';
function extractDivByClass(source, className) {
const opening = `<div class="${className}">`;
const start = source.indexOf(opening);
assert.notEqual(start, -1, `${className} should exist`);
const tags = /<\/?div\b[^>]*>/g;
tags.lastIndex = start;
let depth = 0;
let match;
while ((match = tags.exec(source))) {
depth += match[0].startsWith('</') ? -1 : 1;
if (depth === 0) return source.slice(start, tags.lastIndex);
}
throw new Error(`Unable to extract ${className}`);
}
assert.ok(list, '退货换标列表页 should exist');
assert.ok(detail, '退货换标详情页 should exist');
assert.match(list, /class="storage-transfer-filter-grid"/);
assert.match(list, /class="storage-transfer-filter-item"/);
assert.match(list, /class="storage-transfer-filter-label"/);
assert.match(list, /class="storage-transfer-input"/);
assert.match(list, /class="storage-transfer-select"/);
assert.match(list, /class="storage-transfer-date-range"/);
assert.match(list, /class="storage-transfer-filter-actions"/);
const filterGrid = extractDivByClass(list, 'storage-transfer-filter-grid');
const createdEndIndex = filterGrid.indexOf('id="return-relabel-filter-created-end"');
const actionsIndex = filterGrid.indexOf('<div class="storage-transfer-filter-actions">');
assert.ok(createdEndIndex >= 0, '创建时间结束日期应存在');
assert.ok(actionsIndex > createdEndIndex, '查询/重置按钮应紧跟创建时间筛选项,并位于筛选网格内');
assert.doesNotMatch(list, /return-relabel-filter-(?:card|grid|actions)/);
assert.doesNotMatch(list, /return-relabel-(?:input|select|list-card|pagination)/);
assert.match(list, /class="card"><div class="table-wrap-simple"><table class="data-table return-relabel-table"/);
assert.match(list, /class="pagination-bar"/);
assert.doesNotMatch(list, /storage-transfer-list-card|storage-transfer-pagination/);
assert.doesNotMatch(detail, /business-detail-tabs-shell/, '退货换标详情不应再使用标签页容器');
assert.match(detail, /class="labeling-detail-grid return-relabel-detail-grid"/);
assert.match(detail, /class="card labeling-detail-card"/);
assert.match(detail, /class="card labeling-detail-card return-relabel-detail-order-card"/);
assert.match(detail, /class="return-relabel-detail-order-grid" id="return-relabel-detail-summary"/);
assert.match(detail, /class="info-section-title">订单信息<\/div>/);
assert.match(detail, /class="info-section-title">商品信息<\/div>/);
assert.match(detail, /class="info-section-title">换标数据<\/div>/);
assert.match(detail, /id="return-relabel-detail-order-no"/);
assert.match(detail, /class="labeling-detail-status"[^>]*id="return-relabel-detail-status"/);
assert.match(detailScript, /return-relabel-detail-order-no/);
assert.match(detailScript, /labeling-detail-field/);
assert.match(detailScript, /return-relabel-detail-status/);
assert.match(detail, /id="return-relabel-detail-relabel-data"[\s\S]*return-relabel-detail-relabel-enabled/);
assert.match(detail, /id="return-relabel-detail-relabel-data"[\s\S]*return-relabel-detail-label-case/);
assert.match(detail, /id="return-relabel-detail-relabel-data"[\s\S]*return-relabel-detail-carton-label/);
assert.match(detail, /id="return-relabel-detail-relabel-data"[\s\S]*return-relabel-detail-sku-label/);
assert.doesNotMatch(detail, /return-relabel-detail-tail-order-no/);
assert.doesNotMatch(detail, /return-relabel-detail-tail-status/);
assert.doesNotMatch(detailScript, /\['是否换标'/);
assert.doesNotMatch(detailScript, /\['贴标要求'/);
assert.doesNotMatch(detailScript, /\['上传箱唛'/);
assert.doesNotMatch(detailScript, /\['上传 SKU 标签'/);
assert.doesNotMatch(detail, /storage-transfer-section|storage-transfer-summary-grid|storage-transfer-relation-grid/);
assert.doesNotMatch(detail, /return-relabel-(?:section|summary-grid|relation-grid|table-wrap)/);
assert.doesNotMatch(detail, /后台关联单据/);
assert.match(html, /\.return-relabel-detail-order-card\s*\{[^}]*grid-column:\s*1\s*\/\s*-1/);
assert.match(html, /\.return-relabel-detail-order-grid\s*\{[^}]*grid-template-columns:\s*repeat\(2,\s*minmax\(0,\s*1fr\)\)/);
assert.match(html, /@media\s*\(max-width:\s*760px\)[\s\S]*\.return-relabel-detail-order-grid\s*\{[^}]*grid-template-columns:\s*minmax\(0,\s*1fr\)/);
console.log('return relabel detail layout requirements: ok');