add error pathway and test case for validation

This commit is contained in:
2025-01-22 14:01:57 -08:00
parent 6c9f4691fd
commit 1b9a77209f
6 changed files with 488 additions and 19 deletions

View File

@@ -1,13 +1,25 @@
import { beforeEach, describe, expect, it, jest, test } from "@jest/globals";
import { ApiBasedRepositoryLoader } from "../../src/loaders/ApiBasedRepositoryLoader";
import { ApiBasedRepositoryLoader, ApiResponseError } from "../../src/loaders/ApiBasedRepositoryLoader";
import { UnoptimizedInMemoryRepository } from "../../src/repositories/UnoptimizedInMemoryRepository";
import { getAllSystemsResponse } from "../jsonSnapshots/getAllSystemsResponse";
import { fetchSystemDataSuccessfulResponse } from "../jsonSnapshots/fetchSystemData/fetchSystemDataSuccessfulResponse";
import { fetchSystemDataFailedResponse } from "../jsonSnapshots/fetchSystemData/fetchSystemDataFailedResponse";
function updateGlobalFetchMockJson(obj: any) {
/**
* Function to update behavior of the global `fetch` function.
* Note that the Passio GO API returns status code 200 for failed responses.
* @param obj
* @param status
*/
function updateGlobalFetchMockJson(
obj: any,
status: number = 200
) {
// @ts-ignore
global.fetch = jest.fn(() => {
return Promise.resolve({
json: () => Promise.resolve(obj)
json: () => Promise.resolve(obj),
status,
ok: status.toString().startsWith("2"), // 200-level codes are OK
})
}) as jest.Mock;
}
@@ -30,8 +42,8 @@ describe("ApiBasedRepositoryLoader", () => {
describe("fetchAndUpdateSystemData", () => {
it("updates system data in repository if response received", async () => {
const numberOfSystemsInResponse = getAllSystemsResponse.all.length;
updateGlobalFetchMockJson(getAllSystemsResponse);
const numberOfSystemsInResponse = fetchSystemDataSuccessfulResponse.all.length;
updateGlobalFetchMockJson(fetchSystemDataSuccessfulResponse);
await loader.fetchAndUpdateSystemData();
@@ -44,7 +56,12 @@ describe("ApiBasedRepositoryLoader", () => {
});
it("throws the correct error if the API response contains no data", async () => {
updateGlobalFetchMockJson(fetchSystemDataFailedResponse);
// Jest is so confusing
await expect(async () => {
await loader.fetchAndUpdateSystemData();
}).rejects.toThrow(ApiResponseError);
});
});