85 行
3.8 KiB
JavaScript
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");
|