#!/usr/bin/env node /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import assert from 'node:assert/strict' import { readFile } from 'node:fs/promises' import path from 'node:path' import { fileURLToPath } from 'node:url' const scriptPath = fileURLToPath(import.meta.url) const appRoot = path.resolve(path.dirname(scriptPath), '..') async function source(file) { return readFile(path.join(appRoot, file), 'utf8') } const orderWorkspace = await source('src/components/erp/ErpOrderWorkspace.vue') const renderer = await source('src/components/erp/ErpPageRenderer.vue') const moduleCatalog = await source('src/data/moduleCatalog.ts') const previewVerifier = await source('scripts/verify-preview.mjs') const screenshotScript = await source('scripts/capture-admin-screenshots.mjs') const packageJson = await source('package.json') for (const text of [ '订单运营', '订单录入', '订单运营台', 'Showcart', '订单录入购物车', '购物车', '购物车合计', '订单队列', '订单查询', '订单列表', '履约进度', '付款状态', '风险提示', '批量处理', '订单详情' ]) { assert.match(orderWorkspace, new RegExp(text), `custom order workspace must expose ${text}`) } assert.match(orderWorkspace, /getEntityRows\('OrderHeader'/, 'order workspace must load real OrderHeader rows from the entity API') assert.match(orderWorkspace, /真实订单数据/, 'order workspace must describe entity-backed order data') assert.doesNotMatch( orderWorkspace, /从页面定义生成处理入口|不展示固定示例订单|字段和动作来自当前 OFBiz 页面定义|根据 OFBiz 页面定义生成列表|已生成字段|默认字段|ORD-\d+/, 'order workspace must not present generated metadata or fake fixed orders as operations' ) for (const text of ['data-modern-workspace', 'order-cart', 'data-modern-order-entry-cart="true"', 'data-modern-order-search="true"', 'data-modern-order-table="true"', 'data-modern-order-drawer="true"']) { assert.match(orderWorkspace, new RegExp(text), `order workspace needs stable verification hook: ${text}`) } assert.match(renderer, /ErpOrderWorkspace/, 'page renderer should import the custom order workspace') assert.match(renderer, /block\.type === 'order-workspace'/, 'order-workspace blocks should render through the custom order workspace') assert.match(renderer, /isOrderCartPage/, 'renderer should route order Showcart pages into the cart/order-entry workspace') assert.match(moduleCatalog, /pageId: 'order__findorders'/, 'order module quick entry should land on the custom order finder') assert.match(previewVerifier, /order-findorders-page/, 'preview verification should smoke-test the custom order finder') assert.match(previewVerifier, /topbar-quick-action-order-entry/, 'preview verification should cover the topbar order entry deep link') assert.match(screenshotScript, /business-page-order-finder/, 'screenshots should capture the custom order finder') assert.match(packageJson, /verify:order-workspace/, 'package scripts should expose order workspace verification') console.log(JSON.stringify({ status: 'passed', checked: [ 'ErpOrderWorkspace.vue', 'ErpPageRenderer.vue', 'moduleCatalog.ts', 'verify-preview.mjs', 'capture-admin-screenshots.mjs', 'package.json' ] }, null, 2))