mirror of
https://github.com/brendan-ch/project-inter-server.git
synced 2026-04-17 07:50:31 +00:00
add error pathway and test case for validation
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user