Implement mocking of environment file

This commit is contained in:
2025-07-21 19:42:28 -04:00
parent 321e7a7fa9
commit 6444251649
3 changed files with 36 additions and 15 deletions

View File

@@ -2,7 +2,7 @@ import { ParkingGetterSetterRepository } from "./ParkingGetterSetterRepository";
import { IParkingStructure } from "../../entities/ParkingRepositoryEntities";
import { HistoricalParkingAverageQueryResult, HistoricalParkingAverageQueryArguments } from "./ParkingGetterRepository";
import { BaseRedisRepository } from "../BaseRedisRepository";
import { PARKING_LOGGING_INTERVAL_MS } from "./ParkingRepositoryConstants";
import { PARKING_LOGGING_INTERVAL_MS } from "../../environment";
export type ParkingStructureID = string;

View File

@@ -2,34 +2,53 @@ import { Resolvers } from "../generated/graphql";
import { ServerContext } from "../ServerContext";
import { HistoricalParkingAverageQueryArguments } from "../repositories/parking/ParkingGetterRepository";
import { GraphQLError } from "graphql/error";
import {
PARKING_HISTORICAL_AVERAGE_MAXIMUM_TIMESPAN,
PARKING_HISTORICAL_AVERAGE_MINIMUM_INTERVAL
} from "../environment";
export const ParkingStructureResolvers: Resolvers<ServerContext> = {
ParkingStructure: {
historicalAverages: async (parent, args, contextValue, _info) => {
/**
* @param errorMessage
*/
function throwBadUserInputError(errorMessage: string) {
throw new GraphQLError(errorMessage, {
extensions: {
code: 'BAD_USER_INPUT',
}
});
}
const system = contextValue.findSystemById(parent.systemId);
if (!args.input?.intervalMs) {
throw new GraphQLError('No interval provided', {
extensions: {
code: 'BAD_USER_INPUT',
},
});
throwBadUserInputError('No interval provided');
return null;
}
const historicalParkingAverageQueryArguments: HistoricalParkingAverageQueryArguments = {
const queryArguments: HistoricalParkingAverageQueryArguments = {
from: new Date(args.input.from),
intervalMs: args.input.intervalMs,
to: new Date(args.input.to),
}
if (Number.isNaN(historicalParkingAverageQueryArguments.from.getTime()
|| Number.isNaN(historicalParkingAverageQueryArguments.to.getTime()))) {
throw new GraphQLError('One or more invalid dates provided', {
extensions: {
code: 'BAD_USER_INPUT',
},
});
if (Number.isNaN(queryArguments.from.getTime()
|| Number.isNaN(queryArguments.to.getTime()))) {
throwBadUserInputError('One or more incorrect dates provided');
}
if (queryArguments.from.getTime() > queryArguments.to.getTime()) {
throwBadUserInputError("`from` date can't be greater than the `to` date");
}
const parkingAverages = await system?.parkingRepository?.getHistoricalAveragesOfParkingStructureCounts(parent.id, historicalParkingAverageQueryArguments);
// Limit queries for improved performance
if (queryArguments.to.getTime() - queryArguments.from.getTime() > PARKING_HISTORICAL_AVERAGE_MAXIMUM_TIMESPAN) {
throwBadUserInputError('Maximum timespan exceeded');
}
if (queryArguments.intervalMs < PARKING_HISTORICAL_AVERAGE_MINIMUM_INTERVAL) {
throwBadUserInputError('Provided interval is less than minimum interval');
}
const parkingAverages = await system?.parkingRepository?.getHistoricalAveragesOfParkingStructureCounts(parent.id, queryArguments);
if (!parkingAverages) {
return null;
}