From f73abb5adcf96ee8a16c226435a3f98317dbbe37 Mon Sep 17 00:00:00 2001 From: Brendan Chen Date: Wed, 22 Jan 2025 16:02:19 -0800 Subject: [PATCH] move fetch mock helpers to separate file --- .../ApiBasedRepositoryLoaderTests.test.ts | 44 +++---------------- ...TimedApiBasedRepositoryLoaderTests.test.ts | 13 ++++++ test/mockHelpers/fetchMockHelpers.ts | 41 +++++++++++++++++ 3 files changed, 59 insertions(+), 39 deletions(-) create mode 100644 test/loaders/TimedApiBasedRepositoryLoaderTests.test.ts create mode 100644 test/mockHelpers/fetchMockHelpers.ts diff --git a/test/loaders/ApiBasedRepositoryLoaderTests.test.ts b/test/loaders/ApiBasedRepositoryLoaderTests.test.ts index ed4b92d..7bb4e7f 100644 --- a/test/loaders/ApiBasedRepositoryLoaderTests.test.ts +++ b/test/loaders/ApiBasedRepositoryLoaderTests.test.ts @@ -13,50 +13,16 @@ import { fetchShuttleDataSuccessfulResponse } from "../jsonSnapshots/fetchShuttleData/fetchShuttleDataSuccessfulResponse"; import { fetchEtaDataSuccessfulResponse } from "../jsonSnapshots/fetchEtaData/fetchEtaDataSuccessfulResponse"; - -/** - * 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), - status, - ok: status.toString().startsWith("2"), // 200-level codes are OK - }) - }) as jest.Mock; -} - -/** - * Reset the global fetch function mock's JSON to return an empty object. - * @param obj - */ -function resetGlobalFetchMockJson() { - updateGlobalFetchMockJson({}); -} +import { + resetGlobalFetchMockJson, + updateGlobalFetchMockJson, + updateGlobalFetchMockJsonToThrowSyntaxError +} from "../mockHelpers/fetchMockHelpers"; async function assertAsyncCallbackThrowsApiResponseError(callback: () => Promise) { await expect(callback).rejects.toThrow(ApiResponseError); } -function updateGlobalFetchMockJsonToThrowSyntaxError() { - // @ts-ignore - global.fetch = jest.fn(() => { - return Promise.resolve({ - json: () => Promise.reject(new SyntaxError("Unable to parse JSON")), - status: 200, - ok: true, - }) - }) as jest.Mock; -} - describe("ApiBasedRepositoryLoader", () => { let loader: ApiBasedRepositoryLoader; diff --git a/test/loaders/TimedApiBasedRepositoryLoaderTests.test.ts b/test/loaders/TimedApiBasedRepositoryLoaderTests.test.ts new file mode 100644 index 0000000..41d0011 --- /dev/null +++ b/test/loaders/TimedApiBasedRepositoryLoaderTests.test.ts @@ -0,0 +1,13 @@ +import { beforeEach, describe } from "@jest/globals"; +import { TimedApiBasedRepositoryLoader } from "../../src/loaders/TimedApiBasedRepositoryLoader"; +import { UnoptimizedInMemoryRepository } from "../../src/repositories/UnoptimizedInMemoryRepository"; +import { resetGlobalFetchMockJson } from "../mockHelpers/fetchMockHelpers"; + +describe("TimedApiBasedRepositoryLoader", () => { + let loader: TimedApiBasedRepositoryLoader; + + beforeEach(() => { + loader = new TimedApiBasedRepositoryLoader(new UnoptimizedInMemoryRepository()); + resetGlobalFetchMockJson(); + }); +}); \ No newline at end of file diff --git a/test/mockHelpers/fetchMockHelpers.ts b/test/mockHelpers/fetchMockHelpers.ts new file mode 100644 index 0000000..f1994cb --- /dev/null +++ b/test/mockHelpers/fetchMockHelpers.ts @@ -0,0 +1,41 @@ +import { jest } from "@jest/globals"; + +/** + * 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 + */ +export function updateGlobalFetchMockJson( + obj: any, + status: number = 200 +) { + // @ts-ignore + global.fetch = jest.fn(() => { + return Promise.resolve({ + json: () => Promise.resolve(obj), + status, + ok: status.toString().startsWith("2"), // 200-level codes are OK + }) + }); +} + +/** + * Reset the global fetch function mock's JSON to return an empty object. + * @param obj + */ +export function resetGlobalFetchMockJson() { + updateGlobalFetchMockJson({}); +} + + +export function updateGlobalFetchMockJsonToThrowSyntaxError() { + // @ts-ignore + global.fetch = jest.fn(() => { + return Promise.resolve({ + json: () => Promise.reject(new SyntaxError("Unable to parse JSON")), + status: 200, + ok: true, + }) + }) as jest.Mock; +}