mirror of
https://github.com/brendan-ch/project-inter-server.git
synced 2026-04-17 07:50:31 +00:00
114 lines
3.9 KiB
TypeScript
114 lines
3.9 KiB
TypeScript
import { beforeEach, describe, expect, it, jest } from "@jest/globals";
|
|
import {
|
|
ChapmanApiBasedParkingRepositoryLoader
|
|
} from "../../../src/loaders/parking/ChapmanApiBasedParkingRepositoryLoader";
|
|
import { InMemoryParkingRepository } from "../../../src/repositories/parking/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("fetchAndUpdateAll", () => {
|
|
it("calls all the correct methods", async () => {
|
|
const spies = {
|
|
fetchAndUpdateParkingStructures: jest.spyOn(loader, "fetchAndUpdateParkingStructures"),
|
|
};
|
|
|
|
Object.values(spies).forEach((spy: any) => {
|
|
spy.mockResolvedValue(undefined);
|
|
});
|
|
|
|
await loader.fetchAndUpdateAll();
|
|
|
|
Object.values(spies).forEach((spy: any) => {
|
|
expect(spy).toHaveBeenCalled();
|
|
});
|
|
});
|
|
});
|
|
|
|
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: "",
|
|
updatedTime: new Date(),
|
|
},
|
|
{
|
|
address: "200 W Sycamore Ave, Orange, CA 92866-1053",
|
|
capacity: 692,
|
|
spotsAvailable: 282,
|
|
coordinates: {
|
|
latitude: 33.792937,
|
|
longitude: -117.854782
|
|
},
|
|
name: "Barrera",
|
|
id: "",
|
|
updatedTime: new Date(),
|
|
}
|
|
];
|
|
expectedStructures[0].id = ChapmanApiBasedParkingRepositoryLoader.generateId(expectedStructures[0].address);
|
|
expectedStructures[1].id = ChapmanApiBasedParkingRepositoryLoader.generateId(expectedStructures[1].address);
|
|
|
|
const structuresFromLoader = await loader.repository.getParkingStructures();
|
|
|
|
// Set updatedTimeMs on expected data to avoid comparison
|
|
expectedStructures[0].updatedTime = structuresFromLoader[0].updatedTime;
|
|
expectedStructures[1].updatedTime = structuresFromLoader[1].updatedTime;
|
|
|
|
expect(structuresFromLoader).toEqual(expectedStructures);
|
|
});
|
|
|
|
it("throws ApiResponseError if data is incorrect", async () => {
|
|
updateGlobalFetchMockJsonToThrowSyntaxError();
|
|
|
|
await assertAsyncCallbackThrowsApiResponseError(async () => {
|
|
await loader.fetchAndUpdateParkingStructures();
|
|
});
|
|
})
|
|
});
|
|
|
|
describe("constructIParkingStructureFromJson", () => {
|
|
it("normalizes the spots available if it's over the capacity", async () => {
|
|
const sampleJsonStructure: any = {
|
|
Capacity: 10,
|
|
Latitude: 1,
|
|
Longitude: 1,
|
|
Address: "300 E Walnut, Orange, CA 92867",
|
|
Name: "Anderson Structure",
|
|
CurrentCount: 11,
|
|
};
|
|
|
|
const returnedStructure = loader.constructIParkingStructureFromJson(sampleJsonStructure);
|
|
expect(returnedStructure.spotsAvailable).toEqual(returnedStructure.capacity);
|
|
});
|
|
});
|
|
});
|