test: dedupe shared setup in channel and doctor config tests

This commit is contained in:
Peter Steinberger
2026-02-18 03:38:06 +00:00
parent d1ab852972
commit e57628165a
5 changed files with 62 additions and 114 deletions

View File

@@ -23,6 +23,19 @@ async function runDoctorConfigWithInput(params: {
});
}
function expectGoogleChatDmAllowFromRepaired(cfg: unknown) {
const typed = cfg as {
channels: {
googlechat: {
dm: { allowFrom: string[] };
allowFrom?: string[];
};
};
};
expect(typed.channels.googlechat.dm.allowFrom).toEqual(["*"]);
expect(typed.channels.googlechat.allowFrom).toBeUndefined();
}
describe("doctor config flow", () => {
it("preserves invalid config for doctor repairs", async () => {
const result = await runDoctorConfigWithInput({
@@ -361,20 +374,7 @@ describe("doctor config flow", () => {
},
});
const cfg = result.cfg as unknown as {
channels: {
googlechat: {
dm: {
policy: string;
allowFrom: string[];
};
allowFrom?: string[];
};
};
};
expect(cfg.channels.googlechat.dm.allowFrom).toEqual(["*"]);
expect(cfg.channels.googlechat.allowFrom).toBeUndefined();
expectGoogleChatDmAllowFromRepaired(result.cfg);
});
it("repairs googlechat account dm.policy open by setting dm.allowFrom on repair", async () => {
@@ -430,19 +430,6 @@ describe("doctor config flow", () => {
},
});
const cfg = result.cfg as unknown as {
channels: {
googlechat: {
dm: {
policy: string;
allowFrom: string[];
};
allowFrom?: string[];
};
};
};
expect(cfg.channels.googlechat.dm.allowFrom).toEqual(["*"]);
expect(cfg.channels.googlechat.allowFrom).toBeUndefined();
expectGoogleChatDmAllowFromRepaired(result.cfg);
});
});

View File

@@ -51,6 +51,26 @@ vi.mock("./daemon-install-helpers.js", () => ({
import { maybeRepairGatewayServiceConfig } from "./doctor-gateway-services.js";
function makeDoctorIo() {
return { log: vi.fn(), error: vi.fn(), exit: vi.fn() };
}
function makeDoctorPrompts() {
return {
confirm: vi.fn().mockResolvedValue(true),
confirmRepair: vi.fn().mockResolvedValue(true),
confirmAggressive: vi.fn().mockResolvedValue(true),
confirmSkipInNonInteractive: vi.fn().mockResolvedValue(true),
select: vi.fn().mockResolvedValue("node"),
shouldRepair: false,
shouldForce: false,
};
}
async function runRepair(cfg: OpenClawConfig) {
await maybeRepairGatewayServiceConfig(cfg, "local", makeDoctorIo(), makeDoctorPrompts());
}
describe("maybeRepairGatewayServiceConfig", () => {
beforeEach(() => {
vi.clearAllMocks();
@@ -91,20 +111,7 @@ describe("maybeRepairGatewayServiceConfig", () => {
},
};
await maybeRepairGatewayServiceConfig(
cfg,
"local",
{ log: vi.fn(), error: vi.fn(), exit: vi.fn() },
{
confirm: vi.fn().mockResolvedValue(true),
confirmRepair: vi.fn().mockResolvedValue(true),
confirmAggressive: vi.fn().mockResolvedValue(true),
confirmSkipInNonInteractive: vi.fn().mockResolvedValue(true),
select: vi.fn().mockResolvedValue("node"),
shouldRepair: false,
shouldForce: false,
},
);
await runRepair(cfg);
expect(mocks.auditGatewayServiceConfig).toHaveBeenCalledWith(
expect.objectContaining({
@@ -164,20 +171,7 @@ describe("maybeRepairGatewayServiceConfig", () => {
gateway: {},
};
await maybeRepairGatewayServiceConfig(
cfg,
"local",
{ log: vi.fn(), error: vi.fn(), exit: vi.fn() },
{
confirm: vi.fn().mockResolvedValue(true),
confirmRepair: vi.fn().mockResolvedValue(true),
confirmAggressive: vi.fn().mockResolvedValue(true),
confirmSkipInNonInteractive: vi.fn().mockResolvedValue(true),
select: vi.fn().mockResolvedValue("node"),
shouldRepair: false,
shouldForce: false,
},
);
await runRepair(cfg);
expect(mocks.auditGatewayServiceConfig).toHaveBeenCalledWith(
expect.objectContaining({