Skip to content

Commit 8dfa643

Browse files
Fixing up tests
1 parent 885590c commit 8dfa643

File tree

1 file changed

+42
-16
lines changed

1 file changed

+42
-16
lines changed

src/client/auth.test.ts

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,34 +44,60 @@ describe("OAuth Authorization", () => {
4444
});
4545

4646
it("returns metadata when first fetch fails but second without MCP header succeeds", async () => {
47-
// First request with MCP header fails
48-
mockFetch.mockRejectedValueOnce(new Error("Network error"));
47+
// Set up a counter to control behavior
48+
let callCount = 0;
4949

50-
// Second request without header succeeds
51-
mockFetch.mockResolvedValueOnce({
52-
ok: true,
53-
status: 200,
54-
json: async () => validMetadata,
50+
// Mock implementation that changes behavior based on call count
51+
mockFetch.mockImplementation((url, options) => {
52+
callCount++;
53+
54+
if (callCount === 1) {
55+
// First call with MCP header - fail with TypeError (simulating CORS error)
56+
// We need to use TypeError specifically because that's what the implementation checks for
57+
return Promise.reject(new TypeError("Network error"));
58+
} else {
59+
// Second call without header - succeed
60+
return Promise.resolve({
61+
ok: true,
62+
status: 200,
63+
json: async () => validMetadata
64+
});
65+
}
5566
});
5667

68+
// Should succeed with the second call
5769
const metadata = await discoverOAuthMetadata("https://auth.example.com");
5870
expect(metadata).toEqual(validMetadata);
5971

60-
// Verify second call was made without header
72+
// Verify both calls were made
6173
expect(mockFetch).toHaveBeenCalledTimes(2);
62-
const secondCallOptions = mockFetch.mock.calls[1][1];
63-
// The second call still has options but doesn't include MCP-Protocol-Version header
64-
expect(secondCallOptions).toBeDefined();
65-
expect(secondCallOptions?.headers).toBeUndefined();
74+
75+
// Verify first call had MCP header
76+
expect(mockFetch.mock.calls[0][1]?.headers).toHaveProperty("MCP-Protocol-Version");
6677
});
6778

6879
it("throws an error when all fetch attempts fail", async () => {
69-
// Both requests fail
70-
mockFetch.mockRejectedValueOnce(new Error("Network error"));
71-
mockFetch.mockRejectedValueOnce(new Error("Network error"));
80+
// Set up a counter to control behavior
81+
let callCount = 0;
82+
83+
// Mock implementation that changes behavior based on call count
84+
mockFetch.mockImplementation((url, options) => {
85+
callCount++;
86+
87+
if (callCount === 1) {
88+
// First call - fail with TypeError
89+
return Promise.reject(new TypeError("First failure"));
90+
} else {
91+
// Second call - fail with different error
92+
return Promise.reject(new Error("Second failure"));
93+
}
94+
});
7295

96+
// Should fail with the second error
7397
await expect(discoverOAuthMetadata("https://auth.example.com"))
74-
.rejects.toThrow("Network error");
98+
.rejects.toThrow("Second failure");
99+
100+
// Verify both calls were made
75101
expect(mockFetch).toHaveBeenCalledTimes(2);
76102
});
77103

0 commit comments

Comments
 (0)