import { beforeEach, describe, expect, it, jest } from "@jest/globals"; import { setupTestServerContext, setupTestServerHolder } from "../testHelpers/apolloTestServerHelpers"; import { InterchangeSystem } from "../../src/entities/InterchangeSystem"; import { generateParkingStructures } from "../testHelpers/mockDataGenerators"; import { HistoricalParkingAverageQueryInput } from "../../src/generated/graphql"; import assert = require("node:assert"); jest.mock("../../src/environment"); describe("ParkingStructureResolver", () => { const holder = setupTestServerHolder(); const context = setupTestServerContext(); let mockSystem: InterchangeSystem; beforeEach(async () => { mockSystem = context.systems[0]; jest.useRealTimers(); }); describe("historicalAverages", () => { const query = ` query GetParkingStructureHistoricalAverages( $systemId: ID!, $parkingStructureId: ID!, $historicalAverageInput: HistoricalParkingAverageQueryInput! ) { system(id: $systemId) { parkingSystem { parkingStructure(id: $parkingStructureId) { historicalAverages(input: $historicalAverageInput) { from to averageSpotsAvailable } } } } } `; it("gets data for historical averages", async () => { jest.useFakeTimers(); jest.setSystemTime(new Date()); const parkingStructure = generateParkingStructures()[0]; parkingStructure.spotsAvailable = parkingStructure.capacity; mockSystem.parkingRepository?.setLoggingInterval(100); // Simulate repeated updates for (let i = 0; i < 6; i += 1) { jest.setSystemTime(new Date(Date.now() + 1000)); parkingStructure.spotsAvailable = parkingStructure.spotsAvailable - 100; await mockSystem.parkingRepository?.addOrUpdateParkingStructure(parkingStructure); } const historicalAverageInput: HistoricalParkingAverageQueryInput = { from: new Date(Date.now() - 5000).getTime(), intervalMs: 2000, to: new Date().getTime(), }; const response = await holder.testServer.executeOperation({ query, variables: { systemId: mockSystem.id, parkingStructureId: parkingStructure.id, historicalAverageInput, }, }, { contextValue: context, }); assert(response.body.kind === 'single'); expect(response.body.singleResult.errors).toBeUndefined(); const historicalAverages = (response.body.singleResult.data as any).system.parkingSystem.parkingStructure.historicalAverages; expect(historicalAverages).toHaveLength(3); }); }); });