update test helpers to consolidate ServerContext creation into one method

This commit is contained in:
2025-02-04 10:56:00 -08:00
parent 814f2c6584
commit b918bf7a67
9 changed files with 63 additions and 41 deletions

View File

@@ -1,5 +1,5 @@
import { beforeEach, describe, expect, it } from "@jest/globals"; 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 { IEta, IShuttle, IStop, ISystem } from "../../src/entities/entities";
import { import {
addMockEtaToRepository, addMockShuttleToRepository, addMockEtaToRepository, addMockShuttleToRepository,
@@ -9,6 +9,7 @@ import {
import assert = require("node:assert"); import assert = require("node:assert");
describe("EtaResolvers", () => { describe("EtaResolvers", () => {
const holder = setupTestServerHolder();
const context = setupTestServerContext(); const context = setupTestServerContext();
let mockSystem: ISystem; let mockSystem: ISystem;
@@ -24,7 +25,7 @@ describe("EtaResolvers", () => {
}); });
async function getResponseForEtaQuery(query: string) { async function getResponseForEtaQuery(query: string) {
const response = await context.testServer.executeOperation({ const response = await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -87,4 +88,4 @@ describe("EtaResolvers", () => {
expect(eta.shuttle.id).toEqual(expectedEta.shuttleId); expect(eta.shuttle.id).toEqual(expectedEta.shuttleId);
}); });
}); });
}); });

View File

