ForgeFlow-ERP/frontend/scripts/test-production-work-order-ledger.mjs
2026-06-12 16:29:05 +08:00

61 lines
2.8 KiB
JavaScript

import assert from "node:assert/strict";
import { readFileSync } from "node:fs";
import path from "node:path";
const root = process.cwd();
function readSource(relativePath) {
return readFileSync(path.join(root, relativePath), "utf8");
}
const router = readSource("src/router/index.js");
const app = readSource("src/App.vue");
const productionLedgerView = readSource("src/views/ProductionLedgerView.vue");
const inventoryView = readSource("src/views/InventoryLedgerView.vue");
assert.match(
router,
/component:\s*view\("ProductionLedgerView"\)/,
"router should lazy load ProductionLedgerView"
);
assert.match(
router,
/path:\s*"\/production-ledger"[\s\S]*?name:\s*"production-ledger"[\s\S]*?component:\s*view\("ProductionLedgerView"\)[\s\S]*?permission:\s*"MENU_WORK_ORDER"/,
"router should define production-ledger route with MENU_WORK_ORDER permission"
);
assert.match(
router,
/path:\s*"\/work-order-ledger"[\s\S]*?redirect:\s*\{\s*name:\s*"production-ledger"\s*\}/,
"legacy work-order-ledger route should redirect to production-ledger"
);
assert.match(
app,
/label:\s*"生产台账"[\s\S]*?to:\s*\{\s*name:\s*"production-ledger"\s*\}[\s\S]*?permission:\s*"MENU_WORK_ORDER"/,
"App.vue production menu should expose 生产台账 linked to production-ledger"
);
assert.match(
productionLedgerView,
/fetchResource\("\/production\/production-ledger\?limit=500"/,
"ProductionLedgerView should load the production ledger endpoint with limit=500"
);
assert.match(productionLedgerView, /材料库存批次号/, "ProductionLedgerView should show material stock lot number");
assert.match(productionLedgerView, /库外未闭环重量/, "ProductionLedgerView should show outside unclosed weight");
assert.match(productionLedgerView, /该批材料结单/, "ProductionLedgerView should provide material batch lock action");
assert.doesNotMatch(productionLedgerView, /容差上限/, "ProductionLedgerView should not expose tolerance limit wording to users");
assert.doesNotMatch(inventoryView, /容差上限/, "InventoryLedgerView should not expose tolerance limit wording to users");
assert.match(inventoryView, /该批材料余料结单/, "InventoryLedgerView should provide a production-surplus material batch settle option");
assert.match(inventoryView, /该批材料废料结单/, "InventoryLedgerView should provide a production-scrap material batch settle option");
assert.match(
inventoryView,
/source_doc_type:\s*isProductionSurplusInbound\.value\s*\?\s*"PRODUCTION_LEDGER"/,
"InventoryLedgerView production surplus inbound payload should link production ledger source document"
);
assert.match(
inventoryView,
/source_doc_type:\s*isProductionScrapInbound\.value\s*\?\s*"PRODUCTION_LEDGER"/,
"InventoryLedgerView production scrap inbound payload should link production ledger source document"
);
console.log("production ledger static checks passed");