Skip to content

Commit ddcdeb7

Browse files
committed
update tests and setup
1 parent a3b2c15 commit ddcdeb7

File tree

82 files changed

+834
-358
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

82 files changed

+834
-358
lines changed

exercises/01.discovery/01.problem.cors/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"@epic-web/config": "^1.21.3",
2424
"@epic-web/mcp-dev": "*",
2525
"@faker-js/faker": "^10.0.0",
26-
"@modelcontextprotocol/inspector": "npm:@kentcdodds/[email protected].0",
26+
"@modelcontextprotocol/inspector": "^0.17.0",
2727
"@types/node": "^24.5.2",
2828
"cross-env": "^10.0.0",
2929
"eslint": "^9.36.0",

exercises/01.discovery/01.problem.cors/test/globalSetup.ts

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ declare module 'vitest' {
1111
type OutputBuffer = Array<{ channel: 'stdout' | 'stderr'; data: Buffer }>
1212

1313
export default async function setup(project: TestProject) {
14-
const mcpServerPort = await getPort()
14+
const mcpServerPort = process.env.PORT
15+
? Number(process.env.PORT)
16+
: await getPort()
1517

1618
project.provide('mcpServerPort', mcpServerPort)
1719

@@ -122,13 +124,15 @@ export default async function setup(project: TestProject) {
122124
})
123125
}
124126

125-
async function startServers() {
126-
console.log('Starting servers...')
127-
128-
// Start app server if necessary
129-
await startAppServerIfNecessary()
127+
async function startMcpServerIfNecessary() {
128+
const isMcpRunning = await fetch(
129+
`http://localhost:${mcpServerPort}/healthcheck`,
130+
).catch(() => ({ ok: false }))
131+
if (isMcpRunning.ok) {
132+
return
133+
}
130134

131-
// Start the MCP server from the exercise directory
135+
// Start the MCP server if necessary
132136
console.log(`Starting MCP server on port ${mcpServerPort}...`)
133137
mcpServerProcess = execa(
134138
'npx',
@@ -142,6 +146,16 @@ export default async function setup(project: TestProject) {
142146
},
143147
},
144148
)
149+
}
150+
151+
async function startServers() {
152+
console.log('Starting servers...')
153+
154+
// Start app server if necessary
155+
await startAppServerIfNecessary()
156+
157+
// Start MCP server if necessary
158+
await startMcpServerIfNecessary()
145159

146160
try {
147161
// Wait for both servers to be ready simultaneously
@@ -161,7 +175,9 @@ export default async function setup(project: TestProject) {
161175
textMatch: mcpServerPort.toString(),
162176
name: '[MCP-SERVER]',
163177
outputBuffer: mcpServerOutput,
164-
}),
178+
}).then(() =>
179+
waitForResourceReady(`http://localhost:${mcpServerPort}/healthcheck`),
180+
),
165181
])
166182

167183
console.log('Servers started successfully')

exercises/01.discovery/01.solution.cors/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"@epic-web/config": "^1.21.3",
2424
"@epic-web/mcp-dev": "*",
2525
"@faker-js/faker": "^10.0.0",
26-
"@modelcontextprotocol/inspector": "npm:@kentcdodds/[email protected].0",
26+
"@modelcontextprotocol/inspector": "^0.17.0",
2727
"@types/node": "^24.5.2",
2828
"cross-env": "^10.0.0",
2929
"eslint": "^9.36.0",

exercises/01.discovery/01.solution.cors/src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ export default {
6262
return mcp.fetch(request, env, ctx)
6363
}
6464

65+
if (url.pathname === '/healthcheck') {
66+
return new Response('OK', { status: 200 })
67+
}
68+
6569
return new Response('Not found', { status: 404 })
6670
},
6771
}),

exercises/01.discovery/01.solution.cors/test/globalSetup.ts

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ declare module 'vitest' {
1111
type OutputBuffer = Array<{ channel: 'stdout' | 'stderr'; data: Buffer }>
1212

1313
export default async function setup(project: TestProject) {
14-
const mcpServerPort = await getPort()
14+
const mcpServerPort = process.env.PORT
15+
? Number(process.env.PORT)
16+
: await getPort()
1517

1618
project.provide('mcpServerPort', mcpServerPort)
1719

@@ -122,13 +124,15 @@ export default async function setup(project: TestProject) {
122124
})
123125
}
124126

