diff --git a/test/resolvers/EtaResolverTests.test.ts b/test/resolvers/EtaResolverTests.test.ts index 73c9770..98c2e52 100644 --- a/test/resolvers/EtaResolverTests.test.ts +++ b/test/resolvers/EtaResolverTests.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from "@jest/globals"; -import { setupTestServerContext } from "../testHelpers/apolloTestServerHelpers"; +import { setupTestServerContext, setupTestServerHolder } from "../testHelpers/apolloTestServerHelpers"; import { IEta, IShuttle, IStop, ISystem } from "../../src/entities/entities"; import { addMockEtaToRepository, addMockShuttleToRepository, @@ -9,6 +9,7 @@ import { import assert = require("node:assert"); describe("EtaResolvers", () => { + const holder = setupTestServerHolder(); const context = setupTestServerContext(); let mockSystem: ISystem; @@ -24,7 +25,7 @@ describe("EtaResolvers", () => { }); async function getResponseForEtaQuery(query: string) { - const response = await context.testServer.executeOperation({ + const response = await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -87,4 +88,4 @@ describe("EtaResolvers", () => { expect(eta.shuttle.id).toEqual(expectedEta.shuttleId); }); }); -}); \ No newline at end of file +}); diff --git a/test/resolvers/MutationResolverTests.test.ts b/test/resolvers/MutationResolverTests.test.ts index 199b1c4..4731199 100644 --- a/test/resolvers/MutationResolverTests.test.ts +++ b/test/resolvers/MutationResolverTests.test.ts @@ -1,8 +1,8 @@ -import { setupTestServerContext } from "../testHelpers/apolloTestServerHelpers"; import { describe, it } from "@jest/globals"; +import { setupTestServerHolder } from "../testHelpers/apolloTestServerHelpers"; describe("MutationResolvers", () => { - const context = setupTestServerContext() + const testServerHolder = setupTestServerHolder() describe("scheduleNotification", () => { it("adds a notification to the notification service", async () => { diff --git a/test/resolvers/OrderedStopResolverTests.test.ts b/test/resolvers/OrderedStopResolverTests.test.ts index 11c46e4..0d047ac 100644 --- a/test/resolvers/OrderedStopResolverTests.test.ts +++ b/test/resolvers/OrderedStopResolverTests.test.ts @@ -1,11 +1,12 @@ import { beforeEach, describe, expect, it } from "@jest/globals"; -import { setupTestServerContext } from "../testHelpers/apolloTestServerHelpers"; +import { setupTestServerContext, setupTestServerHolder } from "../testHelpers/apolloTestServerHelpers"; import { IRoute, IStop, ISystem } from "../../src/entities/entities"; import { generateMockOrderedStops, generateMockStops } from "../testHelpers/mockDataGenerators"; import { addMockRouteToRepository, addMockSystemToRepository } from "../testHelpers/repositorySetupHelpers"; import assert = require("node:assert"); describe("OrderedStopResolvers", () => { + const holder = setupTestServerHolder(); const context = setupTestServerContext(); let mockSystem: ISystem; @@ -59,7 +60,7 @@ describe("OrderedStopResolvers", () => { } `; - return await context.testServer.executeOperation({ + return await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -131,7 +132,7 @@ describe("OrderedStopResolvers", () => { } `; - return await context.testServer.executeOperation({ + return await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -206,7 +207,7 @@ describe("OrderedStopResolvers", () => { } `; - return await context.testServer.executeOperation({ + return await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -256,7 +257,7 @@ describe("OrderedStopResolvers", () => { } `; - return await context.testServer.executeOperation({ + return await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, diff --git a/test/resolvers/QueryResolverTests.test.ts b/test/resolvers/QueryResolverTests.test.ts index 73f8e83..af73aca 100644 --- a/test/resolvers/QueryResolverTests.test.ts +++ b/test/resolvers/QueryResolverTests.test.ts @@ -1,12 +1,13 @@ import { describe, expect, it } from "@jest/globals"; import { generateMockSystems } from "../testHelpers/mockDataGenerators"; -import { setupTestServerContext } from "../testHelpers/apolloTestServerHelpers"; +import { setupTestServerContext, setupTestServerHolder } from "../testHelpers/apolloTestServerHelpers"; import assert = require("node:assert"); // See Apollo documentation for integration test guide // https://www.apollographql.com/docs/apollo-server/testing/testing describe("QueryResolvers", () => { + const holder = setupTestServerHolder(); const context = setupTestServerContext(); async function addMockSystems() { @@ -30,7 +31,7 @@ describe("QueryResolvers", () => { } `; - const response = await context.testServer.executeOperation({ + const response = await holder.testServer.executeOperation({ query, }, { contextValue: { @@ -59,7 +60,7 @@ describe("QueryResolvers", () => { const systems = await addMockSystems(); const systemToGet = systems[1]; - const response = await context.testServer.executeOperation({ + const response = await holder.testServer.executeOperation({ query, variables: { id: systemToGet.id, @@ -76,7 +77,7 @@ describe("QueryResolvers", () => { }); it("returns null if there is no system", async () => { - const response = await context.testServer.executeOperation({ + const response = await holder.testServer.executeOperation({ query, variables: { id: "nonexistent-id", @@ -92,4 +93,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 ba5b403..0279a6e 100644 --- a/test/resolvers/RouteResolverTests.test.ts +++ b/test/resolvers/RouteResolverTests.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from "@jest/globals"; -import { setupTestServerContext } from "../testHelpers/apolloTestServerHelpers"; +import { setupTestServerContext, setupTestServerHolder } from "../testHelpers/apolloTestServerHelpers"; import { addMockRouteToRepository, addMockStopToRepository, @@ -10,6 +10,7 @@ import { IRoute, IStop, ISystem } from "../../src/entities/entities"; import assert = require("node:assert"); describe("RouteResolvers", () => { + const holder = setupTestServerHolder(); const context = setupTestServerContext(); let mockSystem: ISystem; @@ -40,7 +41,7 @@ describe("RouteResolvers", () => { } `; - return await context.testServer.executeOperation({ + return await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -95,7 +96,7 @@ describe("RouteResolvers", () => { } `; - return await context.testServer.executeOperation({ + return await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -145,4 +146,4 @@ describe("RouteResolvers", () => { expect(orderedStop).toBeNull(); }); }); -}); \ No newline at end of file +}); diff --git a/test/resolvers/ShuttleResolverTests.test.ts b/test/resolvers/ShuttleResolverTests.test.ts index 0811c3b..b2b3e81 100644 --- a/test/resolvers/ShuttleResolverTests.test.ts +++ b/test/resolvers/ShuttleResolverTests.test.ts @@ -1,12 +1,13 @@ import { beforeEach, describe, expect, it } from "@jest/globals"; import { generateMockEtas, generateMockRoutes } from "../testHelpers/mockDataGenerators"; import { IShuttle, ISystem } from "../../src/entities/entities"; -import { setupTestServerContext } from "../testHelpers/apolloTestServerHelpers"; +import { setupTestServerContext, setupTestServerHolder } from "../testHelpers/apolloTestServerHelpers"; import { addMockShuttleToRepository, addMockSystemToRepository } from "../testHelpers/repositorySetupHelpers"; import assert = require("node:assert"); describe("ShuttleResolvers", () => { + const holder = setupTestServerHolder(); const context = setupTestServerContext(); let mockSystem: ISystem; @@ -47,7 +48,7 @@ describe("ShuttleResolvers", () => { const mockEta = etas[1]; // Act - const response = await context.testServer.executeOperation({ + const response = await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -68,7 +69,7 @@ describe("ShuttleResolvers", () => { }); it("returns null if it doesn't exist", async () => { - const response = await context.testServer.executeOperation({ + const response = await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -106,7 +107,7 @@ describe("ShuttleResolvers", () => { it("returns associated ETAs if they exist for the shuttle", async () => { const etas = await addMockEtas(mockShuttle.id); - const response = await context.testServer.executeOperation({ + const response = await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -125,7 +126,7 @@ describe("ShuttleResolvers", () => { }); it("returns empty array if no ETAs exist", async () => { - const response = await context.testServer.executeOperation({ + const response = await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -164,7 +165,7 @@ describe("ShuttleResolvers", () => { ` async function getResponseForQuery() { - return await context.testServer.executeOperation({ + return await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -197,4 +198,4 @@ describe("ShuttleResolvers", () => { }); }); -}); \ No newline at end of file +}); diff --git a/test/resolvers/StopResolverTests.test.ts b/test/resolvers/StopResolverTests.test.ts index 2a044b1..fdda62b 100644 --- a/test/resolvers/StopResolverTests.test.ts +++ b/test/resolvers/StopResolverTests.test.ts @@ -1,11 +1,12 @@ import { beforeEach, describe, expect, it } from "@jest/globals"; -import { setupTestServerContext } from "../testHelpers/apolloTestServerHelpers"; +import { setupTestServerContext, setupTestServerHolder } from "../testHelpers/apolloTestServerHelpers"; import { generateMockEtas, generateMockOrderedStops } from "../testHelpers/mockDataGenerators"; import { IStop, ISystem } from "../../src/entities/entities"; import { addMockStopToRepository, addMockSystemToRepository } from "../testHelpers/repositorySetupHelpers"; import assert = require("node:assert"); describe("StopResolvers", () => { + const holder = setupTestServerHolder(); const context = setupTestServerContext(); let mockStop: IStop; @@ -17,7 +18,7 @@ describe("StopResolvers", () => { }) async function getResponseForQuery(query: string) { - return await context.testServer.executeOperation({ + return await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -105,4 +106,4 @@ describe("StopResolvers", () => { expect((response.body.singleResult.data as any).system.stop.etas).toHaveLength(0); }); }); -}); \ No newline at end of file +}); diff --git a/test/resolvers/SystemResolverTests.test.ts b/test/resolvers/SystemResolverTests.test.ts index 7020075..b7f3f5d 100644 --- a/test/resolvers/SystemResolverTests.test.ts +++ b/test/resolvers/SystemResolverTests.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from "@jest/globals"; -import { setupTestServerContext } from "../testHelpers/apolloTestServerHelpers"; +import { setupTestServerContext, setupTestServerHolder } from "../testHelpers/apolloTestServerHelpers"; import { generateMockRoutes, generateMockShuttles, generateMockStops } from "../testHelpers/mockDataGenerators"; import { addMockRouteToRepository, @@ -11,6 +11,7 @@ import { ISystem } from "../../src/entities/entities"; import assert = require("node:assert"); describe("SystemResolvers", () => { + const holder = setupTestServerHolder(); const context = setupTestServerContext(); let mockSystem: ISystem; @@ -21,7 +22,7 @@ describe("SystemResolvers", () => { // TODO: Consolidate these into one single method taking an object async function getResponseFromQueryNeedingSystemId(query: string) { - return await context.testServer.executeOperation({ + return await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -102,7 +103,7 @@ describe("SystemResolvers", () => { } `; - return await context.testServer.executeOperation({ + return await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -169,7 +170,7 @@ describe("SystemResolvers", () => { } `; - return await context.testServer.executeOperation({ + return await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -237,7 +238,7 @@ describe("SystemResolvers", () => { } `; - return await context.testServer.executeOperation({ + return await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, @@ -318,4 +319,4 @@ describe("SystemResolvers", () => { expect(shuttles.length === expectedShuttles.length); }); }); -}); \ No newline at end of file +}); diff --git a/test/testHelpers/apolloTestServerHelpers.ts b/test/testHelpers/apolloTestServerHelpers.ts index 78b322f..e92dd86 100644 --- a/test/testHelpers/apolloTestServerHelpers.ts +++ b/test/testHelpers/apolloTestServerHelpers.ts @@ -4,6 +4,7 @@ import { MergedResolvers } from "../../src/MergedResolvers"; import { UnoptimizedInMemoryRepository } from "../../src/repositories/UnoptimizedInMemoryRepository"; import { beforeEach } from "@jest/globals"; import { ServerContext } from "../../src/ServerContext"; +import { NotificationService } from "../../src/services/NotificationService"; function setUpTestServer() { @@ -17,14 +18,28 @@ function setUpTestServer() { } export function setupTestServerContext() { - // @ts-ignore - const context: { testServer: ApolloServer; repository: UnoptimizedInMemoryRepository } = {}; + const context: { [key: string] : any } = {}; beforeEach(() => { - context.testServer = setUpTestServer(); context.repository = new UnoptimizedInMemoryRepository(); + context.notificationService = new NotificationService(context.repository); }); - // Return a reference, not destructured values - return context; -} \ No newline at end of file + return context as ServerContext; +} + +/** + * Returns an object which holds a test server. + * This server is reset before every test. + * Tests should keep a reference to the holder object, + * and not destructure it. + */ +export function setupTestServerHolder() { + const holder: { [key: string]: any } = {}; + + beforeEach(() => { + holder.testServer = setUpTestServer(); + }); + + return holder as { testServer: ApolloServer }; +}