import { beforeEach, describe, expect, it } from "@jest/globals"; import { ChapmanApiBasedParkingRepositoryLoader } from "../../../src/loaders/ParkingRepositoryLoaders/ChapmanApiBasedParkingRepositoryLoader"; 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("ChapmanApiBasedParkingRepositoryLoader", () => { let loader: ChapmanApiBasedParkingRepositoryLoader; beforeEach(() => { loader = new ChapmanApiBasedParkingRepositoryLoader( 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: 871, spotsAvailable: 211, coordinates: { latitude: 33.7945513, longitude: -117.8518707, }, name: "Anderson Structure", id: "", }, { address: "200 W Sycamore Ave, Orange, CA 92866-1053", capacity: 692, spotsAvailable: 282, coordinates: { latitude: 33.792937, longitude: -117.854782 }, name: "Barrera", id: "", } ]; expectedStructures[0].id = ChapmanApiBasedParkingRepositoryLoader.generateId(expectedStructures[0].address); expectedStructures[1].id = ChapmanApiBasedParkingRepositoryLoader.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(); }); }) }); });