mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-05 08:20:23 +00:00
test: trim extension test import churn
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user