























@@ -0,0 +1,102 @@
1+import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
2+3+let buildSlackHomeView: typeof import("./home.js").buildSlackHomeView;
4+let registerSlackHomeEvents: typeof import("./home.js").registerSlackHomeEvents;
5+let createSlackSystemEventTestHarness: typeof import("./system-event-test-harness.js").createSlackSystemEventTestHarness;
6+7+type HomeHandler = (args: { event: Record<string, unknown>; body: unknown }) => Promise<void>;
8+9+function createHomeContext(params?: {
10+trackEvent?: () => void;
11+shouldDropMismatchedSlackEvent?: (body: unknown) => boolean;
12+}) {
13+const harness = createSlackSystemEventTestHarness();
14+const publish = vi.fn().mockResolvedValue({ ok: true });
15+if (params?.shouldDropMismatchedSlackEvent) {
16+harness.ctx.shouldDropMismatchedSlackEvent = params.shouldDropMismatchedSlackEvent;
17+}
18+harness.ctx.botToken = "xoxb-test";
19+(harness.ctx.app as unknown as { client: { views: { publish: typeof publish } } }).client = {
20+views: { publish },
21+};
22+registerSlackHomeEvents({ ctx: harness.ctx, trackEvent: params?.trackEvent });
23+return {
24+ publish,
25+getHomeHandler: () => harness.getHandler("app_home_opened") as HomeHandler | null,
26+};
27+}
28+29+describe("registerSlackHomeEvents", () => {
30+beforeAll(async () => {
31+({ buildSlackHomeView, registerSlackHomeEvents } = await import("./home.js"));
32+({ createSlackSystemEventTestHarness } = await import("./system-event-test-harness.js"));
33+});
34+35+beforeEach(() => {
36+vi.clearAllMocks();
37+});
38+39+it("publishes the default Home tab view for app_home_opened", async () => {
40+const trackEvent = vi.fn();
41+const { publish, getHomeHandler } = createHomeContext({ trackEvent });
42+const handler = getHomeHandler();
43+expect(handler).toBeTruthy();
44+45+await handler!({
46+event: {
47+type: "app_home_opened",
48+user: "U123",
49+channel: "D123",
50+tab: "home",
51+event_ts: "123.456",
52+},
53+body: { api_app_id: "A1" },
54+});
55+56+expect(trackEvent).toHaveBeenCalledTimes(1);
57+expect(publish).toHaveBeenCalledTimes(1);
58+expect(publish).toHaveBeenCalledWith({
59+token: "xoxb-test",
60+user_id: "U123",
61+view: buildSlackHomeView(),
62+});
63+});
64+65+it("does not publish when Slack reports the Messages tab", async () => {
66+const trackEvent = vi.fn();
67+const { publish, getHomeHandler } = createHomeContext({ trackEvent });
68+69+await getHomeHandler()!({
70+event: {
71+type: "app_home_opened",
72+user: "U123",
73+channel: "D123",
74+tab: "messages",
75+},
76+body: {},
77+});
78+79+expect(trackEvent).toHaveBeenCalledTimes(1);
80+expect(publish).not.toHaveBeenCalled();
81+});
82+83+it("does not track or publish mismatched events", async () => {
84+const trackEvent = vi.fn();
85+const { publish, getHomeHandler } = createHomeContext({
86+ trackEvent,
87+shouldDropMismatchedSlackEvent: () => true,
88+});
89+90+await getHomeHandler()!({
91+event: {
92+type: "app_home_opened",
93+user: "U123",
94+tab: "home",
95+},
96+body: { api_app_id: "A_OTHER" },
97+});
98+99+expect(trackEvent).not.toHaveBeenCalled();
100+expect(publish).not.toHaveBeenCalled();
101+});
102+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。