From 91ac397c75d4371d55f9f5add0558d0a16d0d7eb Mon Sep 17 00:00:00 2001 From: Brendan Chen Date: Tue, 21 Oct 2025 16:22:05 -0700 Subject: [PATCH] Reorganize tests based on functions --- ...izedInMemoryShuttleRepositoryTests.test.ts | 53 +++++++++++++------ 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/src/repositories/shuttle/__tests__/UnoptimizedInMemoryShuttleRepositoryTests.test.ts b/src/repositories/shuttle/__tests__/UnoptimizedInMemoryShuttleRepositoryTests.test.ts index cdb63ab..6c25c67 100644 --- a/src/repositories/shuttle/__tests__/UnoptimizedInMemoryShuttleRepositoryTests.test.ts +++ b/src/repositories/shuttle/__tests__/UnoptimizedInMemoryShuttleRepositoryTests.test.ts @@ -187,47 +187,66 @@ describe("UnoptimizedInMemoryRepository", () => { }); }); - describe("ETA update events", () => { + describe("on/addListener", () => { test("notifies listeners if etas have been added or changed", async () => { - const mockCallback = jest.fn(); // Jest mock function to simulate a listener - repository.on(ShuttleRepositoryEvent.ETA_UPDATED, mockCallback); + const mockListener = jest.fn(); + repository.on(ShuttleRepositoryEvent.ETA_UPDATED, mockListener); const mockEtas = generateMockEtas(); for (const eta of mockEtas) { - await repository.addOrUpdateEta(eta); // Trigger changes in ETAs + await repository.addOrUpdateEta(eta); } - expect(mockCallback).toHaveBeenCalledTimes(mockEtas.length); - expect(mockCallback).toHaveBeenCalledWith(mockEtas[0]); // First notification - expect(mockCallback).toHaveBeenCalledWith(mockEtas[mockEtas.length - 1]); // Last notification + expect(mockListener).toHaveBeenCalledTimes(mockEtas.length); + expect(mockListener).toHaveBeenCalledWith(mockEtas[0]); // First notification + expect(mockListener).toHaveBeenCalledWith(mockEtas[mockEtas.length - 1]); // Last notification }); + test("does not notify listener if removed", async () => { + const mockListener = jest.fn(); + repository.on(ShuttleRepositoryEvent.ETA_UPDATED, mockListener); + + const mockEtas = generateMockEtas(); + + repository.off(ShuttleRepositoryEvent.ETA_UPDATED, mockListener); + await repository.addOrUpdateEta(mockEtas[0]); + expect(mockListener).toHaveBeenCalledTimes(1); + }); + }); + + describe("off/removeListener", () => { test("stops notifying listeners after etas have stopped changing", async () => { - const mockCallback = jest.fn(); // Jest mock function to simulate a listener - repository.on(ShuttleRepositoryEvent.ETA_UPDATED, mockCallback); + const mockListener = jest.fn(); // Jest mock function to simulate a listener + repository.on(ShuttleRepositoryEvent.ETA_UPDATED, mockListener); const mockEtas = generateMockEtas(); await repository.addOrUpdateEta(mockEtas[0]); - repository.off(ShuttleRepositoryEvent.ETA_UPDATED, mockCallback); + repository.off(ShuttleRepositoryEvent.ETA_UPDATED, mockListener); await repository.addOrUpdateEta(mockEtas[mockEtas.length - 1]); - expect(mockCallback).toHaveBeenCalledTimes(1); - expect(mockCallback).toHaveBeenCalledWith(mockEtas[0]); // First notification - expect(mockCallback).not.toHaveBeenCalledWith(mockEtas[mockEtas.length - 1]); // Last notification + expect(mockListener).toHaveBeenCalledTimes(1); + expect(mockListener).toHaveBeenCalledWith(mockEtas[0]); // First notification + expect(mockListener).not.toHaveBeenCalledWith(mockEtas[mockEtas.length - 1]); // Last notification }); - test("does nothing if the listener doesn't exist", async () => { - const mockCallback = jest.fn(); - repository.on(ShuttleRepositoryEvent.ETA_UPDATED, mockCallback); + test("does not remove listener if wrong reference", async () => { + const mockListener = jest.fn(); + repository.on(ShuttleRepositoryEvent.ETA_UPDATED, mockListener); const mockEtas = generateMockEtas(); repository.off(ShuttleRepositoryEvent.ETA_UPDATED, () => {}); + await repository.addOrUpdateEta(mockEtas[0]); - expect(mockCallback).toHaveBeenCalledTimes(1); + + expect(mockListener).toHaveBeenCalledTimes(1); + expect(mockListener).toHaveBeenCalledWith(mockEtas[0]); }); + }) + + describe("ETA update events", () => { }); describe("getOrderedStopByRouteAndStopId", () => {