From 4cddacb46453089be0334570bf611bf9cc32f647 Mon Sep 17 00:00:00 2001 From: Brendan Chen Date: Thu, 23 Jan 2025 14:45:49 -0800 Subject: [PATCH] add tests for eta resolver on shuttle resolvers object --- test/resolvers/ShuttleResolverTests.test.ts | 104 ++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 test/resolvers/ShuttleResolverTests.test.ts diff --git a/test/resolvers/ShuttleResolverTests.test.ts b/test/resolvers/ShuttleResolverTests.test.ts new file mode 100644 index 0000000..7e20fa8 --- /dev/null +++ b/test/resolvers/ShuttleResolverTests.test.ts @@ -0,0 +1,104 @@ +import { beforeEach, describe, expect, it } from "@jest/globals"; +import { ApolloServer } from "@apollo/server"; +import { ServerContext } from "../../src/ServerContext"; +import { UnoptimizedInMemoryRepository } from "../../src/repositories/UnoptimizedInMemoryRepository"; +import { readFileSync } from "fs"; +import { MergedResolvers } from "../../src/MergedResolvers"; +import { generateMockEtas, generateMockShuttles, generateMockSystems } from "../generators"; +import { IShuttle, ISystem } from "../../src/entities/entities"; +import assert = require("node:assert"); + +describe("ShuttleResolvers", () => { + let testServer: ApolloServer + let repository: UnoptimizedInMemoryRepository; + + beforeEach(async () => { + const typeDefs = readFileSync("./schema.graphqls", "utf8"); + testServer = new ApolloServer({ + typeDefs, + resolvers: MergedResolvers, + }); + + repository = new UnoptimizedInMemoryRepository(); + }); + + describe("eta", () => { + const query = ` + query GetShuttleETAs($systemId: ID!, $shuttleId: ID!, $stopId: ID!) + { + system(id: $systemId) { + shuttle(id: $shuttleId) { + eta(forStopId: $stopId) { + secondsRemaining + } + } + } + } + ` + let mockSystem: ISystem; + let mockShuttle: IShuttle; + + beforeEach(async () => { + // Arrange + const mockSystems = generateMockSystems(); + mockSystem = mockSystems[0]; + mockSystem.id = "1"; + await repository.addOrUpdateSystem(mockSystem); + + const mockShuttles = generateMockShuttles(); + mockShuttle = mockShuttles[0]; + mockShuttle.systemId = mockSystem.id; + mockShuttle.id = "1"; + await repository.addOrUpdateShuttle(mockShuttle); + }); + + it("returns ETA data for stop ID if exists", async () => { + const etas = generateMockEtas(); + await Promise.all(etas.map(async (eta) => { + eta.shuttleId = mockShuttle.id; + await repository.addOrUpdateEta(eta); + })); + + const mockEta = etas[1]; + + // Act + const response = await testServer.executeOperation({ + query, + variables: { + systemId: mockSystem.id, + shuttleId: mockShuttle.id, + stopId: mockEta.stopId, + }, + }, { + contextValue: { + repository, + }, + }); + + // Assert + assert(response.body.kind === "single"); + expect(response.body.singleResult.errors).toBeUndefined(); + expect((response.body.singleResult.data as any).system.shuttle.eta.secondsRemaining).toEqual(mockEta.secondsRemaining); + }); + + it("returns null if it doesn't exist", async () => { + const response = await testServer.executeOperation({ + query, + variables: { + systemId: mockSystem.id, + shuttleId: mockShuttle.id, + stopId: "nonexistent-stop", + } + }, { + contextValue: { + repository, + } + }); + + // Assert + assert(response.body.kind === "single"); + expect(response.body.singleResult.errors).toBeUndefined(); + expect((response.body.singleResult.data as any).system.shuttle.eta).toBeNull(); + }); + }); +}); \ No newline at end of file