diff options
| author | Elizabeth Alexander Hunt <me@liz.coffee> | 2026-07-02 11:55:17 -0700 |
|---|---|---|
| committer | Elizabeth Alexander Hunt <me@liz.coffee> | 2026-07-02 11:55:17 -0700 |
| commit | 6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6 (patch) | |
| tree | ed97e39ec77c5231ffd2c394493e68d00ddac5a4 /Homework/cs5260/widgetrequesthandler/t | |
| download | misc-undergrad-main.tar.gz misc-undergrad-main.zip | |
Diffstat (limited to 'Homework/cs5260/widgetrequesthandler/t')
| -rw-r--r-- | Homework/cs5260/widgetrequesthandler/t/handler.spec.ts | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/Homework/cs5260/widgetrequesthandler/t/handler.spec.ts b/Homework/cs5260/widgetrequesthandler/t/handler.spec.ts new file mode 100644 index 0000000..77513ee --- /dev/null +++ b/Homework/cs5260/widgetrequesthandler/t/handler.spec.ts @@ -0,0 +1,71 @@ +import { expect, test } from "bun:test"; +import { randomUUID } from "node:crypto"; +import { WidgetRequestHandler } from "@/widgetrequesthandler/handler"; +import { VoidLogger } from "@/shared/t"; +import { WidgetRequest, WidgetRequestT } from "@/shared/schema"; +import { + ProcessorResponse, + WidgetRequestProcessor, +} from "@/widgetrequesthandler/processors"; + +const testWidget = () => + WidgetRequest.parse({ + type: "create", + requestId: randomUUID(), + owner: "simponic", + widgetId: randomUUID(), + }); + +test("when invalid body then returns 400", async () => { + const logger = new VoidLogger(); + const mockProcessor = {} as unknown as WidgetRequestProcessor; + const request = new Request("http://localhost"); + + const handler = new WidgetRequestHandler(mockProcessor, logger); + const response = await handler.handleRequest(request); + expect(response.status).toBe(400); +}); + +test("when processor fails then returns 500", async () => { + const logger = new VoidLogger(); + const mockProcessor = { + async handle(_widgetRequest: WidgetRequestT) { + throw new Error("failure"); + }, + } as unknown as WidgetRequestProcessor; + + const newWidgetRequest = testWidget(); + const request = new Request("http://localhost", { + body: JSON.stringify({ event: newWidgetRequest }), + }); + + const handler = new WidgetRequestHandler(mockProcessor, logger); + const response = await handler.handleRequest(request); + const responseBody = (await response.json()) as ProcessorResponse; + + expect(response.status).toBe(500); + expect(responseBody.success).toBe(false); +}); + +test("when processor succeeds and correct widget request then returns 200", async () => { + const logger = new VoidLogger(); + const message = randomUUID(); + const mockProcessor = { + async handle(_widgetRequest: WidgetRequestT) { + return { success: true, message }; + }, + } as unknown as WidgetRequestProcessor; + + const newWidgetRequest = testWidget(); + const request = new Request("http://localhost", { + body: JSON.stringify({ event: newWidgetRequest }), + }); + + const handler = new WidgetRequestHandler(mockProcessor, logger); + const response = await handler.handleRequest(request); + const responseBody = (await response.json()) as ProcessorResponse; + + expect(response.status).toBe(200); + expect(responseBody.success).toBe(true); + expect(responseBody.message).toBe(message); +}); |