125-
async function startServers() {
126-
console.log('Starting servers...')
127-
128-
// Start app server if necessary
129-
await startAppServerIfNecessary()
127+
async function startMcpServerIfNecessary() {
128+
const isMcpRunning = await fetch(
129+
`http://localhost:${mcpServerPort}/healthcheck`,
130+
).catch(() => ({ ok: false }))
131+
if (isMcpRunning.ok) {
132+
return
133+
}
130134

131-
// Start the MCP server from the exercise directory
135+
// Start the MCP server if necessary
132136
console.log(`Starting MCP server on port ${mcpServerPort}...`)
133137
mcpServerProcess = execa(
134138
'npx',
@@ -142,6 +146,16 @@ export default async function setup(project: TestProject) {
142146
},
143147
},
144148
)
149+
}
150+
151+
async function startServers() {
152+
console.log('Starting servers...')
153+
154+
// Start app server if necessary
155+
await startAppServerIfNecessary()
156+
157+
// Start MCP server if necessary
158+
await startMcpServerIfNecessary()
145159

146160
try {
147161
// Wait for both servers to be ready simultaneously
@@ -161,7 +175,9 @@ export default async function setup(project: TestProject) {
161175
textMatch: mcpServerPort.toString(),
162176
name: '[MCP-SERVER]',
163177
outputBuffer: mcpServerOutput,
164-
}),
178+
}).then(() =>
179+
waitForResourceReady(`http://localhost:${mcpServerPort}/healthcheck`),
180+
),
165181
])
166182

167183
console.log('Servers started successfully')

exercises/01.discovery/02.problem.as/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"@epic-web/config": "^1.21.3",
2424
"@epic-web/mcp-dev": "*",
2525
"@faker-js/faker": "^10.0.0",
26-
"@modelcontextprotocol/inspector": "npm:@kentcdodds/[email protected].0",
26+
"@modelcontextprotocol/inspector": "^0.17.0",
2727
"@types/node": "^24.5.2",
2828
"cross-env": "^10.0.0",
2929
"eslint": "^9.36.0",

exercises/01.discovery/02.problem.as/src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ export default {
6767
return mcp.fetch(request, env, ctx)
6868
}
6969

70+
if (url.pathname === '/healthcheck') {
71+
return new Response('OK', { status: 200 })
72+
}
73+
7074
return new Response('Not found', { status: 404 })
7175
},
7276
}),

exercises/01.discovery/02.problem.as/test/globalSetup.ts

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ declare module 'vitest' {
1111
type OutputBuffer = Array<{ channel: 'stdout' | 'stderr'; data: Buffer }>
1212

1313
export default async function setup(project: TestProject) {
14-
const mcpServerPort = await getPort()
14+
const mcpServerPort = process.env.PORT
15+
? Number(process.env.PORT)
16+
: await getPort()
1517

1618
project.provide('mcpServerPort', mcpServerPort)
1719

@@ -122,13 +124,15 @@ export default async function setup(project: TestProject) {
122124
})
123125
}
124126

125-
async function startServers() {
126-
console.log('Starting servers...')
127-
128-
// Start app server if necessary
129-
await startAppServerIfNecessary()
127+
async function startMcpServerIfNecessary() {
128+
const isMcpRunning = await fetch(
129+
`http://localhost:${mcpServerPort}/healthcheck`,
130+
).catch(() => ({ ok: false }))
131+
if (isMcpRunning.ok) {
132+
return
133+
}
130134

131-
// Start the MCP server from the exercise directory
135+
// Start the MCP server if necessary
132136
console.log(`Starting MCP server on port ${mcpServerPort}...`)
133137
mcpServerProcess = execa(
134138
'npx',
@@ -142,6 +146,16 @@ export default async function setup(project: TestProject) {
142146
},
143147
},
144148
)
149+
}
150+
151+
async function startServers() {
152+
console.log('Starting servers...')
153+
154+
// Start app server if necessary
155+
await startAppServerIfNecessary()
156+
157+
// Start MCP server if necessary
158+
await startMcpServerIfNecessary()
145159

146160
try {
147161
// Wait for both servers to be ready simultaneously
@@ -161,7 +175,9 @@ export default async function setup(project: TestProject) {
161175
textMatch: mcpServerPort.toString(),
162176
name: '[MCP-SERVER]',
163177
outputBuffer: mcpServerOutput,
164-
}),
178+
}).then(() =>
179+
waitForResourceReady(`http://localhost:${mcpServerPort}/healthcheck`),
180+
),
165181
])
166182

167183
console.log('Servers started successfully')

exercises/01.discovery/02.solution.as/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"@epic-web/config": "^1.21.3",
2424
"@epic-web/mcp-dev": "*",
2525
"@faker-js/faker": "^10.0.0",
26-
"@modelcontextprotocol/inspector": "npm:@kentcdodds/[email protected].0",
26+
"@modelcontextprotocol/inspector": "^0.17.0",
2727
"@types/node": "^24.5.2",
2828
"cross-env": "^10.0.0",
2929
"eslint": "^9.36.0",

exercises/01.discovery/02.solution.as/src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ export default {
6767
return mcp.fetch(request, env, ctx)
6868
}
6969

70+
if (url.pathname === '/healthcheck') {
71+
return new Response('OK', { status: 200 })
72+
}
73+
7074
return new Response('Not found', { status: 404 })
7175
},
7276
}),

0 commit comments

Comments
 (0)