// 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); });