summaryrefslogtreecommitdiff
path: root/Homework/cs5260/widgetrequesthandler/t/handler.spec.ts
diff options
context:
space:
mode:
Diffstat (limited to 'Homework/cs5260/widgetrequesthandler/t/handler.spec.ts')
-rw-r--r--Homework/cs5260/widgetrequesthandler/t/handler.spec.ts71
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);
+});