* Secrets: add inline allowlist review set * Secrets: narrow detect-secrets file exclusions * Secrets: exclude Docker fingerprint false positive * Secrets: allowlist test and docs false positives * Secrets: refresh baseline after allowlist updates * Secrets: fix gateway chat fixture pragma * Secrets: format pre-commit config * Android: keep talk mode fixture JSON valid * Feishu: rely on client timeout injection * Secrets: allowlist provider auth test fixtures * Secrets: allowlist onboard search fixtures * Secrets: allowlist onboard mode fixture * Secrets: allowlist gateway auth mode fixture * Secrets: allowlist APNS wake test key * Secrets: allowlist gateway reload fixtures * Secrets: allowlist moonshot video fixture * Secrets: allowlist auto audio fixture * Secrets: allowlist tiny audio fixture * Secrets: allowlist embeddings fixtures * Secrets: allowlist resolve fixtures * Secrets: allowlist target registry pattern fixtures * Secrets: allowlist gateway chat env fixture * Secrets: refresh baseline after fixture allowlists * Secrets: reapply gateway chat env allowlist * Secrets: reapply gateway chat env allowlist * Secrets: stabilize gateway chat env allowlist * Secrets: allowlist runtime snapshot save fixture * Secrets: allowlist oauth profile fixtures * Secrets: allowlist compaction identifier fixture * Secrets: allowlist model auth fixture * Secrets: allowlist model status fixtures * Secrets: allowlist custom onboarding fixture * Secrets: allowlist mattermost token summary fixtures * Secrets: allowlist gateway auth suite fixtures * Secrets: allowlist channel summary fixture * Secrets: allowlist provider usage auth fixtures * Secrets: allowlist media proxy fixture * Secrets: allowlist secrets audit fixtures * Secrets: refresh baseline after final fixture allowlists * Feishu: prefer explicit client timeout * Feishu: test direct timeout precedence
85 lines
2.7 KiB
TypeScript
85 lines
2.7 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import type { ChannelPlugin } from "../channels/plugins/types.js";
|
|
|
|
vi.mock("../channels/plugins/index.js", () => ({
|
|
listChannelPlugins: vi.fn(),
|
|
}));
|
|
|
|
const { buildChannelSummary } = await import("./channel-summary.js");
|
|
const { listChannelPlugins } = await import("../channels/plugins/index.js");
|
|
|
|
function makeSlackHttpSummaryPlugin(): ChannelPlugin {
|
|
return {
|
|
id: "slack",
|
|
meta: {
|
|
id: "slack",
|
|
label: "Slack",
|
|
selectionLabel: "Slack",
|
|
docsPath: "/channels/slack",
|
|
blurb: "test",
|
|
},
|
|
capabilities: { chatTypes: ["direct"] },
|
|
config: {
|
|
listAccountIds: () => ["primary"],
|
|
defaultAccountId: () => "primary",
|
|
inspectAccount: (cfg) =>
|
|
(cfg as { marker?: string }).marker === "source"
|
|
? {
|
|
accountId: "primary",
|
|
name: "Primary",
|
|
enabled: true,
|
|
configured: true,
|
|
mode: "http",
|
|
botToken: "xoxb-http",
|
|
signingSecret: "",
|
|
botTokenSource: "config",
|
|
signingSecretSource: "config", // pragma: allowlist secret
|
|
botTokenStatus: "available",
|
|
signingSecretStatus: "configured_unavailable", // pragma: allowlist secret
|
|
}
|
|
: {
|
|
accountId: "primary",
|
|
name: "Primary",
|
|
enabled: true,
|
|
configured: false,
|
|
mode: "http",
|
|
botToken: "xoxb-http",
|
|
botTokenSource: "config",
|
|
botTokenStatus: "available",
|
|
},
|
|
resolveAccount: () => ({
|
|
accountId: "primary",
|
|
name: "Primary",
|
|
enabled: true,
|
|
configured: false,
|
|
mode: "http",
|
|
botToken: "xoxb-http",
|
|
botTokenSource: "config",
|
|
botTokenStatus: "available",
|
|
}),
|
|
isConfigured: (account) => Boolean((account as { configured?: boolean }).configured),
|
|
isEnabled: () => true,
|
|
},
|
|
actions: {
|
|
listActions: () => ["send"],
|
|
},
|
|
};
|
|
}
|
|
|
|
describe("buildChannelSummary", () => {
|
|
it("preserves Slack HTTP signing-secret unavailable state from source config", async () => {
|
|
vi.mocked(listChannelPlugins).mockReturnValue([makeSlackHttpSummaryPlugin()]);
|
|
|
|
const lines = await buildChannelSummary({ marker: "resolved", channels: {} } as never, {
|
|
colorize: false,
|
|
includeAllowFrom: false,
|
|
sourceConfig: { marker: "source", channels: {} } as never,
|
|
});
|
|
|
|
expect(lines).toContain("Slack: configured");
|
|
expect(lines).toContain(
|
|
" - primary (Primary) (bot:config, signing:config, secret unavailable in this command path)",
|
|
);
|
|
});
|
|
});
|