From 791bcf32abe123e026d30b75e87e129409b99c0f Mon Sep 17 00:00:00 2001 From: Michael Li Date: Fri, 10 Jan 2025 17:25:00 -0500 Subject: [PATCH] Add function to initialize server for API tests --- test/plugins/api/pokerogue-account-api.test.ts | 9 +++++++-- test/plugins/api/pokerogue-admin-api.test.ts | 9 +++++++-- test/plugins/api/pokerogue-api.test.ts | 9 +++++++-- test/plugins/api/pokerogue-daily-api.test.ts | 9 +++++++-- test/plugins/api/pokerogue-savedata-api.test.ts | 9 +++++++-- .../api/pokerogue-session-savedata-api.test.ts | 9 +++++++-- .../api/pokerogue-system-savedata-api.test.ts | 9 +++++++-- test/utils/gameManager.ts | 3 +++ test/utils/testFileInitialization.ts | 15 ++++++++++++--- 9 files changed, 64 insertions(+), 17 deletions(-) diff --git a/test/plugins/api/pokerogue-account-api.test.ts b/test/plugins/api/pokerogue-account-api.test.ts index e03067b44d2..bbcf488bec6 100644 --- a/test/plugins/api/pokerogue-account-api.test.ts +++ b/test/plugins/api/pokerogue-account-api.test.ts @@ -4,11 +4,16 @@ import { PokerogueAccountApi } from "#app/plugins/api/pokerogue-account-api"; import { getApiBaseUrl } from "#test/utils/testUtils"; import * as Utils from "#app/utils"; import { http, HttpResponse } from "msw"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { initServerForApiTests } from "#test/utils/testFileInitialization"; const apiBase = getApiBaseUrl(); const accountApi = new PokerogueAccountApi(apiBase); -const { server } = global; + +let server; +beforeAll(async () => { + server = await initServerForApiTests(); +}); afterEach(() => { server.resetHandlers(); diff --git a/test/plugins/api/pokerogue-admin-api.test.ts b/test/plugins/api/pokerogue-admin-api.test.ts index 81edd35509c..231eb1354c6 100644 --- a/test/plugins/api/pokerogue-admin-api.test.ts +++ b/test/plugins/api/pokerogue-admin-api.test.ts @@ -7,13 +7,18 @@ import type { UnlinkAccountFromGoogledIdRequest, } from "#app/@types/PokerogueAdminApi"; import { PokerogueAdminApi } from "#app/plugins/api/pokerogue-admin-api"; +import { initServerForApiTests } from "#test/utils/testFileInitialization"; import { getApiBaseUrl } from "#test/utils/testUtils"; import { http, HttpResponse } from "msw"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; const apiBase = getApiBaseUrl(); const adminApi = new PokerogueAdminApi(apiBase); -const { server } = global; + +let server; +beforeAll(async () => { + server = await initServerForApiTests(); +}); afterEach(() => { server.resetHandlers(); diff --git a/test/plugins/api/pokerogue-api.test.ts b/test/plugins/api/pokerogue-api.test.ts index e88bdc1a9d5..ca6c64a9c8d 100644 --- a/test/plugins/api/pokerogue-api.test.ts +++ b/test/plugins/api/pokerogue-api.test.ts @@ -1,11 +1,16 @@ import type { TitleStatsResponse } from "#app/@types/PokerogueApi"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; +import { initServerForApiTests } from "#test/utils/testFileInitialization"; import { getApiBaseUrl } from "#test/utils/testUtils"; import { http, HttpResponse } from "msw"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; const apiBase = getApiBaseUrl(); -const { server } = global; + +let server; +beforeAll(async () => { + server = await initServerForApiTests(); +}); afterEach(() => { server.resetHandlers(); diff --git a/test/plugins/api/pokerogue-daily-api.test.ts b/test/plugins/api/pokerogue-daily-api.test.ts index 578d54e25fe..47823e3e7b2 100644 --- a/test/plugins/api/pokerogue-daily-api.test.ts +++ b/test/plugins/api/pokerogue-daily-api.test.ts @@ -3,11 +3,16 @@ import { PokerogueDailyApi } from "#app/plugins/api/pokerogue-daily-api"; import { getApiBaseUrl } from "#test/utils/testUtils"; import { ScoreboardCategory, type RankingEntry } from "#app/ui/daily-run-scoreboard"; import { http, HttpResponse } from "msw"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { initServerForApiTests } from "#test/testUtils/testFileInitialization"; const apiBase = getApiBaseUrl(); const dailyApi = new PokerogueDailyApi(apiBase); -const { server } = global; + +let server; +beforeAll(async () => { + server = await initServerForApiTests(); +}); afterEach(() => { server.resetHandlers(); diff --git a/test/plugins/api/pokerogue-savedata-api.test.ts b/test/plugins/api/pokerogue-savedata-api.test.ts index 296b648a27d..3c184dacc4f 100644 --- a/test/plugins/api/pokerogue-savedata-api.test.ts +++ b/test/plugins/api/pokerogue-savedata-api.test.ts @@ -1,12 +1,17 @@ import type { UpdateAllSavedataRequest } from "#app/@types/PokerogueSavedataApi"; import { PokerogueSavedataApi } from "#app/plugins/api/pokerogue-savedata-api"; +import { initServerForApiTests } from "#test/utils/testFileInitialization"; import { getApiBaseUrl } from "#test/utils/testUtils"; import { http, HttpResponse } from "msw"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; const apiBase = getApiBaseUrl(); const savedataApi = new PokerogueSavedataApi(apiBase); -const { server } = global; + +let server; +beforeAll(async () => { + server = await initServerForApiTests(); +}); afterEach(() => { server.resetHandlers(); diff --git a/test/plugins/api/pokerogue-session-savedata-api.test.ts b/test/plugins/api/pokerogue-session-savedata-api.test.ts index 234771481f5..09731b7347a 100644 --- a/test/plugins/api/pokerogue-session-savedata-api.test.ts +++ b/test/plugins/api/pokerogue-session-savedata-api.test.ts @@ -10,11 +10,16 @@ import { PokerogueSessionSavedataApi } from "#app/plugins/api/pokerogue-session- import type { SessionSaveData } from "#app/system/game-data"; import { getApiBaseUrl } from "#test/utils/testUtils"; import { http, HttpResponse } from "msw"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { initServerForApiTests } from "#test/testUtils/testFileInitialization"; const apiBase = getApiBaseUrl(); const sessionSavedataApi = new PokerogueSessionSavedataApi(apiBase); -const { server } = global; + +let server; +beforeAll(async () => { + server = await initServerForApiTests(); +}); afterEach(() => { server.resetHandlers(); diff --git a/test/plugins/api/pokerogue-system-savedata-api.test.ts b/test/plugins/api/pokerogue-system-savedata-api.test.ts index 7855da6e09f..e84e82b36de 100644 --- a/test/plugins/api/pokerogue-system-savedata-api.test.ts +++ b/test/plugins/api/pokerogue-system-savedata-api.test.ts @@ -8,11 +8,16 @@ import { PokerogueSystemSavedataApi } from "#app/plugins/api/pokerogue-system-sa import type { SystemSaveData } from "#app/system/game-data"; import { getApiBaseUrl } from "#test/utils/testUtils"; import { http, HttpResponse } from "msw"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { initServerForApiTests } from "#test/utils/testFileInitialization"; const apiBase = getApiBaseUrl(); const systemSavedataApi = new PokerogueSystemSavedataApi(getApiBaseUrl()); -const { server } = global; + +let server; +beforeAll(async () => { + server = await initServerForApiTests(); +}); afterEach(() => { server.resetHandlers(); diff --git a/test/utils/gameManager.ts b/test/utils/gameManager.ts index f986149c9f1..1a229969800 100644 --- a/test/utils/gameManager.ts +++ b/test/utils/gameManager.ts @@ -57,6 +57,7 @@ import fs from "fs"; import { expect, vi } from "vitest"; import { globalScene } from "#app/global-scene"; import type StarterSelectUiHandler from "#app/ui/starter-select-ui-handler"; +import { MockFetch } from "./mocks/mockFetch"; /** * Class to manage the game state and transitions between phases. @@ -122,6 +123,8 @@ export default class GameManager { // Sanitize overrides for each test this.override.mysteryEncounterChance(0).moveset([]).enemyMoveset([]).startingHeldItems([]).enemyHeldItems([]); + + global.fetch = vi.fn(MockFetch) as any; } /** diff --git a/test/utils/testFileInitialization.ts b/test/utils/testFileInitialization.ts index 0f87e18459c..f0b87bd4540 100644 --- a/test/utils/testFileInitialization.ts +++ b/test/utils/testFileInitialization.ts @@ -15,12 +15,10 @@ import { setCookie } from "#app/utils"; import { blobToString } from "#test/utils/gameManagerUtils"; import { MockConsoleLog } from "#test/utils/mocks/mockConsoleLog"; import { mockContext } from "#test/utils/mocks/mockContext"; -import { MockFetch } from "#test/utils/mocks/mockFetch"; import mockLocalStorage from "#test/utils/mocks/mockLocalStorage"; import MockImage from "#test/utils/mocks/mocksContainer/mockImage"; import Phaser from "phaser"; import InputText from "phaser3-rex-plugins/plugins/inputtext"; -import { vi } from "vitest"; import { manageListeners } from "./listenersManager"; /** @@ -53,7 +51,6 @@ export function initTestFile() { return null as any; }; navigator.getGamepads = () => []; - global.fetch = vi.fn(MockFetch) as any; setCookie(SESSION_ID_COOKIE_NAME, "fake_token"); window.matchMedia = () => @@ -99,3 +96,15 @@ export function initTestFile() { manageListeners(); } + +/** + * Closes the current mock server and initializes a new mock server. + * This is run at the beginning of every API test file. + */ +export async function initServerForApiTests() { + global.server?.close(); + const { setupServer } = await import("msw/node"); + global.server = setupServer(); + global.server.listen({ onUnhandledRequest: "error" }); + return global.server; +}