





























@@ -12,6 +12,32 @@ import {
1212resolveTelegramStatusReactionEmojis,
1313} from "./status-reaction-variants.js";
141415+type StatusIssue = ReturnType<typeof collectTelegramStatusIssues>[number];
16+17+function expectIssueFields(issue: StatusIssue | undefined, expected: Partial<StatusIssue>): void {
18+if (!issue) {
19+throw new Error("expected status issue");
20+}
21+for (const [key, value] of Object.entries(expected)) {
22+expect(issue[key as keyof StatusIssue]).toBe(value);
23+}
24+}
25+26+function expectIssueListContainsFields(
27+issues: StatusIssue[],
28+expected: Partial<StatusIssue>,
29+): void {
30+expect(
31+issues.some((issue) =>
32+Object.entries(expected).every(([key, value]) => issue[key as keyof StatusIssue] === value),
33+),
34+).toBe(true);
35+}
36+37+function expectIssueMessageContains(issues: StatusIssue[], text: string): void {
38+expect(issues.some((issue) => issue.message.includes(text))).toBe(true);
39+}
40+1541describe("collectTelegramStatusIssues", () => {
1642it("reports privacy-mode and wildcard unmentioned-group configuration risks", () => {
1743const issues = collectTelegramStatusIssues([
@@ -27,23 +53,14 @@ describe("collectTelegramStatusIssues", () => {
2753} as ChannelAccountSnapshot,
2854]);
295530-expect(issues).toEqual(
31-expect.arrayContaining([
32-expect.objectContaining({
33-channel: "telegram",
34-accountId: "main",
35-kind: "config",
36-}),
37-]),
38-);
39-const issueMessages = issues.map((issue) => issue.message);
40-expect(issueMessages).toEqual(
41-expect.arrayContaining([expect.stringContaining("privacy mode")]),
42-);
43-expect(issueMessages).toEqual(expect.arrayContaining([expect.stringContaining('uses "*"')]));
44-expect(issueMessages).toEqual(
45-expect.arrayContaining([expect.stringContaining("unresolvedGroups=2")]),
46-);
56+expectIssueListContainsFields(issues, {
57+channel: "telegram",
58+accountId: "main",
59+kind: "config",
60+});
61+expectIssueMessageContains(issues, "privacy mode");
62+expectIssueMessageContains(issues, 'uses "*"');
63+expectIssueMessageContains(issues, "unresolvedGroups=2");
4764});
48654966it("reports unreachable groups with match metadata", () => {
@@ -68,7 +85,7 @@ describe("collectTelegramStatusIssues", () => {
6885]);
69867087expect(issues).toHaveLength(1);
71-expect(issues[0]).toMatchObject({
88+expectIssueFields(issues[0], {
7289channel: "telegram",
7390accountId: "main",
7491kind: "runtime",
@@ -92,14 +109,13 @@ describe("collectTelegramStatusIssues", () => {
92109} as ChannelAccountSnapshot,
93110]);
9411195-expect(issues).toEqual([
96-expect.objectContaining({
97-channel: "telegram",
98-accountId: "main",
99-kind: "runtime",
100-message: expect.stringContaining("has not completed a successful getUpdates call"),
101-}),
102-]);
112+expect(issues).toHaveLength(1);
113+expectIssueFields(issues[0], {
114+channel: "telegram",
115+accountId: "main",
116+kind: "runtime",
117+});
118+expect(issues[0]?.message).toContain("has not completed a successful getUpdates call");
103119expect(issues[0]?.message).toContain("network timeout");
104120expect(issues[0]?.fix).toContain("channels status --probe");
105121});
@@ -134,14 +150,13 @@ describe("collectTelegramStatusIssues", () => {
134150} as ChannelAccountSnapshot,
135151]);
136152137-expect(issues).toEqual([
138-expect.objectContaining({
139-channel: "telegram",
140-accountId: "main",
141-kind: "runtime",
142-message: expect.stringContaining("polling transport is stale"),
143-}),
144-]);
153+expect(issues).toHaveLength(1);
154+expectIssueFields(issues[0], {
155+channel: "telegram",
156+accountId: "main",
157+kind: "runtime",
158+});
159+expect(issues[0]?.message).toContain("polling transport is stale");
145160});
146161147162it("does not report inherited stale transport activity during a fresh polling lifecycle", () => {
@@ -175,14 +190,13 @@ describe("collectTelegramStatusIssues", () => {
175190} as ChannelAccountSnapshot,
176191]);
177192178-expect(issues).toEqual([
179-expect.objectContaining({
180-channel: "telegram",
181-accountId: "main",
182-kind: "runtime",
183-message: expect.stringContaining("setWebhook has not completed"),
184-}),
185-]);
193+expect(issues).toHaveLength(1);
194+expectIssueFields(issues[0], {
195+channel: "telegram",
196+accountId: "main",
197+kind: "runtime",
198+});
199+expect(issues[0]?.message).toContain("setWebhook has not completed");
186200expect(issues[0]?.message).toContain("fetch failed");
187201expect(issues[0]?.fix).toContain("webhook URL");
188202});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。