From 0ed17cff6f420c8e8211304a73fb68a34b94b72c Mon Sep 17 00:00:00 2001 From: Brendan Chen Date: Tue, 28 Jan 2025 14:42:01 -0800 Subject: [PATCH] add test case for nextStop resolver for ordered stop --- .../OrderedStopResolverTests.test.ts | 63 ++++++++++++++++--- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/test/resolvers/OrderedStopResolverTests.test.ts b/test/resolvers/OrderedStopResolverTests.test.ts index ac603a1..073e582 100644 --- a/test/resolvers/OrderedStopResolverTests.test.ts +++ b/test/resolvers/OrderedStopResolverTests.test.ts @@ -1,23 +1,30 @@ -import { beforeEach, describe, it } from "@jest/globals"; +import { beforeEach, describe, expect, it } from "@jest/globals"; import { ApolloServer } from "@apollo/server"; import { UnoptimizedInMemoryRepository } from "../../src/repositories/UnoptimizedInMemoryRepository"; import { ServerContext } from "../../src/ServerContext"; import { setUpTestServer } from "../testHelpers/apolloSetupHelpers"; import { IRoute, IStop, ISystem } from "../../src/entities/entities"; -import { generateMockRoutes, generateMockShuttles, generateMockStops, generateMockSystems } from "../generators"; +import { + generateMockOrderedStops, + generateMockRoutes, + generateMockShuttles, + generateMockStops, + generateMockSystems +} from "../generators"; +import assert = require("node:assert"); describe("OrderedStopResolvers", () => { - let apolloServer: ApolloServer; + let testServer: ApolloServer; let repository: UnoptimizedInMemoryRepository; beforeEach(async () => { - apolloServer = setUpTestServer(); + testServer = setUpTestServer(); repository = new UnoptimizedInMemoryRepository(); }); let mockSystem: ISystem; let mockRoute: IRoute; - let mockStop: IStop; + let mockStops: IStop[]; beforeEach(async () => { const mockSystems = generateMockSystems(); @@ -30,10 +37,11 @@ describe("OrderedStopResolvers", () => { mockRoute.id = "1"; await repository.addOrUpdateRoute(mockRoute); - const mockStops = generateMockStops(); - mockStop = mockStops[0]; - mockStop.id = "1"; - await repository.addOrUpdateStop(mockStop); + mockStops = generateMockStops(); + + await Promise.all(mockStops.map(async (mockStop) => { + await repository.addOrUpdateStop(mockStop); + })); }); describe("nextStop", () => { @@ -53,7 +61,44 @@ describe("OrderedStopResolvers", () => { `; it("returns the next stop if it exists", async () => { + // Arrange + const orderedStops = generateMockOrderedStops(); + // Set up IDs and link stops together to work with the test query + orderedStops[0].routeId = mockRoute.id; + orderedStops[1].routeId = mockRoute.id; + + // Ensure that there is no duplication + orderedStops[0].stopId = mockStops[0].id; + orderedStops[1].stopId = mockStops[1].id; + + // Link the stops together + orderedStops[0].nextStop = orderedStops[1]; + orderedStops[1].previousStop = orderedStops[0]; + await repository.addOrUpdateOrderedStop(orderedStops[0]); + await repository.addOrUpdateOrderedStop(orderedStops[1]); + + // Act + const response = await testServer.executeOperation({ + query, + variables: { + systemId: mockSystem.id, + routeId: mockRoute.id, + stopId: orderedStops[0].stopId, + } + }, { + contextValue: { + repository, + } + }); + + // Assert + assert(response.body.kind === "single"); + expect(response.body.singleResult.errors).toBeUndefined(); + + const nextStop = (response.body.singleResult.data?.system as any).route.orderedStop.nextStop; + expect(nextStop.stopId).toEqual(orderedStops[1].stopId); + expect(nextStop.routeId).toEqual(orderedStops[1].routeId); }); it("returns null if there is no next stop in the repository", async () => {