diff --git a/test/resolvers/QueryResolverTests.test.ts b/test/resolvers/QueryResolverTests.test.ts index b74cf67..da86e77 100644 --- a/test/resolvers/QueryResolverTests.test.ts +++ b/test/resolvers/QueryResolverTests.test.ts @@ -1,28 +1,18 @@ -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 { describe, expect, it } from "@jest/globals"; import { generateMockSystems } from "../generators"; -import { setUpTestServer } from "../testHelpers/apolloSetupHelpers"; +import { setupTestServerContext } from "../testHelpers/apolloSetupHelpers"; import assert = require("node:assert"); // See Apollo documentation for integration test guide // https://www.apollographql.com/docs/apollo-server/testing/testing describe("QueryResolvers", () => { - let testServer: ApolloServer; - let repository: UnoptimizedInMemoryRepository; - - beforeEach(async () => { - testServer = setUpTestServer(); - - repository = new UnoptimizedInMemoryRepository(); - }); + const context = setupTestServerContext(); async function addMockSystems() { const systems = generateMockSystems(); await Promise.all(systems.map(async (system) => { - await repository.addOrUpdateSystem(system); + await context.repository.addOrUpdateSystem(system); })); return systems; } @@ -40,16 +30,17 @@ describe("QueryResolvers", () => { } `; - const response = await testServer.executeOperation({ + const response = await context.testServer.executeOperation({ query, }, { contextValue: { - repository, + repository: context.repository, }, }); assert(response.body.kind === "single"); expect(response.body.singleResult.errors).toBeUndefined(); + expect(response.body.singleResult.data?.systems).toHaveLength(systems.length); }); }); @@ -68,14 +59,14 @@ describe("QueryResolvers", () => { const systems = await addMockSystems(); const systemToGet = systems[1]; - const response = await testServer.executeOperation({ + const response = await context.testServer.executeOperation({ query, variables: { id: systemToGet.id, } }, { contextValue: { - repository, + repository: context.repository, } }); @@ -85,14 +76,14 @@ describe("QueryResolvers", () => { }); it("returns null if there is no system", async () => { - const response = await testServer.executeOperation({ + const response = await context.testServer.executeOperation({ query, variables: { id: "nonexistent-id", } }, { contextValue: { - repository, + repository: context.repository, } }); @@ -101,4 +92,4 @@ describe("QueryResolvers", () => { expect(response.body.singleResult.data?.system).toBeNull(); }); }); -}); +}); \ No newline at end of file diff --git a/test/resolvers/RouteResolverTests.test.ts b/test/resolvers/RouteResolverTests.test.ts index 4dc01d1..074129a 100644 --- a/test/resolvers/RouteResolverTests.test.ts +++ b/test/resolvers/RouteResolverTests.test.ts @@ -1,8 +1,5 @@ import { beforeEach, describe, expect, it } from "@jest/globals"; -import { ServerContext } from "../../src/ServerContext"; -import { UnoptimizedInMemoryRepository } from "../../src/repositories/UnoptimizedInMemoryRepository"; -import { setUpTestServer } from "../testHelpers/apolloSetupHelpers"; -import { ApolloServer } from "@apollo/server"; +import { setupTestServerContext } from "../testHelpers/apolloSetupHelpers"; import { addMockRouteToRepository, addMockStopToRepository, @@ -13,24 +10,18 @@ import { IRoute, IStop, ISystem } from "../../src/entities/entities"; import assert = require("node:assert"); describe("RouteResolvers", () => { - let testServer: ApolloServer; - let repository: UnoptimizedInMemoryRepository; - - beforeEach(async () => { - testServer = setUpTestServer(); - repository = new UnoptimizedInMemoryRepository(); - }); + const context = setupTestServerContext(); let mockSystem: ISystem; let mockRoute: IRoute; let mockStop: IStop; beforeEach(async () => { - mockSystem = await addMockSystemToRepository(repository); + mockSystem = await addMockSystemToRepository(context.repository); const systemId = mockSystem.id; - mockRoute = await addMockRouteToRepository(repository, systemId); - mockStop = await addMockStopToRepository(repository, systemId); + mockRoute = await addMockRouteToRepository(context.repository, systemId); + mockStop = await addMockStopToRepository(context.repository, systemId); }); @@ -49,7 +40,7 @@ describe("RouteResolvers", () => { } `; - return await testServer.executeOperation({ + return await context.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -57,7 +48,7 @@ describe("RouteResolvers", () => { }, }, { contextValue: { - repository, + repository: context.repository, } }); } @@ -67,13 +58,14 @@ describe("RouteResolvers", () => { const expectedShuttle = expectedShuttles[0]; expectedShuttle.systemId = mockSystem.id; expectedShuttle.routeId = mockRoute.id; - await repository.addOrUpdateShuttle(expectedShuttle); + await context.repository.addOrUpdateShuttle(expectedShuttle); const response = await getResponseForShuttlesQuery(); assert(response.body.kind === "single"); expect(response.body.singleResult.errors).toBeUndefined() - const shuttle = (response.body.singleResult.data as any).system.route.shuttles[0]; + const shuttle = (response.body.singleResult.data as + any).system.route.shuttles[0]; expect(shuttle.id).toEqual(expectedShuttle.id); expect(shuttle.name).toEqual(expectedShuttle.name); }); @@ -83,7 +75,8 @@ describe("RouteResolvers", () => { assert(response.body.kind === "single"); expect(response.body.singleResult.errors).toBeUndefined() - const shuttles = (response.body.singleResult.data as any).system.route.shuttles; + const shuttles = (response.body.singleResult.data as + any).system.route.shuttles; expect(shuttles.length).toEqual(0); }); }); @@ -102,7 +95,7 @@ describe("RouteResolvers", () => { } `; - return await testServer.executeOperation({ + return await context.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -111,7 +104,7 @@ describe("RouteResolvers", () => { } }, { contextValue: { - repository, + repository: context.repository, } }); } @@ -121,14 +114,15 @@ describe("RouteResolvers", () => { const expectedOrderedStop = orderedStops[0]; expectedOrderedStop.stopId = mockStop.id; expectedOrderedStop.routeId = mockRoute.id; - await repository.addOrUpdateOrderedStop(expectedOrderedStop); + await context.repository.addOrUpdateOrderedStop(expectedOrderedStop); const response = await getResponseForOrderedStopQuery(); assert(response.body.kind === "single"); expect(response.body.singleResult.errors).toBeUndefined(); - const orderedStop = (response.body.singleResult.data as any).system.route.orderedStop; + const orderedStop = (response.body.singleResult.data as + any).system.route.orderedStop; expect(orderedStop.stopId).toEqual(expectedOrderedStop.stopId); }); @@ -137,17 +131,18 @@ describe("RouteResolvers", () => { const expectedOrderedStop = orderedStops[0]; expectedOrderedStop.stopId = mockStop.id; expectedOrderedStop.routeId = mockRoute.id; - await repository.addOrUpdateOrderedStop(expectedOrderedStop); + await context.repository.addOrUpdateOrderedStop(expectedOrderedStop); - await repository.removeStopIfExists(mockStop.id); + await context.repository.removeStopIfExists(mockStop.id); const response = await getResponseForOrderedStopQuery(); assert(response.body.kind === "single"); expect(response.body.singleResult.errors).toBeUndefined(); - const orderedStop = (response.body.singleResult.data as any).system.route.orderedStop; + const orderedStop = (response.body.singleResult.data as + any).system.route.orderedStop; expect(orderedStop).toBeNull(); }); }); -}); +}); \ No newline at end of file diff --git a/test/resolvers/ShuttleResolverTests.test.ts b/test/resolvers/ShuttleResolverTests.test.ts index 37166c0..f00a9bf 100644 --- a/test/resolvers/ShuttleResolverTests.test.ts +++ b/test/resolvers/ShuttleResolverTests.test.ts @@ -1,29 +1,21 @@ 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 { generateMockEtas, generateMockRoutes } from "../generators"; import { IShuttle, ISystem } from "../../src/entities/entities"; -import { setUpTestServer } from "../testHelpers/apolloSetupHelpers"; +import { setupTestServerContext } from "../testHelpers/apolloSetupHelpers"; import { addMockShuttleToRepository, addMockSystemToRepository } from "../testHelpers/repositorySetupHelpers"; import assert = require("node:assert"); describe("ShuttleResolvers", () => { - let testServer: ApolloServer - let repository: UnoptimizedInMemoryRepository; - - beforeEach(async () => { - testServer = setUpTestServer(); - repository = new UnoptimizedInMemoryRepository(); - }); + const context = setupTestServerContext(); let mockSystem: ISystem; let mockShuttle: IShuttle; beforeEach(async () => { - mockSystem = await addMockSystemToRepository(repository); - mockShuttle = await addMockShuttleToRepository(repository, mockSystem.id); + mockSystem = await addMockSystemToRepository(context.repository); + mockShuttle = await addMockShuttleToRepository(context.repository, + mockSystem.id); }); @@ -31,7 +23,7 @@ describe("ShuttleResolvers", () => { const etas = generateMockEtas(); await Promise.all(etas.map(async (eta) => { eta.shuttleId = shuttleId; - await repository.addOrUpdateEta(eta); + await context.repository.addOrUpdateEta(eta); })); return etas; } @@ -55,7 +47,7 @@ describe("ShuttleResolvers", () => { const mockEta = etas[1]; // Act - const response = await testServer.executeOperation({ + const response = await context.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -64,18 +56,19 @@ describe("ShuttleResolvers", () => { }, }, { contextValue: { - repository, + repository: context.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); + 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({ + const response = await context.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -84,14 +77,15 @@ describe("ShuttleResolvers", () => { } }, { contextValue: { - repository, + repository: context.repository, } }); // Assert assert(response.body.kind === "single"); expect(response.body.singleResult.errors).toBeUndefined(); - expect((response.body.singleResult.data as any).system.shuttle.eta).toBeNull(); + expect((response.body.singleResult.data as + any).system.shuttle.eta).toBeNull(); }); }); @@ -112,7 +106,7 @@ describe("ShuttleResolvers", () => { it("returns associated ETAs if they exist for the shuttle", async () => { const etas = await addMockEtas(mockShuttle.id); - const response = await testServer.executeOperation({ + const response = await context.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -120,17 +114,18 @@ describe("ShuttleResolvers", () => { }, }, { contextValue: { - repository, + repository: context.repository, } }); assert(response.body.kind === "single"); expect(response.body.singleResult.errors).toBeUndefined(); - expect((response.body.singleResult.data as any).system.shuttle.etas).toHaveLength(etas.length); + expect((response.body.singleResult.data as + any).system.shuttle.etas).toHaveLength(etas.length); }); it("returns empty array if no ETAs exist", async () => { - const response = await testServer.executeOperation({ + const response = await context.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -138,17 +133,17 @@ describe("ShuttleResolvers", () => { }, }, { contextValue: { - repository, + repository: context.repository, } }); assert(response.body.kind === "single"); expect(response.body.singleResult.errors).toBeUndefined(); - expect((response.body.singleResult.data as any).system.shuttle.etas).toHaveLength(0); + expect((response.body.singleResult.data as + any).system.shuttle.etas).toHaveLength(0); }); }); - describe("route", () => { const query = ` query GetShuttleRoute($systemId: ID!, $shuttleId: ID!) { @@ -169,7 +164,7 @@ describe("ShuttleResolvers", () => { ` async function getResponseForQuery() { - return await testServer.executeOperation({ + return await context.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -177,14 +172,14 @@ describe("ShuttleResolvers", () => { } }, { contextValue: { - repository, + repository: context.repository, } }); } it("returns the route if it exists", async () => { const mockRoute = generateMockRoutes()[0]; - await repository.addOrUpdateRoute(mockRoute); + await context.repository.addOrUpdateRoute(mockRoute); const response = await getResponseForQuery(); @@ -200,5 +195,6 @@ describe("ShuttleResolvers", () => { expect(response.body.singleResult.errors).toBeUndefined(); expect((response.body.singleResult.data as any).system.shuttle.route).toBeNull(); }); + }); }); \ No newline at end of file diff --git a/test/resolvers/StopResolverTests.test.ts b/test/resolvers/StopResolverTests.test.ts index ae23676..79c0ffa 100644 --- a/test/resolvers/StopResolverTests.test.ts +++ b/test/resolvers/StopResolverTests.test.ts @@ -1,32 +1,23 @@ 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 { setUpTestServer } from "../testHelpers/apolloSetupHelpers"; +import { setupTestServerContext } from "../testHelpers/apolloSetupHelpers"; import { generateMockEtas, generateMockOrderedStops } from "../generators"; import { IStop, ISystem } from "../../src/entities/entities"; import { addMockStopToRepository, addMockSystemToRepository } from "../testHelpers/repositorySetupHelpers"; import assert = require("node:assert"); describe("StopResolvers", () => { - let testServer: ApolloServer; - let repository: UnoptimizedInMemoryRepository; - - beforeEach(() => { - testServer = setUpTestServer(); - repository = new UnoptimizedInMemoryRepository(); - }); + const context = setupTestServerContext(); let mockStop: IStop; let mockSystem: ISystem; beforeEach(async () => { - mockSystem = await addMockSystemToRepository(repository); - mockStop = await addMockStopToRepository(repository, mockSystem.id); + mockSystem = await addMockSystemToRepository(context.repository); + mockStop = await addMockStopToRepository(context.repository, mockSystem.id); }) async function getResponseForQuery(query: string) { - return await testServer.executeOperation({ + return await context.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -34,7 +25,7 @@ describe("StopResolvers", () => { }, }, { contextValue: { - repository, + repository: context.repository, } }); } @@ -59,7 +50,7 @@ describe("StopResolvers", () => { mockOrderedStops = mockOrderedStops.filter((orderedStop) => orderedStop.stopId === mockOrderedStops[0].stopId); await Promise.all(mockOrderedStops.map(async orderedStop => { orderedStop.stopId = mockStop.id; - await repository.addOrUpdateOrderedStop(orderedStop); + await context.repository.addOrUpdateOrderedStop(orderedStop); })); const response = await getResponseForQuery(query); @@ -96,7 +87,7 @@ describe("StopResolvers", () => { mockEtas = mockEtas.filter((eta) => eta.stopId === mockEtas[0].stopId); await Promise.all(mockEtas.map(async eta => { eta.stopId = mockStop.id; - await repository.addOrUpdateEta(eta); + await context.repository.addOrUpdateEta(eta); })); const response = await getResponseForQuery(query); diff --git a/test/resolvers/SystemResolverTests.test.ts b/test/resolvers/SystemResolverTests.test.ts index f06501a..c0473d6 100644 --- a/test/resolvers/SystemResolverTests.test.ts +++ b/test/resolvers/SystemResolverTests.test.ts @@ -1,8 +1,5 @@ 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 { setUpTestServer } from "../testHelpers/apolloSetupHelpers"; +import { setupTestServerContext } from "../testHelpers/apolloSetupHelpers"; import { generateMockRoutes, generateMockShuttles, generateMockStops } from "../generators"; import { addMockRouteToRepository, @@ -14,30 +11,24 @@ import { ISystem } from "../../src/entities/entities"; import assert = require("node:assert"); describe("SystemResolvers", () => { - let testServer: ApolloServer; - let repository: UnoptimizedInMemoryRepository; - - beforeEach(async () => { - testServer = setUpTestServer(); - repository = new UnoptimizedInMemoryRepository(); - }); + const context = setupTestServerContext(); let mockSystem: ISystem; beforeEach(async () => { - mockSystem = await addMockSystemToRepository(repository); + mockSystem = await addMockSystemToRepository(context.repository); }); // TODO: Consolidate these into one single method taking an object async function getResponseFromQueryNeedingSystemId(query: string) { - return await testServer.executeOperation({ + return await context.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, }, }, { contextValue: { - repository + repository: context.repository }, }); } @@ -58,7 +49,7 @@ describe("SystemResolvers", () => { const expectedRoutes = generateMockRoutes(); await Promise.all(expectedRoutes.map(async (route) => { route.systemId = mockSystem.id; - await repository.addOrUpdateRoute(route); + await context.repository.addOrUpdateRoute(route); })); const response = await getResponseFromQueryNeedingSystemId(query); @@ -86,7 +77,7 @@ describe("SystemResolvers", () => { const expectedStops = generateMockStops(); await Promise.all(expectedStops.map(async (stop) => { stop.systemId = mockSystem.id; - await repository.addOrUpdateStop(stop); + await context.repository.addOrUpdateStop(stop); })); const response = await getResponseFromQueryNeedingSystemId(query); @@ -111,7 +102,7 @@ describe("SystemResolvers", () => { } `; - return await testServer.executeOperation({ + return await context.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -119,13 +110,13 @@ describe("SystemResolvers", () => { }, }, { contextValue: { - repository, + repository: context.repository, } }); } it("gets the stop with the correct id", async () => { - const mockStop = await addMockStopToRepository(repository, mockSystem.id); + const mockStop = await addMockStopToRepository(context.repository, mockSystem.id); const response = await getResponseForStopQuery(mockStop.id); @@ -141,9 +132,9 @@ describe("SystemResolvers", () => { ...mockSystem, id: "2", } - await repository.addOrUpdateSystem(updatedSystem); + await context.repository.addOrUpdateSystem(updatedSystem); - const mockStop = await addMockStopToRepository(repository, updatedSystem.id); + const mockStop = await addMockStopToRepository(context.repository, updatedSystem.id); const response = await getResponseForStopQuery(mockStop.id); @@ -178,7 +169,7 @@ describe("SystemResolvers", () => { } `; - return await testServer.executeOperation({ + return await context.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -186,13 +177,13 @@ describe("SystemResolvers", () => { }, }, { contextValue: { - repository, + repository: context.repository, } }); } it("gets the route with the correct id", async () => { - const mockRoute = await addMockRouteToRepository(repository, mockSystem.id); + const mockRoute = await addMockRouteToRepository(context.repository, mockSystem.id); const response = await getResponseForRouteQuery(mockRoute.id); @@ -209,9 +200,9 @@ describe("SystemResolvers", () => { ...mockSystem, id: "2", } - await repository.addOrUpdateSystem(updatedSystem); + await context.repository.addOrUpdateSystem(updatedSystem); - const mockRoute = await addMockRouteToRepository(repository, updatedSystem.id); + const mockRoute = await addMockRouteToRepository(context.repository, updatedSystem.id); const response = await getResponseForRouteQuery(mockRoute.id); @@ -246,7 +237,7 @@ describe("SystemResolvers", () => { } `; - return await testServer.executeOperation({ + return await context.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -254,13 +245,13 @@ describe("SystemResolvers", () => { } }, { contextValue: { - repository, + repository: context.repository, } }); } it("gets the shuttle with the correct id", async () => { - const mockShuttle = await addMockShuttleToRepository(repository, mockSystem.id); + const mockShuttle = await addMockShuttleToRepository(context.repository, mockSystem.id); const response = await getResponseForShuttleQuery(mockShuttle.id); @@ -276,9 +267,9 @@ describe("SystemResolvers", () => { ...mockSystem, id: "2", } - await repository.addOrUpdateSystem(updatedSystem); + await context.repository.addOrUpdateSystem(updatedSystem); - const mockShuttle = await addMockShuttleToRepository(repository, updatedSystem.id); + const mockShuttle = await addMockShuttleToRepository(context.repository, updatedSystem.id); const response = await getResponseForShuttleQuery(mockShuttle.id); @@ -316,7 +307,7 @@ describe("SystemResolvers", () => { const expectedShuttles = generateMockShuttles(); await Promise.all(expectedShuttles.map(async (shuttle) => { shuttle.systemId = mockSystem.id; - await repository.addOrUpdateShuttle(shuttle); + await context.repository.addOrUpdateShuttle(shuttle); })); const response = await getResponseFromQueryNeedingSystemId(query);