summaryrefslogtreecommitdiff
path: root/Homework/cs5260/consumer/t/Loop.spec.ts
diff options
context:
space:
mode:
authorElizabeth Alexander Hunt <me@liz.coffee>2026-07-02 11:55:17 -0700
committerElizabeth Alexander Hunt <me@liz.coffee>2026-07-02 11:55:17 -0700
commit6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6 (patch)
treeed97e39ec77c5231ffd2c394493e68d00ddac5a4 /Homework/cs5260/consumer/t/Loop.spec.ts
downloadmisc-undergrad-main.tar.gz
misc-undergrad-main.zip
Diffstat (limited to 'Homework/cs5260/consumer/t/Loop.spec.ts')
-rw-r--r--Homework/cs5260/consumer/t/Loop.spec.ts48
1 files changed, 48 insertions, 0 deletions
diff --git a/Homework/cs5260/consumer/t/Loop.spec.ts b/Homework/cs5260/consumer/t/Loop.spec.ts
new file mode 100644
index 0000000..44ba517
--- /dev/null
+++ b/Homework/cs5260/consumer/t/Loop.spec.ts
@@ -0,0 +1,48 @@
+import { MainLoop } from "@/consumer/Loop";
+import { WidgetRequestProcessor } from "@/consumer/processor";
+import { WidgetRequestRetriever } from "@/consumer/retrievers";
+import { expect, mock, test } from "bun:test";
+import { VoidLogger } from "@/shared/t";
+import { WidgetRequest } from "@/shared/schema";
+import { randomUUID } from "node:crypto";
+
+test("main loop exits after max poll attempts", async () => {
+ const logger = new VoidLogger();
+
+ const maxPollAttempts = 3;
+ const timesToGiveData = 5;
+ let timesGivenData = 0;
+
+ const mockRetriever: WidgetRequestRetriever = {
+ refreshRequests: mock(async () => {
+ if (timesGivenData < timesToGiveData) {
+ timesGivenData++;
+ return [
+ WidgetRequest.parse({
+ type: "create",
+ owner: "simponic",
+ widgetId: randomUUID(),
+ requestId: randomUUID(),
+ }),
+ ];
+ }
+ return [];
+ }),
+ };
+ const mockProcessor: WidgetRequestProcessor = {
+ processRequest: mock(async (_r) => {}),
+ };
+
+ await MainLoop(
+ [mockRetriever],
+ [mockProcessor],
+ maxPollAttempts,
+ 200,
+ logger,
+ );
+
+ expect(mockRetriever.refreshRequests).toHaveBeenCalledTimes(
+ timesGivenData + maxPollAttempts,
+ );
+ expect(mockProcessor.processRequest).toHaveBeenCalledTimes(timesGivenData);
+});