do the same for ordered stops

This commit is contained in:
2025-01-21 15:34:05 -08:00
parent 7b3f7e5960
commit d617d22b6d
2 changed files with 39 additions and 32 deletions

View File

@@ -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 // Use a single set of generators in case any of the
// interfaces change in the future // 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: "st2", name: "Stop B", systemId: "sys2", coordinates: { latitude: 15, longitude: 25 } },
{ id: "st3", name: "Stop C", systemId: "sys3", coordinates: { latitude: 30, longitude: 40 } }, { 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 },
];
} }

View File

@@ -1,15 +1,18 @@
import { beforeEach, describe, expect, test } from "@jest/globals"; import { beforeEach, describe, expect, test } from "@jest/globals";
import { UnoptimizedInMemoryRepository } from "../../src/repositories/UnoptimizedInMemoryRepository"; 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 // For repositories created in the future, reuse core testing
// logic from here and differentiate setup (e.g. creating mocks) // logic from here and differentiate setup (e.g. creating mocks)
// Do this by creating a function which takes a GetterRepository // Do this by creating a function which takes a GetterRepository
// or GetterSetterRepository instance // or GetterSetterRepository instance
// Full disclosure: most of this was generated by ChatGPT
// https://chatgpt.com/share/67902072-3adc-800d-bd22-06f7b3e6f4a4
describe("UnoptimizedInMemoryRepository", () => { describe("UnoptimizedInMemoryRepository", () => {
let repository: UnoptimizedInMemoryRepository; let repository: UnoptimizedInMemoryRepository;
@@ -230,14 +233,15 @@ describe("UnoptimizedInMemoryRepository", () => {
describe("getOrderedStopByRouteAndStopId", () => { describe("getOrderedStopByRouteAndStopId", () => {
test("gets an ordered stop by route ID and stop ID", async () => { test("gets an ordered stop by route ID and stop ID", async () => {
const mockOrderedStop = { const mockOrderedStops = generateMockOrderedStops();
routeId: "r1", for (const orderedStop of mockOrderedStops) {
stopId: "st1", await repository.addOrUpdateOrderedStop(orderedStop);
position: 1, }
};
await repository.addOrUpdateOrderedStop(mockOrderedStop);
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); expect(result).toEqual(mockOrderedStop);
}); });
@@ -249,11 +253,7 @@ describe("UnoptimizedInMemoryRepository", () => {
describe("getOrderedStopsByStopId", () => { describe("getOrderedStopsByStopId", () => {
test("gets all ordered stops for a specific stop ID", async () => { test("gets all ordered stops for a specific stop ID", async () => {
const mockOrderedStops = [ const mockOrderedStops = generateMockOrderedStops();
{ stopId: "st1", routeId: "r1", position: 1 },
{ stopId: "st1", routeId: "r2", position: 2 },
{ stopId: "st2", routeId: "r3", position: 3 },
];
for (const orderedStop of mockOrderedStops) { for (const orderedStop of mockOrderedStops) {
await repository.addOrUpdateOrderedStop(orderedStop); await repository.addOrUpdateOrderedStop(orderedStop);
} }
@@ -270,11 +270,7 @@ describe("UnoptimizedInMemoryRepository", () => {
describe("getOrderedStopsByRouteId", () => { describe("getOrderedStopsByRouteId", () => {
test("gets all ordered stops for a specific route ID", async () => { test("gets all ordered stops for a specific route ID", async () => {
const mockOrderedStops = [ const mockOrderedStops = generateMockOrderedStops();
{ stopId: "st1", routeId: "r1", position: 1 },
{ stopId: "st2", routeId: "r1", position: 2 },
{ stopId: "st3", routeId: "r2", position: 3 },
];
for (const orderedStop of mockOrderedStops) { for (const orderedStop of mockOrderedStops) {
await repository.addOrUpdateOrderedStop(orderedStop); await repository.addOrUpdateOrderedStop(orderedStop);
} }
@@ -391,22 +387,25 @@ describe("UnoptimizedInMemoryRepository", () => {
describe("addOrUpdateOrderedStop", () => { describe("addOrUpdateOrderedStop", () => {
test("adds a new ordered stop if nonexistent", async () => { 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); await repository.addOrUpdateOrderedStop(newOrderedStop);
const result = await repository.getOrderedStopsByRouteId("route1"); const result = await repository.getOrderedStopsByRouteId(newOrderedStop.routeId);
expect(result).toEqual([newOrderedStop]); expect(result).toEqual([newOrderedStop]);
}); });
test("updates an existing ordered stop if it exists", async () => { test("updates an existing ordered stop if it exists", async () => {
const existingOrderedStop = { routeId: "route1", stopId: "stop1", position: 1 }; const mockOrderedStops = generateMockOrderedStops();
const updatedOrderedStop = { routeId: "route1", stopId: "stop1", position: 2 }; const existingOrderedStop = mockOrderedStops[0];
const updatedOrderedStop = structuredClone(existingOrderedStop);
updatedOrderedStop.position = 5;
await repository.addOrUpdateOrderedStop(existingOrderedStop); await repository.addOrUpdateOrderedStop(existingOrderedStop);
await repository.addOrUpdateOrderedStop(updatedOrderedStop); await repository.addOrUpdateOrderedStop(updatedOrderedStop);
const result = await repository.getOrderedStopsByRouteId("route1"); const result = await repository.getOrderedStopsByRouteId(existingOrderedStop.routeId);
expect(result).toEqual([updatedOrderedStop]); expect(result).toEqual([updatedOrderedStop]);
}); });
}); });
@@ -489,11 +488,10 @@ describe("UnoptimizedInMemoryRepository", () => {
describe("clearOrderedStopData", () => { describe("clearOrderedStopData", () => {
test("clears all ordered stops from the repository", async () => { test("clears all ordered stops from the repository", async () => {
const orderedStop1 = { routeId: "route1", stopId: "stop1", position: 1 }; const mockOrderedStops = await generateMockOrderedStops();
const orderedStop2 = { routeId: "route2", stopId: "stop2", position: 2 }; for (const system of mockOrderedStops) {
await repository.addOrUpdateOrderedStop(system);
await repository.addOrUpdateOrderedStop(orderedStop1); }
await repository.addOrUpdateOrderedStop(orderedStop2);
await repository.clearOrderedStopData(); await repository.clearOrderedStopData();