@@ -1,8 +1,8 @@
import { setupTestServerContext } from "../testHelpers/apolloTestServerHelpers";
import { describe, it } from "@jest/globals"; import { describe, it } from "@jest/globals";
import { setupTestServerHolder } from "../testHelpers/apolloTestServerHelpers";
describe("MutationResolvers", () => { describe("MutationResolvers", () => {
const context = setupTestServerContext() const testServerHolder = setupTestServerHolder()
describe("scheduleNotification", () => { describe("scheduleNotification", () => {
it("adds a notification to the notification service", async () => { it("adds a notification to the notification service", async () => {

View File

@@ -1,11 +1,12 @@
import { beforeEach, describe, expect, it } from "@jest/globals"; 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 { IRoute, IStop, ISystem } from "../../src/entities/entities";
import { generateMockOrderedStops, generateMockStops } from "../testHelpers/mockDataGenerators"; import { generateMockOrderedStops, generateMockStops } from "../testHelpers/mockDataGenerators";
import { addMockRouteToRepository, addMockSystemToRepository } from "../testHelpers/repositorySetupHelpers"; import { addMockRouteToRepository, addMockSystemToRepository } from "../testHelpers/repositorySetupHelpers";
import assert = require("node:assert"); import assert = require("node:assert");
describe("OrderedStopResolvers", () => { describe("OrderedStopResolvers", () => {
const holder = setupTestServerHolder();
const context = setupTestServerContext(); const context = setupTestServerContext();
let mockSystem: ISystem; let mockSystem: ISystem;
@@ -59,7 +60,7 @@ describe("OrderedStopResolvers", () => {
} }
`; `;
return await context.testServer.executeOperation({ return await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -131,7 +132,7 @@ describe("OrderedStopResolvers", () => {
} }
`; `;
return await context.testServer.executeOperation({ return await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -206,7 +207,7 @@ describe("OrderedStopResolvers", () => {
} }
`; `;
return await context.testServer.executeOperation({ return await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -256,7 +257,7 @@ describe("OrderedStopResolvers", () => {
} }
`; `;
return await context.testServer.executeOperation({ return await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,

View File

@@ -1,12 +1,13 @@
import { describe, expect, it } from "@jest/globals"; import { describe, expect, it } from "@jest/globals";
import { generateMockSystems } from "../testHelpers/mockDataGenerators"; import { generateMockSystems } from "../testHelpers/mockDataGenerators";
import { setupTestServerContext } from "../testHelpers/apolloTestServerHelpers"; import { setupTestServerContext, setupTestServerHolder } from "../testHelpers/apolloTestServerHelpers";
import assert = require("node:assert"); import assert = require("node:assert");
// See Apollo documentation for integration test guide // See Apollo documentation for integration test guide
// https://www.apollographql.com/docs/apollo-server/testing/testing // https://www.apollographql.com/docs/apollo-server/testing/testing
describe("QueryResolvers", () => { describe("QueryResolvers", () => {
const holder = setupTestServerHolder();
const context = setupTestServerContext(); const context = setupTestServerContext();
async function addMockSystems() { async function addMockSystems() {
@@ -30,7 +31,7 @@ describe("QueryResolvers", () => {
} }
`; `;
const response = await context.testServer.executeOperation({ const response = await holder.testServer.executeOperation({
query, query,
}, { }, {
contextValue: { contextValue: {
@@ -59,7 +60,7 @@ describe("QueryResolvers", () => {
const systems = await addMockSystems(); const systems = await addMockSystems();
const systemToGet = systems[1]; const systemToGet = systems[1];
const response = await context.testServer.executeOperation({ const response = await holder.testServer.executeOperation({
query, query,
variables: { variables: {
id: systemToGet.id, id: systemToGet.id,
@@ -76,7 +77,7 @@ describe("QueryResolvers", () => {
}); });
it("returns null if there is no system", async () => { it("returns null if there is no system", async () => {
const response = await context.testServer.executeOperation({ const response = await holder.testServer.executeOperation({
query, query,
variables: { variables: {
id: "nonexistent-id", id: "nonexistent-id",
@@ -92,4 +93,4 @@ describe("QueryResolvers", () => {
expect(response.body.singleResult.data?.system).toBeNull(); expect(response.body.singleResult.data?.system).toBeNull();
}); });
}); });
}); });

View File

@@ -1,5 +1,5 @@
import { beforeEach, describe, expect, it } from "@jest/globals"; import { beforeEach, describe, expect, it } from "@jest/globals";
import { setupTestServerContext } from "../testHelpers/apolloTestServerHelpers"; import { setupTestServerContext, setupTestServerHolder } from "../testHelpers/apolloTestServerHelpers";
import { import {
addMockRouteToRepository, addMockRouteToRepository,
addMockStopToRepository, addMockStopToRepository,
@@ -10,6 +10,7 @@ import { IRoute, IStop, ISystem } from "../../src/entities/entities";
import assert = require("node:assert"); import assert = require("node:assert");
describe("RouteResolvers", () => { describe("RouteResolvers", () => {
const holder = setupTestServerHolder();
const context = setupTestServerContext(); const context = setupTestServerContext();
let mockSystem: ISystem; let mockSystem: ISystem;
@@ -40,7 +41,7 @@ describe("RouteResolvers", () => {
} }
`; `;
return await context.testServer.executeOperation({ return await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -95,7 +96,7 @@ describe("RouteResolvers", () => {
} }
`; `;
return await context.testServer.executeOperation({ return await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -145,4 +146,4 @@ describe("RouteResolvers", () => {
expect(orderedStop).toBeNull(); expect(orderedStop).toBeNull();
}); });
}); });
}); });

View File

@@ -1,12 +1,13 @@
import { beforeEach, describe, expect, it } from "@jest/globals"; import { beforeEach, describe, expect, it } from "@jest/globals";
import { generateMockEtas, generateMockRoutes } from "../testHelpers/mockDataGenerators"; import { generateMockEtas, generateMockRoutes } from "../testHelpers/mockDataGenerators";
import { IShuttle, ISystem } from "../../src/entities/entities"; 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 { addMockShuttleToRepository, addMockSystemToRepository } from "../testHelpers/repositorySetupHelpers";
import assert = require("node:assert"); import assert = require("node:assert");
describe("ShuttleResolvers", () => { describe("ShuttleResolvers", () => {
const holder = setupTestServerHolder();
const context = setupTestServerContext(); const context = setupTestServerContext();
let mockSystem: ISystem; let mockSystem: ISystem;
@@ -47,7 +48,7 @@ describe("ShuttleResolvers", () => {
const mockEta = etas[1]; const mockEta = etas[1];
// Act // Act
const response = await context.testServer.executeOperation({ const response = await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -68,7 +69,7 @@ describe("ShuttleResolvers", () => {
}); });
it("returns null if it doesn't exist", async () => { it("returns null if it doesn't exist", async () => {
const response = await context.testServer.executeOperation({ const response = await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -106,7 +107,7 @@ describe("ShuttleResolvers", () => {
it("returns associated ETAs if they exist for the shuttle", async () => { it("returns associated ETAs if they exist for the shuttle", async () => {
const etas = await addMockEtas(mockShuttle.id); const etas = await addMockEtas(mockShuttle.id);
const response = await context.testServer.executeOperation({ const response = await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -125,7 +126,7 @@ describe("ShuttleResolvers", () => {
}); });
it("returns empty array if no ETAs exist", async () => { it("returns empty array if no ETAs exist", async () => {
const response = await context.testServer.executeOperation({ const response = await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -164,7 +165,7 @@ describe("ShuttleResolvers", () => {
` `
async function getResponseForQuery() { async function getResponseForQuery() {
return await context.testServer.executeOperation({ return await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -197,4 +198,4 @@ describe("ShuttleResolvers", () => {
}); });
}); });
}); });

View File

@@ -1,11 +1,12 @@
import { beforeEach, describe, expect, it } from "@jest/globals"; 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 { generateMockEtas, generateMockOrderedStops } from "../testHelpers/mockDataGenerators";
import { IStop, ISystem } from "../../src/entities/entities"; import { IStop, ISystem } from "../../src/entities/entities";
import { addMockStopToRepository, addMockSystemToRepository } from "../testHelpers/repositorySetupHelpers"; import { addMockStopToRepository, addMockSystemToRepository } from "../testHelpers/repositorySetupHelpers";
import assert = require("node:assert"); import assert = require("node:assert");
describe("StopResolvers", () => { describe("StopResolvers", () => {
const holder = setupTestServerHolder();
const context = setupTestServerContext(); const context = setupTestServerContext();
let mockStop: IStop; let mockStop: IStop;
@@ -17,7 +18,7 @@ describe("StopResolvers", () => {
}) })
async function getResponseForQuery(query: string) { async function getResponseForQuery(query: string) {
return await context.testServer.executeOperation({ return await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -105,4 +106,4 @@ describe("StopResolvers", () => {
expect((response.body.singleResult.data as any).system.stop.etas).toHaveLength(0); expect((response.body.singleResult.data as any).system.stop.etas).toHaveLength(0);
}); });
}); });
}); });

View File

@@ -1,5 +1,5 @@
import { beforeEach, describe, expect, it } from "@jest/globals"; 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 { generateMockRoutes, generateMockShuttles, generateMockStops } from "../testHelpers/mockDataGenerators";
import { import {
addMockRouteToRepository, addMockRouteToRepository,
@@ -11,6 +11,7 @@ import { ISystem } from "../../src/entities/entities";
import assert = require("node:assert"); import assert = require("node:assert");
describe("SystemResolvers", () => { describe("SystemResolvers", () => {
const holder = setupTestServerHolder();
const context = setupTestServerContext(); const context = setupTestServerContext();
let mockSystem: ISystem; let mockSystem: ISystem;
@@ -21,7 +22,7 @@ describe("SystemResolvers", () => {
// TODO: Consolidate these into one single method taking an object // TODO: Consolidate these into one single method taking an object
async function getResponseFromQueryNeedingSystemId(query: string) { async function getResponseFromQueryNeedingSystemId(query: string) {
return await context.testServer.executeOperation({ return await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -102,7 +103,7 @@ describe("SystemResolvers", () => {
} }
`; `;
return await context.testServer.executeOperation({ return await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -169,7 +170,7 @@ describe("SystemResolvers", () => {
} }
`; `;
return await context.testServer.executeOperation({ return await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -237,7 +238,7 @@ describe("SystemResolvers", () => {
} }
`; `;
return await context.testServer.executeOperation({ return await holder.testServer.executeOperation({
query, query,
variables: { variables: {
systemId: mockSystem.id, systemId: mockSystem.id,
@@ -318,4 +319,4 @@ describe("SystemResolvers", () => {
expect(shuttles.length === expectedShuttles.length); expect(shuttles.length === expectedShuttles.length);
}); });
}); });
}); });

View File

@@ -4,6 +4,7 @@ import { MergedResolvers } from "../../src/MergedResolvers";
import { UnoptimizedInMemoryRepository } from "../../src/repositories/UnoptimizedInMemoryRepository"; import { UnoptimizedInMemoryRepository } from "../../src/repositories/UnoptimizedInMemoryRepository";
import { beforeEach } from "@jest/globals"; import { beforeEach } from "@jest/globals";
import { ServerContext } from "../../src/ServerContext"; import { ServerContext } from "../../src/ServerContext";
import { NotificationService } from "../../src/services/NotificationService";
function setUpTestServer() { function setUpTestServer() {
@@ -17,14 +18,28 @@ function setUpTestServer() {
} }
export function setupTestServerContext() { export function setupTestServerContext() {
// @ts-ignore const context: { [key: string] : any } = {};
const context: { testServer: ApolloServer<ServerContext>; repository: UnoptimizedInMemoryRepository } = {};
beforeEach(() => { beforeEach(() => {
context.testServer = setUpTestServer();
context.repository = new UnoptimizedInMemoryRepository(); context.repository = new UnoptimizedInMemoryRepository();
context.notificationService = new NotificationService(context.repository);
}); });
// Return a reference, not destructured values return context as ServerContext;
return context; }
}
/**
* 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 };
}