Files
project-inter-server/test/loaders/ParkingRepositoryLoaders/ChapmanTimedApiBasedParkingRepositoryLoaderTests.test.ts

73 lines
2.5 KiB
TypeScript

import { beforeEach, describe, expect, it } from "@jest/globals";
import {
ChapmanTimedApiBasedParkingRepositoryLoader
} from "../../../src/loaders/ParkingRepositoryLoaders/ChapmanTimedApiBasedParkingRepositoryLoader";
import { InMemoryParkingRepository } from "../../../src/repositories/InMemoryParkingRepository";
import {
resetGlobalFetchMockJson,
updateGlobalFetchMockJson,
updateGlobalFetchMockJsonToThrowSyntaxError
} from "../../testHelpers/fetchMockHelpers";
import {
chapmanParkingStructureData
} from "../../jsonSnapshots/chapmanParkingStructureData/chapmanParkingStructureData";
import { IParkingStructure } from "../../../src/entities/ParkingRepositoryEntities";
import { assertAsyncCallbackThrowsApiResponseError } from "../../testHelpers/assertAsyncCallbackThrowsApiResponseError";
describe("ChapmanTimedApiBasedParkingRepositoryLoader", () => {
let loader: ChapmanTimedApiBasedParkingRepositoryLoader;
beforeEach(() => {
loader = new ChapmanTimedApiBasedParkingRepositoryLoader(
new InMemoryParkingRepository(),
);
resetGlobalFetchMockJson();
});
describe("fetchAndUpdateParkingStructures", () => {
it("fetches and update parking structures with unique IDs", async () => {
updateGlobalFetchMockJson(chapmanParkingStructureData);
await loader.fetchAndUpdateParkingStructures();
let expectedStructures: IParkingStructure[] = [
{
address: "300 E Walnut, Orange, CA 92867",
capacity: 211,
spotsAvailable: 871,
coordinates: {
latitude: 33.7945513,
longitude: -117.8518707,
},
name: "Anderson Structure",
id: "",
},
{
address: "",
capacity: 0,
spotsAvailable: 0,
coordinates: {
latitude: 0,
longitude: 0
},
name: "Barrera",
id: "",
}
];
expectedStructures[0].id = ChapmanTimedApiBasedParkingRepositoryLoader.generateId(expectedStructures[0].address);
expectedStructures[1].id = ChapmanTimedApiBasedParkingRepositoryLoader.generateId(expectedStructures[1].address);
const structuresFromLoader = await loader.repository.getParkingStructures();
expect(structuresFromLoader).toEqual(expectedStructures);
});
it("throws ApiResponseError if data is incorrect", async () => {
updateGlobalFetchMockJsonToThrowSyntaxError();
await assertAsyncCallbackThrowsApiResponseError(async () => {
await loader.fetchAndUpdateParkingStructures();
});
})
});
});