






















@@ -19,44 +19,38 @@ describe("msteams errors", () => {
1919});
20202121it("classifies ContentStreamNotAllowed as permanent instead of auth", () => {
22-expect(
23-classifyMSTeamsSendError({
24-statusCode: 403,
25-response: {
26-body: {
27-error: {
28-code: "ContentStreamNotAllowed",
29-},
22+const result = classifyMSTeamsSendError({
23+statusCode: 403,
24+response: {
25+body: {
26+error: {
27+code: "ContentStreamNotAllowed",
3028},
3129},
32-}),
33-).toMatchObject({
34-kind: "permanent",
35-statusCode: 403,
36-errorCode: "ContentStreamNotAllowed",
30+},
3731});
32+expect(result.kind).toBe("permanent");
33+expect(result.statusCode).toBe(403);
34+expect(result.errorCode).toBe("ContentStreamNotAllowed");
3835});
39364037it("classifies throttling errors and parses retry-after", () => {
41-expect(classifyMSTeamsSendError({ statusCode: 429, retryAfter: "1.5" })).toMatchObject({
42-kind: "throttled",
43-statusCode: 429,
44-retryAfterMs: 1500,
45-});
38+const result = classifyMSTeamsSendError({ statusCode: 429, retryAfter: "1.5" });
39+expect(result.kind).toBe("throttled");
40+expect(result.statusCode).toBe(429);
41+expect(result.retryAfterMs).toBe(1500);
4642});
47434844it("classifies transient errors", () => {
49-expect(classifyMSTeamsSendError({ statusCode: 503 })).toMatchObject({
50-kind: "transient",
51-statusCode: 503,
52-});
45+const result = classifyMSTeamsSendError({ statusCode: 503 });
46+expect(result.kind).toBe("transient");
47+expect(result.statusCode).toBe(503);
5348});
54495550it("classifies permanent 4xx errors", () => {
56-expect(classifyMSTeamsSendError({ statusCode: 400 })).toMatchObject({
57-kind: "permanent",
58-statusCode: 400,
59-});
51+const result = classifyMSTeamsSendError({ statusCode: 400 });
52+expect(result.kind).toBe("permanent");
53+expect(result.statusCode).toBe(400);
6054});
61556256it("provides actionable hints for common cases", () => {
@@ -77,18 +71,15 @@ describe("msteams errors", () => {
7771});
7872const etimedout = Object.assign(new Error("ETIMEDOUT"), { code: "ETIMEDOUT" });
797380-expect(classifyMSTeamsSendError(econnrefused)).toMatchObject({
81-kind: "network",
82-errorCode: "ECONNREFUSED",
83-});
84-expect(classifyMSTeamsSendError(enotfound)).toMatchObject({
85-kind: "network",
86-errorCode: "ENOTFOUND",
87-});
88-expect(classifyMSTeamsSendError(etimedout)).toMatchObject({
89-kind: "network",
90-errorCode: "ETIMEDOUT",
91-});
74+const econnrefusedResult = classifyMSTeamsSendError(econnrefused);
75+expect(econnrefusedResult.kind).toBe("network");
76+expect(econnrefusedResult.errorCode).toBe("ECONNREFUSED");
77+const enotfoundResult = classifyMSTeamsSendError(enotfound);
78+expect(enotfoundResult.kind).toBe("network");
79+expect(enotfoundResult.errorCode).toBe("ENOTFOUND");
80+const etimedoutResult = classifyMSTeamsSendError(etimedout);
81+expect(etimedoutResult.kind).toBe("network");
82+expect(etimedoutResult.errorCode).toBe("ETIMEDOUT");
92839384// Hints for network errors must mention smba (Connector endpoint) and egress
9485expect(formatMSTeamsSendErrorHint({ kind: "network" })).toContain("smba");
@@ -97,7 +88,7 @@ describe("msteams errors", () => {
97889889it("still classifies HTTP errors as unknown when no status code and no network code", () => {
9990expect(classifyMSTeamsSendError(new Error("unexpected error")).kind).toBe("unknown");
100-expect(classifyMSTeamsSendError(null)).toMatchObject({ kind: "unknown" });
91+expect(classifyMSTeamsSendError(null).kind).toBe("unknown");
10192});
1029310394describe("isRevokedProxyError", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。