test: trim extension test import churn

This commit is contained in:
Peter Steinberger
2026-04-03 04:37:34 +01:00
parent 2f013b68f8
commit 847faa3d04
87 changed files with 293 additions and 286 deletions

View File

@@ -1,5 +1,5 @@
import { Type } from "@sinclair/typebox";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
import type { OpenClawConfig } from "../runtime-api.js";
import { createChannelReplyPipeline } from "../runtime-api.js";
@@ -108,10 +108,12 @@ function createMattermostActionContext(
}
describe("mattermostPlugin", () => {
beforeEach(async () => {
vi.resetModules();
beforeAll(async () => {
({ mattermostPlugin } = await import("./channel.js"));
({ resetMattermostReactionBotUserCacheForTests } = await import("./mattermost/reactions.js"));
});
beforeEach(() => {
sendMessageMattermostMock.mockReset();
sendMessageMattermostMock.mockResolvedValue({
messageId: "post-1",

View File

@@ -1,4 +1,4 @@
import { beforeEach, describe, expect, it, vi } from "vitest";
import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
const {
listMattermostAccountIdsMock,
@@ -32,13 +32,15 @@ let listMattermostDirectoryGroups: typeof import("./directory.js").listMattermos
let listMattermostDirectoryPeers: typeof import("./directory.js").listMattermostDirectoryPeers;
describe("mattermost directory", () => {
beforeEach(async () => {
vi.resetModules();
vi.clearAllMocks();
beforeAll(async () => {
({ listMattermostDirectoryGroups, listMattermostDirectoryPeers } =
await import("./directory.js"));
});
beforeEach(() => {
vi.clearAllMocks();
});
it("deduplicates channels across enabled accounts and skips failing accounts", async () => {
const clientA = {
token: "token-a",

View File

@@ -1,4 +1,4 @@
import { beforeEach, describe, expect, it, vi } from "vitest";
import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
const evaluateSenderGroupAccessForPolicy = vi.hoisted(() => vi.fn());
const isDangerousNameMatchingEnabled = vi.hoisted(() => vi.fn());
@@ -15,8 +15,23 @@ vi.mock("./runtime-api.js", () => ({
}));
describe("mattermost monitor auth", () => {
let authorizeMattermostCommandInvocation: typeof import("./monitor-auth.js").authorizeMattermostCommandInvocation;
let isMattermostSenderAllowed: typeof import("./monitor-auth.js").isMattermostSenderAllowed;
let normalizeMattermostAllowEntry: typeof import("./monitor-auth.js").normalizeMattermostAllowEntry;
let normalizeMattermostAllowList: typeof import("./monitor-auth.js").normalizeMattermostAllowList;
let resolveMattermostEffectiveAllowFromLists: typeof import("./monitor-auth.js").resolveMattermostEffectiveAllowFromLists;
beforeAll(async () => {
({
authorizeMattermostCommandInvocation,
isMattermostSenderAllowed,
normalizeMattermostAllowEntry,
normalizeMattermostAllowList,
resolveMattermostEffectiveAllowFromLists,
} = await import("./monitor-auth.js"));
});
beforeEach(() => {
vi.resetModules();
evaluateSenderGroupAccessForPolicy.mockReset();
isDangerousNameMatchingEnabled.mockReset();
resolveAllowlistMatchSimple.mockReset();
@@ -24,18 +39,12 @@ describe("mattermost monitor auth", () => {
resolveEffectiveAllowFromLists.mockReset();
});
it("normalizes allowlist entries and resolves effective lists", async () => {
it("normalizes allowlist entries and resolves effective lists", () => {
resolveEffectiveAllowFromLists.mockReturnValue({
effectiveAllowFrom: ["alice"],
effectiveGroupAllowFrom: ["team"],
});
const {
normalizeMattermostAllowEntry,
normalizeMattermostAllowList,
resolveMattermostEffectiveAllowFromLists,
} = await import("./monitor-auth.js");
expect(normalizeMattermostAllowEntry(" @Alice ")).toBe("alice");
expect(normalizeMattermostAllowEntry("mattermost:Bob")).toBe("bob");
expect(normalizeMattermostAllowEntry("*")).toBe("*");
@@ -62,10 +71,8 @@ describe("mattermost monitor auth", () => {
});
});
it("checks sender allowlists against normalized ids and names", async () => {
it("checks sender allowlists against normalized ids and names", () => {
resolveAllowlistMatchSimple.mockReturnValue({ allowed: true });
const { isMattermostSenderAllowed } = await import("./monitor-auth.js");
expect(
isMattermostSenderAllowed({
senderId: "@Alice",
@@ -98,8 +105,6 @@ describe("mattermost monitor auth", () => {
});
resolveAllowlistMatchSimple.mockReturnValue({ allowed: false });
const { authorizeMattermostCommandInvocation } = await import("./monitor-auth.js");
expect(
authorizeMattermostCommandInvocation({
account: {

View File

@@ -1,4 +1,4 @@
import { beforeEach, describe, expect, it, vi } from "vitest";
import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
const fetchMattermostChannel = vi.hoisted(() => vi.fn());
const fetchMattermostUser = vi.hoisted(() => vi.fn());
@@ -18,8 +18,13 @@ vi.mock("./interactions.js", () => ({
}));
describe("mattermost monitor resources", () => {
let createMattermostMonitorResources: typeof import("./monitor-resources.js").createMattermostMonitorResources;
beforeAll(async () => {
({ createMattermostMonitorResources } = await import("./monitor-resources.js"));
});
beforeEach(() => {
vi.resetModules();
fetchMattermostChannel.mockReset();
fetchMattermostUser.mockReset();
sendMattermostTyping.mockReset();
@@ -36,7 +41,6 @@ describe("mattermost monitor resources", () => {
path: "/tmp/file.png",
contentType: "image/png",
}));
const { createMattermostMonitorResources } = await import("./monitor-resources.js");
const resources = createMattermostMonitorResources({
accountId: "default",
@@ -78,7 +82,6 @@ describe("mattermost monitor resources", () => {
fetchMattermostChannel.mockResolvedValue({ id: "chan-1", name: "town-square" });
fetchMattermostUser.mockResolvedValue({ id: "user-1", username: "alice" });
buildButtonProps.mockReturnValue(undefined);
const { createMattermostMonitorResources } = await import("./monitor-resources.js");
const resources = createMattermostMonitorResources({
accountId: "default",
@@ -128,7 +131,6 @@ describe("mattermost monitor resources", () => {
});
it("proxies typing indicators to the mattermost client helper", async () => {
const { createMattermostMonitorResources } = await import("./monitor-resources.js");
const client = {} as never;
const resources = createMattermostMonitorResources({

View File

@@ -1,4 +1,4 @@
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
const listSkillCommandsForAgents = vi.hoisted(() => vi.fn());
const parseStrictPositiveInteger = vi.hoisted(() => vi.fn());
@@ -40,8 +40,13 @@ vi.mock("./slash-state.js", () => ({
}));
describe("mattermost monitor slash", () => {
let registerMattermostMonitorSlashCommands: typeof import("./monitor-slash.js").registerMattermostMonitorSlashCommands;
beforeAll(async () => {
({ registerMattermostMonitorSlashCommands } = await import("./monitor-slash.js"));
});
beforeEach(() => {
vi.resetModules();
listSkillCommandsForAgents.mockReset();
parseStrictPositiveInteger.mockReset();
fetchMattermostUserTeams.mockReset();
@@ -60,7 +65,6 @@ describe("mattermost monitor slash", () => {
it("returns early when slash commands are disabled", async () => {
resolveSlashCommandConfig.mockReturnValue({ enabled: false });
isSlashCommandsEnabled.mockReturnValue(false);
const { registerMattermostMonitorSlashCommands } = await import("./monitor-slash.js");
await registerMattermostMonitorSlashCommands({
client: {} as never,
@@ -95,8 +99,6 @@ describe("mattermost monitor slash", () => {
error: vi.fn(),
};
const { registerMattermostMonitorSlashCommands } = await import("./monitor-slash.js");
await registerMattermostMonitorSlashCommands({
client: {} as never,
cfg: { gateway: { port: 18789 } } as never,
@@ -157,8 +159,6 @@ describe("mattermost monitor slash", () => {
error: vi.fn(),
};
const { registerMattermostMonitorSlashCommands } = await import("./monitor-slash.js");
await registerMattermostMonitorSlashCommands({
client: {} as never,
cfg: { gateway: { customBindHost: "loopback" } } as never,

View File

@@ -1,4 +1,4 @@
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
const resolveMattermostAccount = vi.fn();
const createMattermostClient = vi.fn();
@@ -16,23 +16,34 @@ vi.mock("./client.js", () => ({
}));
describe("mattermost target resolution", () => {
let isExplicitMattermostTarget: typeof import("./target-resolution.js").isExplicitMattermostTarget;
let isMattermostId: typeof import("./target-resolution.js").isMattermostId;
let parseMattermostApiStatus: typeof import("./target-resolution.js").parseMattermostApiStatus;
let resolveMattermostOpaqueTarget: typeof import("./target-resolution.js").resolveMattermostOpaqueTarget;
let resetMattermostOpaqueTargetCacheForTests: typeof import("./target-resolution.js").resetMattermostOpaqueTargetCacheForTests;
beforeAll(async () => {
({
isExplicitMattermostTarget,
isMattermostId,
parseMattermostApiStatus,
resolveMattermostOpaqueTarget,
resetMattermostOpaqueTargetCacheForTests,
} = await import("./target-resolution.js"));
});
beforeEach(() => {
vi.resetModules();
resolveMattermostAccount.mockReset();
createMattermostClient.mockReset();
fetchMattermostUser.mockReset();
normalizeMattermostBaseUrl.mockClear();
});
afterEach(async () => {
const { resetMattermostOpaqueTargetCacheForTests } = await import("./target-resolution.js");
afterEach(() => {
resetMattermostOpaqueTargetCacheForTests();
});
it("recognizes explicit targets and ID-shaped values", async () => {
const { isExplicitMattermostTarget, isMattermostId, parseMattermostApiStatus } =
await import("./target-resolution.js");
it("recognizes explicit targets and ID-shaped values", () => {
expect(isExplicitMattermostTarget("@alice")).toBe(true);
expect(isExplicitMattermostTarget("#town-square")).toBe(true);
expect(isExplicitMattermostTarget("mattermost:chan")).toBe(true);
@@ -46,8 +57,6 @@ describe("mattermost target resolution", () => {
it("resolves opaque ids as users and caches the result", async () => {
createMattermostClient.mockReturnValue({ client: true });
fetchMattermostUser.mockResolvedValue({ id: "abcd1234abcd1234abcd1234ab" });
const { resolveMattermostOpaqueTarget } = await import("./target-resolution.js");
const input = "abcd1234abcd1234abcd1234ab";
await expect(
@@ -81,8 +90,6 @@ describe("mattermost target resolution", () => {
it("falls back to channel targets on 404 lookups", async () => {
createMattermostClient.mockReturnValue({ client: true });
fetchMattermostUser.mockRejectedValue(new Error("Mattermost API 404 Not Found"));
const { resolveMattermostOpaqueTarget } = await import("./target-resolution.js");
const input = "bcde1234abcd1234abcd1234ab";
await expect(
@@ -105,8 +112,6 @@ describe("mattermost target resolution", () => {
});
createMattermostClient.mockReturnValue({ client: true });
fetchMattermostUser.mockResolvedValue({ id: "cdef1234abcd1234abcd1234ab" });
const { resolveMattermostOpaqueTarget } = await import("./target-resolution.js");
const input = "cdef1234abcd1234abcd1234ab";
await resolveMattermostOpaqueTarget({