Skip to content

Commit e28237f

Browse files
fix: remove webhook middleware tests
1 parent f0c4750 commit e28237f

File tree

2 files changed

+49
-209
lines changed

2 files changed

+49
-209
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// vitest.config.mts
2+
import { defineConfig } from "file:///Users/brandonmcconnell/Projects/@CopilotKit/vnext_experimental/node_modules/.pnpm/[email protected]_@[email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]/node_modules/vite/dist/node/index.js";
3+
import angular from "file:///Users/brandonmcconnell/Projects/@CopilotKit/vnext_experimental/node_modules/.pnpm/@[email protected]_@[email protected]_@angular+compiler-_zmz7jqfl7egy4lkxiiixmc6w5i/node_modules/@analogjs/vite-plugin-angular/src/index.js";
4+
import { fileURLToPath } from "node:url";
5+
import { dirname, resolve } from "node:path";
6+
var __vite_injected_original_import_meta_url = "file:///Users/brandonmcconnell/Projects/@CopilotKit/vnext_experimental/packages/angular/vitest.config.mts";
7+
var __dirname = dirname(fileURLToPath(__vite_injected_original_import_meta_url));
8+
var r = (...p) => resolve(__dirname, ...p);
9+
var vitest_config_default = defineConfig(({ mode }) => ({
10+
plugins: [angular()],
11+
resolve: {
12+
dedupe: [
13+
"@angular/core",
14+
"@angular/common",
15+
"@angular/platform-browser",
16+
"@angular/platform-browser-dynamic",
17+
"@angular/compiler",
18+
"@angular/core/testing"
19+
]
20+
},
21+
test: {
22+
globals: true,
23+
environment: "jsdom",
24+
setupFiles: [r("src/test-setup.ts")],
25+
// Use absolute path
26+
include: ["src/**/*.{spec,test}.{ts,tsx}"],
27+
pool: "threads",
28+
poolOptions: { threads: { singleThread: true } },
29+
coverage: {
30+
provider: "v8",
31+
reporter: ["text", "json", "html"],
32+
exclude: [
33+
"node_modules/",
34+
"dist/",
35+
"*.config.*",
36+
"src/test-setup.ts",
37+
"src/index.ts",
38+
"src/public-api.ts"
39+
]
40+
}
41+
},
42+
define: {
43+
"import.meta.vitest": mode !== "production"
44+
}
45+
}));
46+
export {
47+
vitest_config_default as default
48+
};
49+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZXN0LmNvbmZpZy5tdHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvYnJhbmRvbm1jY29ubmVsbC9Qcm9qZWN0cy9AQ29waWxvdEtpdC92bmV4dF9leHBlcmltZW50YWwvcGFja2FnZXMvYW5ndWxhclwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL2JyYW5kb25tY2Nvbm5lbGwvUHJvamVjdHMvQENvcGlsb3RLaXQvdm5leHRfZXhwZXJpbWVudGFsL3BhY2thZ2VzL2FuZ3VsYXIvdml0ZXN0LmNvbmZpZy5tdHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1VzZXJzL2JyYW5kb25tY2Nvbm5lbGwvUHJvamVjdHMvQENvcGlsb3RLaXQvdm5leHRfZXhwZXJpbWVudGFsL3BhY2thZ2VzL2FuZ3VsYXIvdml0ZXN0LmNvbmZpZy5tdHNcIjsvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGVzdFwiIC8+XG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tICd2aXRlJztcbmltcG9ydCBhbmd1bGFyIGZyb20gJ0BhbmFsb2dqcy92aXRlLXBsdWdpbi1hbmd1bGFyJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcblxuY29uc3QgX19kaXJuYW1lID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuY29uc3QgciA9ICguLi5wOiBzdHJpbmdbXSkgPT4gcmVzb2x2ZShfX2Rpcm5hbWUsIC4uLnApO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoKHsgbW9kZSB9KSA9PiAoe1xuICBwbHVnaW5zOiBbYW5ndWxhcigpXSxcbiAgcmVzb2x2ZToge1xuICAgIGRlZHVwZTogW1xuICAgICAgJ0Bhbmd1bGFyL2NvcmUnLFxuICAgICAgJ0Bhbmd1bGFyL2NvbW1vbicsXG4gICAgICAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlcicsXG4gICAgICAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci1keW5hbWljJyxcbiAgICAgICdAYW5ndWxhci9jb21waWxlcicsXG4gICAgICAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJyxcbiAgICBdLFxuICB9LFxuICB0ZXN0OiB7XG4gICAgZ2xvYmFsczogdHJ1ZSxcbiAgICBlbnZpcm9ubWVudDogJ2pzZG9tJyxcbiAgICBzZXR1cEZpbGVzOiBbcignc3JjL3Rlc3Qtc2V0dXAudHMnKV0sIC8vIFVzZSBhYnNvbHV0ZSBwYXRoXG4gICAgaW5jbHVkZTogWydzcmMvKiovKi57c3BlYyx0ZXN0fS57dHMsdHN4fSddLFxuICAgIHBvb2w6ICd0aHJlYWRzJyxcbiAgICBwb29sT3B0aW9uczogeyB0aHJlYWRzOiB7IHNpbmdsZVRocmVhZDogdHJ1ZSB9IH0sXG4gICAgY292ZXJhZ2U6IHtcbiAgICAgIHByb3ZpZGVyOiAndjgnLFxuICAgICAgcmVwb3J0ZXI6IFsndGV4dCcsICdqc29uJywgJ2h0bWwnXSxcbiAgICAgIGV4Y2x1ZGU6IFtcbiAgICAgICAgJ25vZGVfbW9kdWxlcy8nLFxuICAgICAgICAnZGlzdC8nLFxuICAgICAgICAnKi5jb25maWcuKicsXG4gICAgICAgICdzcmMvdGVzdC1zZXR1cC50cycsXG4gICAgICAgICdzcmMvaW5kZXgudHMnLFxuICAgICAgICAnc3JjL3B1YmxpYy1hcGkudHMnLFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICBkZWZpbmU6IHtcbiAgICAnaW1wb3J0Lm1ldGEudml0ZXN0JzogbW9kZSAhPT0gJ3Byb2R1Y3Rpb24nLFxuICB9LFxufSkpOyJdLAogICJtYXBwaW5ncyI6ICI7QUFDQSxTQUFTLG9CQUFvQjtBQUM3QixPQUFPLGFBQWE7QUFDcEIsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxTQUFTLGVBQWU7QUFKME8sSUFBTSwyQ0FBMkM7QUFNNVQsSUFBTSxZQUFZLFFBQVEsY0FBYyx3Q0FBZSxDQUFDO0FBQ3hELElBQU0sSUFBSSxJQUFJLE1BQWdCLFFBQVEsV0FBVyxHQUFHLENBQUM7QUFFckQsSUFBTyx3QkFBUSxhQUFhLENBQUMsRUFBRSxLQUFLLE9BQU87QUFBQSxFQUN6QyxTQUFTLENBQUMsUUFBUSxDQUFDO0FBQUEsRUFDbkIsU0FBUztBQUFBLElBQ1AsUUFBUTtBQUFBLE1BQ047QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixTQUFTO0FBQUEsSUFDVCxhQUFhO0FBQUEsSUFDYixZQUFZLENBQUMsRUFBRSxtQkFBbUIsQ0FBQztBQUFBO0FBQUEsSUFDbkMsU0FBUyxDQUFDLCtCQUErQjtBQUFBLElBQ3pDLE1BQU07QUFBQSxJQUNOLGFBQWEsRUFBRSxTQUFTLEVBQUUsY0FBYyxLQUFLLEVBQUU7QUFBQSxJQUMvQyxVQUFVO0FBQUEsTUFDUixVQUFVO0FBQUEsTUFDVixVQUFVLENBQUMsUUFBUSxRQUFRLE1BQU07QUFBQSxNQUNqQyxTQUFTO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDTixzQkFBc0IsU0FBUztBQUFBLEVBQ2pDO0FBQ0YsRUFBRTsiLAogICJuYW1lcyI6IFtdCn0K

