Skip to content

Commit e7e1b52

Browse files
test: complete v1 test port — add bearerAuth.test.ts + router metadata describe block
Ports the two remaining v1 test files/blocks flagged in review: - test/middleware/bearerAuth.test.ts (20 cases): requireBearerAuth coverage - test/router.test.ts: append 'MCP Auth Metadata Router' describe (4 cases) - test/helpers/http.ts: createExpressResponseMock (used by bearerAuth tests) All 10 v1 server/auth test files now ported. 142 tests pass.
1 parent cee3ec3 commit e7e1b52

4 files changed

Lines changed: 651 additions & 1 deletion

File tree

.github/workflows/publish.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,4 @@ jobs:
4141
run:
4242
pnpm dlx pkg-pr-new publish --packageManager=npm --pnpm './packages/server' './packages/client'
4343
'./packages/middleware/express' './packages/middleware/fastify' './packages/middleware/hono' './packages/middleware/node'
44+
'./packages/server-auth-legacy'
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import type { Response } from 'express';
2+
import { vi } from 'vitest';
3+
4+
/**
5+
* Create a minimal Express-like Response mock for tests.
6+
*
7+
* The mock supports:
8+
* - redirect()
9+
* - status().json().send() chaining
10+
* - set()/header()
11+
* - optional getRedirectUrl() helper used in some tests
12+
*/
13+
export function createExpressResponseMock(options: { trackRedirectUrl?: boolean } = {}): Response & {
14+
getRedirectUrl?: () => string;
15+
} {
16+
let capturedRedirectUrl: string | undefined;
17+
18+
const res: Partial<Response> & { getRedirectUrl?: () => string } = {
19+
redirect: vi.fn((urlOrStatus: string | number, maybeUrl?: string | number) => {
20+
if (options.trackRedirectUrl) {
21+
if (typeof urlOrStatus === 'string') {
22+
capturedRedirectUrl = urlOrStatus;
23+
} else if (typeof maybeUrl === 'string') {
24+
capturedRedirectUrl = maybeUrl;
25+
}
26+
}
27+
return res as Response;
28+
}) as unknown as Response['redirect'],
29+
status: vi.fn<Response['status']>().mockImplementation((_code: number) => {
30+
return res as Response;
31+
}),
32+
json: vi.fn<Response['json']>().mockImplementation((_body: unknown) => {
33+
return res as Response;
34+
}),
35+
send: vi.fn<Response['send']>().mockImplementation((_body?: unknown) => {
36+
return res as Response;
37+
}),
38+
set: vi.fn<Response['set']>().mockImplementation((_field: string, _value?: string | string[]) => {
39+
return res as Response;
40+
}),
41+
header: vi.fn<Response['header']>().mockImplementation((_field: string, _value?: string | string[]) => {
42+
return res as Response;
43+
})
44+
};
45+
46+
if (options.trackRedirectUrl) {
47+
res.getRedirectUrl = () => {
48+
if (capturedRedirectUrl === undefined) {
49+
throw new Error('No redirect URL was captured. Ensure redirect() was called first.');
50+
}
51+
return capturedRedirectUrl;
52+
};
53+
}
54+
55+
return res as Response & { getRedirectUrl?: () => string };
56+
}

0 commit comments

Comments
 (0)