文件
hyb-oa/.trellis/tasks/08-11-internal-oa-usage-census-and-simplification/research/usage-census.contract.test.cjs
T

85 行
3.8 KiB
JavaScript

"use strict";
const assert = require("node:assert/strict");
const {
AUTH_SQL,
MODULE_KEYS,
SAFE_RESULT_KEYS,
USAGE_SQL,
applyExposure,
assertSafeResult,
classifyFixtureActor,
effectiveFlagState,
isSmokeLikeValue,
} = require("./usage-census.cjs");
const fs = require("node:fs");
function assertSelectOnly(sql) {
assert.doesNotMatch(sql, /\b(INSERT|UPDATE|DELETE|UPSERT|MERGE|ALTER|CREATE|DROP|TRUNCATE|CALL|COPY|GRANT|REVOKE)\b/iu);
assert.doesNotMatch(sql, /\bFOR\s+UPDATE\b/iu);
assert.match(sql, /^\s*WITH\b/iu);
}
assertSelectOnly(USAGE_SQL);
assertSelectOnly(AUTH_SQL);
assert.equal(MODULE_KEYS.length, 20);
assert.equal(new Set(MODULE_KEYS).size, MODULE_KEYS.length);
assert.equal(new Set(SAFE_RESULT_KEYS).size, SAFE_RESULT_KEYS.length);
assert.match(USAGE_SQL, /forced_kind = 'system'/u);
assert.match(USAGE_SQL, /THEN 'smoke'/u);
assert.match(USAGE_SQL, /THEN 'unknown'/u);
assert.match(USAGE_SQL, /ELSE 'human'/u);
assert.match(
fs.readFileSync(require.resolve("./usage-census.cjs"), "utf8"),
/require\.main === module \|\| process\.argv\[1\] === "-"/u,
);
assert.equal(isSmokeLikeValue("[email protected]"), true);
assert.equal(isSmokeLikeValue("[email protected]"), true);
assert.equal(isSmokeLikeValue("SMOKE002"), true);
assert.equal(isSmokeLikeValue("测试员工"), true);
assert.equal(isSmokeLikeValue("[email protected]"), false);
assert.equal(classifyFixtureActor(null), "unknown");
assert.equal(classifyFixtureActor({ employeeNo: "E001", email: "[email protected]", name: "普通员工" }), "human");
assert.equal(classifyFixtureActor({ employeeNo: "SMOKE002", email: "[email protected]", name: "普通员工" }), "smoke");
assert.equal(classifyFixtureActor({ employeeNo: "E001", email: "[email protected]", name: "普通员工" }, "system"), "system");
assert.equal(effectiveFlagState({ requiresDepartment: true, effectiveReason: "department_deferred", effectiveEnabled: true }), "partial");
assert.equal(effectiveFlagState({ requiresDepartment: false, effectiveReason: "flag_force_on_global", effectiveEnabled: true }), "on");
assert.equal(effectiveFlagState({ requiresDepartment: false, effectiveReason: "flag_force_off", effectiveEnabled: false }), "off");
const zeroMetric = Object.fromEntries(SAFE_RESULT_KEYS
.filter((key) => !["moduleKey", "latestActivityAt", "navigationMode", "effectiveFlagState", "queryStatus"].includes(key))
.map((key) => [key, 0]));
const rawMetrics = MODULE_KEYS.map((moduleKey) => ({
moduleKey,
...zeroMetric,
latestActivityAt: null,
auditEvents30d: 0,
auditEvents90d: 0,
auditHumanActors30d: 0,
auditHumanActors90d: 0,
auditHumanEvents30d: 0,
auditHumanEvents90d: 0,
auditSmokeEvents30d: 0,
auditSmokeEvents90d: 0,
auditUnknownEvents30d: 0,
auditUnknownEvents90d: 0,
}));
const workspace = { moduleVisibility: {} };
const exposed = applyExposure(rawMetrics, workspace, []);
assert.equal(exposed.length, 20);
assert.equal(exposed.find((item) => item.moduleKey === "payroll").navigationMode, "no_navigation");
assert.equal(exposed.find((item) => item.moduleKey === "procurement").effectiveFlagState, "not_applicable");
assert.equal(exposed.find((item) => item.moduleKey === "reimbursements_invoices").effectiveFlagState, "not_applicable");
assert.equal(exposed.find((item) => item.moduleKey === "workflow_approvals").effectiveFlagState, "not_applicable");
assert.equal(exposed.find((item) => item.moduleKey === "budgets").effectiveFlagState, "not_applicable");
assertSafeResult(exposed);
assert.throws(() => assertSafeResult(exposed.slice(1)), /result_module_count_invalid/u);
assert.throws(
() => assertSafeResult(exposed.map((item, index) => index === 0 ? { ...item, leakedField: "x" } : item)),
/result_field_contract_invalid/u,
);
process.stdout.write("usage-census contract: PASS\n");