mirror of https://github.com/openclaw/openclaw.git
64 lines
2.1 KiB
TypeScript
64 lines
2.1 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { normalizeSlackMessagingTarget } from "../../../src/channels/plugins/normalize/slack.js";
|
|
import { parseSlackTarget, resolveSlackChannelId } from "./targets.js";
|
|
|
|
describe("parseSlackTarget", () => {
|
|
it("parses user mentions and prefixes", () => {
|
|
const cases = [
|
|
{ input: "<@U123>", id: "U123", normalized: "user:u123" },
|
|
{ input: "user:U456", id: "U456", normalized: "user:u456" },
|
|
{ input: "slack:U789", id: "U789", normalized: "user:u789" },
|
|
] as const;
|
|
for (const testCase of cases) {
|
|
expect(parseSlackTarget(testCase.input), testCase.input).toMatchObject({
|
|
kind: "user",
|
|
id: testCase.id,
|
|
normalized: testCase.normalized,
|
|
});
|
|
}
|
|
});
|
|
|
|
it("parses channel targets", () => {
|
|
const cases = [
|
|
{ input: "channel:C123", id: "C123", normalized: "channel:c123" },
|
|
{ input: "#C999", id: "C999", normalized: "channel:c999" },
|
|
] as const;
|
|
for (const testCase of cases) {
|
|
expect(parseSlackTarget(testCase.input), testCase.input).toMatchObject({
|
|
kind: "channel",
|
|
id: testCase.id,
|
|
normalized: testCase.normalized,
|
|
});
|
|
}
|
|
});
|
|
|
|
it("rejects invalid @ and # targets", () => {
|
|
const cases = [
|
|
{ input: "@bob-1", expectedMessage: /Slack DMs require a user id/ },
|
|
{ input: "#general-1", expectedMessage: /Slack channels require a channel id/ },
|
|
] as const;
|
|
for (const testCase of cases) {
|
|
expect(() => parseSlackTarget(testCase.input), testCase.input).toThrow(
|
|
testCase.expectedMessage,
|
|
);
|
|
}
|
|
});
|
|
});
|
|
|
|
describe("resolveSlackChannelId", () => {
|
|
it("strips channel: prefix and accepts raw ids", () => {
|
|
expect(resolveSlackChannelId("channel:C123")).toBe("C123");
|
|
expect(resolveSlackChannelId("C123")).toBe("C123");
|
|
});
|
|
|
|
it("rejects user targets", () => {
|
|
expect(() => resolveSlackChannelId("user:U123")).toThrow(/channel id is required/i);
|
|
});
|
|
});
|
|
|
|
describe("normalizeSlackMessagingTarget", () => {
|
|
it("defaults raw ids to channels", () => {
|
|
expect(normalizeSlackMessagingTarget("C123")).toBe("channel:c123");
|
|
});
|
|
});
|