packages/runtime/src/__tests__/middleware.test.ts

Lines changed: 0 additions & 209 deletions
Original file line numberDiff line numberDiff line change
@@ -220,213 +220,4 @@ describe("CopilotEndpoint middleware", () => {
220220
"Error running after request middleware"
221221
);
222222
});
223-
224-
it("processes request through webhook middleware URLs", async () => {
225-
const beforeURL = "https://hooks.example.com/before";
226-
const afterURL = "https://hooks.example.com/after";
227-
setupFetchMock(beforeURL, afterURL);
228-
229-
const runtime = dummyRuntime({
230-
beforeRequestMiddleware: beforeURL,
231-
afterRequestMiddleware: afterURL,
232-
});
233-
234-
const endpoint = createCopilotEndpoint({ runtime, basePath: "/" });
235-
const response = await endpoint.fetch(
236-
new Request("https://example.com/info", {
237-
headers: { foo: "bar" },
238-
method: "GET",
239-
})
240-
);
241-
242-
// Wait a bit more for async afterRequestMiddleware
243-
await new Promise((r) => setTimeout(r, 50));
244-
245-
expect(fetchMock).toHaveBeenCalledTimes(2);
246-
247-
// Assert payload for before-hook
248-
const beforeCall = fetchMock!.mock.calls[0];
249-
expect(beforeCall[0]).toBe(beforeURL);
250-
expect(beforeCall[1]).toBeDefined();
251-
expect(beforeCall[1]!.body).toBeDefined();
252-
const beforePayload = JSON.parse(beforeCall[1]!.body as string);
253-
expect(beforePayload).toMatchObject({
254-
method: "GET",
255-
path: "/info",
256-
query: "",
257-
headers: expect.objectContaining({ foo: "bar" }),
258-
});
259-
const headers = beforeCall[1]!.headers as Record<string, string>;
260-
expect(headers["X-CopilotKit-Webhook-Stage"]).toBe(
261-
WebhookStage.BeforeRequest
262-
);
263-
264-
// Assert payload for after-hook
265-
const afterCall = fetchMock!.mock.calls[1];
266-
expect(afterCall[0]).toBe(afterURL);
267-
expect(afterCall[1]).toBeDefined();
268-
expect(afterCall[1]!.body).toBeDefined();
269-
const afterPayload = JSON.parse(afterCall[1]!.body as string);
270-
expect(afterPayload).toMatchObject({
271-
status: 200,
272-
headers: expect.objectContaining({
273-
"content-type": "application/json",
274-
}),
275-
body: expect.any(String),
276-
});
277-
const afterHeaders = afterCall[1]!.headers as Record<string, string>;
278-
expect(afterHeaders["X-CopilotKit-Webhook-Stage"]).toBe(
279-
WebhookStage.AfterRequest
280-
);
281-
282-
// Response should still be successful
283-
expect(response.status).toBe(200);
284-
const body = await response.json();
285-
expect(body).toHaveProperty("version");
286-
});
287-
288-
it("applies webhook middleware request modifications", async () => {
289-
const beforeURL = "https://hooks.example.com/before";
290-
const afterURL = "https://hooks.example.com/after";
291-
setupFetchMock(beforeURL, afterURL);
292-
293-
const runtime = dummyRuntime({
294-
beforeRequestMiddleware: beforeURL,
295-
afterRequestMiddleware: afterURL,
296-
});
297-
298-
const endpoint = createCopilotEndpoint({ runtime, basePath: "/" });
299-
300-
// Make a POST request to info endpoint since it's simpler
301-
const response = await endpoint.fetch(
302-
new Request("https://example.com/info", {
303-
headers: { foo: "bar" },
304-
method: "GET",
305-
})
306-
);
307-
308-
// Should get a successful response
309-
expect(response.status).toBe(200);
310-
311-
// Wait for async afterRequestMiddleware
312-
await new Promise((r) => setTimeout(r, 100));
313-
314-
// The webhook middleware should have been called
315-
expect(fetchMock).toHaveBeenCalledTimes(2);
316-
});
317-
318-
it("handles webhook middleware timeout", async () => {
319-
const beforeURL = "https://hooks.example.com/before";
320-
originalFetch = global.fetch;
321-
322-
// Create an AbortController to simulate timeout
323-
let abortSignal: AbortSignal | undefined;
324-
fetchMock = vi
325-
.fn()
326-
.mockImplementation(async (_url: string, init?: RequestInit) => {
327-
abortSignal = init?.signal;
328-
// Wait for abort signal
329-
return new Promise<Response>((_resolve, reject) => {
330-
if (abortSignal) {
331-
abortSignal.addEventListener("abort", () => {
332-
reject(new Error("Aborted"));
333-
});
334-
}
335-
});
336-
});
337-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
338-
// @ts-ignore
339-
global.fetch = fetchMock as unknown as typeof fetch;
340-
341-
const runtime = dummyRuntime({
342-
beforeRequestMiddleware: beforeURL,
343-
});
344-
345-
const endpoint = createCopilotEndpoint({ runtime, basePath: "/" });
346-
347-
// Should return 502 on timeout
348-
const response = await endpoint.fetch(
349-
new Request("https://example.com/info")
350-
);
351-
352-
expect(response.status).toBe(502);
353-
354-
// Verify that the fetch was aborted due to timeout
355-
expect(abortSignal?.aborted).toBe(true);
356-
});
357-
358-
it("handles webhook middleware error responses", async () => {
359-
const beforeURL = "https://hooks.example.com/before";
360-
originalFetch = global.fetch;
361-
fetchMock = vi.fn().mockImplementation(async () => {
362-
return new Response("Bad request", { status: 400 });
363-
});
364-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
365-
// @ts-ignore
366-
global.fetch = fetchMock as unknown as typeof fetch;
367-
368-
const runtime = dummyRuntime({
369-
beforeRequestMiddleware: beforeURL,
370-
});
371-
372-
const endpoint = createCopilotEndpoint({ runtime, basePath: "/" });
373-
374-
// Should pass through error response
375-
const response = await endpoint.fetch(
376-
new Request("https://example.com/info")
377-
);
378-
379-
expect(response.status).toBe(400);
380-
expect(await response.text()).toBe("Bad request");
381-
});
382-
383-
it("handles webhook middleware server error", async () => {
384-
const beforeURL = "https://hooks.example.com/before";
385-
originalFetch = global.fetch;
386-
fetchMock = vi.fn().mockImplementation(async () => {
387-
return new Response("Server error", { status: 500 });
388-
});
389-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
390-
// @ts-ignore
391-
global.fetch = fetchMock as unknown as typeof fetch;
392-
393-
const runtime = dummyRuntime({
394-
beforeRequestMiddleware: beforeURL,
395-
});
396-
397-
const endpoint = createCopilotEndpoint({ runtime, basePath: "/" });
398-
399-
// Should return 502 on server error
400-
const response = await endpoint.fetch(
401-
new Request("https://example.com/info")
402-
);
403-
404-
expect(response.status).toBe(502);
405-
});
406-
407-
it("handles webhook middleware 204 response", async () => {
408-
const beforeURL = "https://hooks.example.com/before";
409-
originalFetch = global.fetch;
410-
fetchMock = vi.fn().mockImplementation(async () => {
411-
return new Response(null, { status: 204 });
412-
});
413-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
414-
// @ts-ignore
415-
global.fetch = fetchMock as unknown as typeof fetch;
416-
417-
const runtime = dummyRuntime({
418-
beforeRequestMiddleware: beforeURL,
419-
});
420-
421-
const endpoint = createCopilotEndpoint({ runtime, basePath: "/" });
422-
423-
// Should continue with original request on 204
424-
const response = await endpoint.fetch(
425-
new Request("https://example.com/info")
426-
);
427-
428-
expect(response.status).toBe(200);
429-
const body = await response.json();
430-
expect(body).toHaveProperty("version");
431-
});
432223
});

0 commit comments

Comments
 (0)