Files
mesh-catalog/modules/gitea/test/mainrules.test.ts
T
jschoubben 68dfca1057
mesh/delivery delivered
mesh/check pass 68dfca105794 on 3bec357968da | unit 4443 run, 0 kept, 15 skipped | integration 4483 run, 0 kept, 23 skipped | over bound: unit, integr…
Gate the token mint's main-rule write by keep-main-rules too
The operator, 2026-10-23: "disable the gitea branch protection reset thing". setUpToolsAccount (run at every token mint) called ensureMainMerges regardless; it now does so only when the setting is true.
2026-10-23 15:57:44 +02:00

65 lines
2.9 KiB
TypeScript

// The operator, 2026-10-23: "disable the gitea branch protection reset thing". keep-main-rules false (the default)
// writes nothing at the forge, true puts main's rule right as before.
import { test } from "node:test";
import assert from "node:assert/strict";
import { mkdtempSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { keepMainRules, mainRulesStep, LEFT_AS_SET } from "../dist/mainrules.js";
function env(body?: string): NodeJS.ProcessEnv {
if (body === undefined) return {};
const f = join(mkdtempSync(join(tmpdir(), "gitea-keep-")), "config.json");
writeFileSync(f, body);
return { MESH_GITEA_CONFIG_FILE: f };
}
test("the setting is false unless the config says true", () => {
assert.equal(keepMainRules(env()), false);
assert.equal(keepMainRules(env("{}")), false);
assert.equal(keepMainRules(env('{"keep-main-rules":false}')), false);
assert.equal(keepMainRules(env("not json")), false);
assert.equal(keepMainRules(env('{"keep-main-rules":true}')), true);
});
test("false: the step never writes and says once that the rules are left", async () => {
let writes = 0;
const said: string[] = [];
const step = mainRulesStep(false, async () => { writes++; return ["a"]; }, (l) => said.push(l));
await step(); await step(); await step();
assert.equal(writes, 0);
assert.deepEqual(said, [LEFT_AS_SET]);
assert.match(LEFT_AS_SET, /main's rules are left as set at the forge \(keep-main-rules is false\)/);
});
test("true: every step puts the rules right", async () => {
let writes = 0;
const said: string[] = [];
const step = mainRulesStep(true, async () => { writes++; return ["a", "b"]; }, (l) => said.push(l));
await step(); await step();
assert.equal(writes, 2);
assert.deepEqual(said, ["[gitea] main's rule is right in 2 repositories"]);
});
test("a token mint's account setup writes no protection while keep-main-rules is false, and does when true", async () => {
const { setUpToolsAccount } = await import("../dist/tools-account.js");
for (const [keep, want] of [[false, 0], [true, 1]] as const) {
let merges = 0;
const forge = {
ensureUser: async () => {}, ensureTeamWith: async () => 1, addUserToTeam: async () => {},
ensureMainMerges: async () => { merges++; return []; },
};
await setUpToolsAccount(forge, "mesh-tools", () => "pw", keep);
assert.equal(merges, want);
}
// The default comes from the setting, which is false when the config does not say true.
let merges = 0;
const saved = process.env.MESH_GITEA_CONFIG_FILE;
delete process.env.MESH_GITEA_CONFIG_FILE;
try {
await setUpToolsAccount({ ensureUser: async () => {}, ensureTeamWith: async () => 1, addUserToTeam: async () => {}, ensureMainMerges: async () => { merges++; return []; } }, "mesh-tools", () => "pw");
} finally { if (saved !== undefined) process.env.MESH_GITEA_CONFIG_FILE = saved; }
assert.equal(merges, 0);
});