import { readFileSync } from "fs"; import { ApolloServer } from "@apollo/server"; import { MergedResolvers } from "../../src/MergedResolvers"; import { UnoptimizedInMemoryRepository } from "../../src/repositories/UnoptimizedInMemoryRepository"; import { beforeEach } from "@jest/globals"; import { ServerContext } from "../../src/ServerContext"; import { ETANotificationScheduler } from "../../src/notifications/schedulers/ETANotificationScheduler"; function setUpTestServer() { // Leaving this separate from the main server in case // configuration changes const typeDefs = readFileSync("./schema.graphqls", "utf8"); return new ApolloServer({ typeDefs, resolvers: MergedResolvers, }); } /** * Returns a `ServerContext` object which can be passed to requests * for testing. */ export function setupTestServerContext() { const context: { [key: string] : any } = {}; beforeEach(() => { context.repository = new UnoptimizedInMemoryRepository(); context.notificationService = new ETANotificationScheduler(context.repository); }); 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 }; }