From d617d22b6db4040021865bf005907c3abef888e8 Mon Sep 17 00:00:00 2001 From: Brendan Chen Date: Tue, 21 Jan 2025 15:34:05 -0800 Subject: [PATCH] do the same for ordered stops --- test/generators.ts | 11 +++- ...UnoptimizedInMemoryRepositoryTests.test.ts | 60 +++++++++---------- 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/test/generators.ts b/test/generators.ts index dffaf3b..6efcef7 100644 --- a/test/generators.ts +++ b/test/generators.ts @@ -1,4 +1,4 @@ -import { IRoute, IShuttle, IStop, ISystem } from "../src/entities/entities"; +import { IOrderedStop, IRoute, IShuttle, IStop, ISystem } from "../src/entities/entities"; // Use a single set of generators in case any of the // interfaces change in the future @@ -33,4 +33,13 @@ export function generateMockStops(): IStop[] { { id: "st2", name: "Stop B", systemId: "sys2", coordinates: { latitude: 15, longitude: 25 } }, { id: "st3", name: "Stop C", systemId: "sys3", coordinates: { latitude: 30, longitude: 40 } }, ]; +} + +export function generateMockOrderedStops(): IOrderedStop[] { + return [ + { stopId: "st1", routeId: "r1", position: 1 }, + { stopId: "st1", routeId: "r2", position: 2 }, + { stopId: "st2", routeId: "r1", position: 3 }, + { stopId: "st2", routeId: "r2", position: 4 }, + ]; } \ No newline at end of file diff --git a/test/repositories/UnoptimizedInMemoryRepositoryTests.test.ts b/test/repositories/UnoptimizedInMemoryRepositoryTests.test.ts index eff0fbd..58e1e7d 100644 --- a/test/repositories/UnoptimizedInMemoryRepositoryTests.test.ts +++ b/test/repositories/UnoptimizedInMemoryRepositoryTests.test.ts @@ -1,15 +1,18 @@ import { beforeEach, describe, expect, test } from "@jest/globals"; import { UnoptimizedInMemoryRepository } from "../../src/repositories/UnoptimizedInMemoryRepository"; -import { generateMockRoutes, generateMockShuttles, generateMockStops, generateMockSystems } from "../generators"; +import { + generateMockOrderedStops, + generateMockRoutes, + generateMockShuttles, + generateMockStops, + generateMockSystems +} from "../generators"; // For repositories created in the future, reuse core testing // logic from here and differentiate setup (e.g. creating mocks) // Do this by creating a function which takes a GetterRepository // or GetterSetterRepository instance -// Full disclosure: most of this was generated by ChatGPT -// https://chatgpt.com/share/67902072-3adc-800d-bd22-06f7b3e6f4a4 - describe("UnoptimizedInMemoryRepository", () => { let repository: UnoptimizedInMemoryRepository; @@ -230,14 +233,15 @@ describe("UnoptimizedInMemoryRepository", () => { describe("getOrderedStopByRouteAndStopId", () => { test("gets an ordered stop by route ID and stop ID", async () => { - const mockOrderedStop = { - routeId: "r1", - stopId: "st1", - position: 1, - }; - await repository.addOrUpdateOrderedStop(mockOrderedStop); + const mockOrderedStops = generateMockOrderedStops(); + for (const orderedStop of mockOrderedStops) { + await repository.addOrUpdateOrderedStop(orderedStop); + } - const result = await repository.getOrderedStopByRouteAndStopId("r1", "st1"); + const mockOrderedStop = mockOrderedStops[0]; + const { routeId, stopId } = mockOrderedStop; + + const result = await repository.getOrderedStopByRouteAndStopId(routeId, stopId); expect(result).toEqual(mockOrderedStop); }); @@ -249,11 +253,7 @@ describe("UnoptimizedInMemoryRepository", () => { describe("getOrderedStopsByStopId", () => { test("gets all ordered stops for a specific stop ID", async () => { - const mockOrderedStops = [ - { stopId: "st1", routeId: "r1", position: 1 }, - { stopId: "st1", routeId: "r2", position: 2 }, - { stopId: "st2", routeId: "r3", position: 3 }, - ]; + const mockOrderedStops = generateMockOrderedStops(); for (const orderedStop of mockOrderedStops) { await repository.addOrUpdateOrderedStop(orderedStop); } @@ -270,11 +270,7 @@ describe("UnoptimizedInMemoryRepository", () => { describe("getOrderedStopsByRouteId", () => { test("gets all ordered stops for a specific route ID", async () => { - const mockOrderedStops = [ - { stopId: "st1", routeId: "r1", position: 1 }, - { stopId: "st2", routeId: "r1", position: 2 }, - { stopId: "st3", routeId: "r2", position: 3 }, - ]; + const mockOrderedStops = generateMockOrderedStops(); for (const orderedStop of mockOrderedStops) { await repository.addOrUpdateOrderedStop(orderedStop); } @@ -391,22 +387,25 @@ describe("UnoptimizedInMemoryRepository", () => { describe("addOrUpdateOrderedStop", () => { test("adds a new ordered stop if nonexistent", async () => { - const newOrderedStop = { routeId: "route1", stopId: "stop1", position: 1 }; + const mockOrderedStops = generateMockOrderedStops(); + const newOrderedStop = mockOrderedStops[0]; await repository.addOrUpdateOrderedStop(newOrderedStop); - const result = await repository.getOrderedStopsByRouteId("route1"); + const result = await repository.getOrderedStopsByRouteId(newOrderedStop.routeId); expect(result).toEqual([newOrderedStop]); }); test("updates an existing ordered stop if it exists", async () => { - const existingOrderedStop = { routeId: "route1", stopId: "stop1", position: 1 }; - const updatedOrderedStop = { routeId: "route1", stopId: "stop1", position: 2 }; + const mockOrderedStops = generateMockOrderedStops(); + const existingOrderedStop = mockOrderedStops[0]; + const updatedOrderedStop = structuredClone(existingOrderedStop); + updatedOrderedStop.position = 5; await repository.addOrUpdateOrderedStop(existingOrderedStop); await repository.addOrUpdateOrderedStop(updatedOrderedStop); - const result = await repository.getOrderedStopsByRouteId("route1"); + const result = await repository.getOrderedStopsByRouteId(existingOrderedStop.routeId); expect(result).toEqual([updatedOrderedStop]); }); }); @@ -489,11 +488,10 @@ describe("UnoptimizedInMemoryRepository", () => { describe("clearOrderedStopData", () => { test("clears all ordered stops from the repository", async () => { - const orderedStop1 = { routeId: "route1", stopId: "stop1", position: 1 }; - const orderedStop2 = { routeId: "route2", stopId: "stop2", position: 2 }; - - await repository.addOrUpdateOrderedStop(orderedStop1); - await repository.addOrUpdateOrderedStop(orderedStop2); + const mockOrderedStops = await generateMockOrderedStops(); + for (const system of mockOrderedStops) { + await repository.addOrUpdateOrderedStop(system); + } await repository.clearOrderedStopData();