From d59eec4653bfad0c6ed97e2c8caf00b390a1139c Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 27 Jan 2026 20:53:29 +0000 Subject: [PATCH] Refactor tests/ui/uploadModal-reset.test.mjs to use beforeEach/afterEach Refactored the test suite to use `beforeEach` for mocking `global.fetch` and `afterEach` for cleaning up `document.body`. This ensures that `fetch` is available for all tests and that DOM state (specifically elements with duplicate IDs) does not leak between tests, resolving `TypeError: Cannot read properties of null` failures in `UploadModal.bindEvents`. Co-authored-by: PR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> --- tests/ui/uploadModal-reset.test.mjs | 54 ++++++++++++++++------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/tests/ui/uploadModal-reset.test.mjs b/tests/ui/uploadModal-reset.test.mjs index 97ca5c06..1e4ff83d 100644 --- a/tests/ui/uploadModal-reset.test.mjs +++ b/tests/ui/uploadModal-reset.test.mjs @@ -1,4 +1,4 @@ -import { test, describe, it, before, after } from "node:test"; +import { test, describe, it, before, after, beforeEach, afterEach } from "node:test"; import assert from "node:assert"; import { createUiDom } from "./helpers/jsdom-test-helpers.mjs"; @@ -28,27 +28,6 @@ describe("UploadModal Reset Logic", () => { } }; - before(async () => { - process.env.NODE_ENV = 'test'; - dom = createUiDom(); - global.window = dom.window; - global.self = dom.window; - global.document = dom.document; - global.EventTarget = dom.window.EventTarget; - global.alert = (msg) => { console.log("ALERT CALLED:", msg); }; - global.HTMLElement = dom.window.HTMLElement; - global.HTMLInputElement = dom.window.HTMLInputElement; - global.HTMLButtonElement = dom.window.HTMLButtonElement; - global.HTMLDivElement = dom.window.HTMLDivElement; - - const module = await import("../../js/ui/components/UploadModal.js"); - UploadModal = module.UploadModal; - }); - - after(() => { - if (dom) dom.cleanup(); - }); - const mockHtml = ` `; + before(async () => { + process.env.NODE_ENV = 'test'; + dom = createUiDom(); + global.window = dom.window; + global.self = dom.window; + global.document = dom.document; + global.EventTarget = dom.window.EventTarget; + global.alert = (msg) => { console.log("ALERT CALLED:", msg); }; + global.HTMLElement = dom.window.HTMLElement; + global.HTMLInputElement = dom.window.HTMLInputElement; + global.HTMLButtonElement = dom.window.HTMLButtonElement; + global.HTMLDivElement = dom.window.HTMLDivElement; + + const module = await import("../../js/ui/components/UploadModal.js"); + UploadModal = module.UploadModal; + }); + + beforeEach(() => { + global.fetch = async () => ({ ok: true, text: async () => mockHtml }); + }); + + afterEach(() => { + document.body.innerHTML = ""; + }); + + after(() => { + if (dom) dom.cleanup(); + }); + it("should reset upload state and inputs when resetUploads is called", async () => { const container = document.createElement("div"); container.id = "modalContainer"; document.body.appendChild(container); - global.fetch = async () => ({ ok: true, text: async () => mockHtml }); - const modal = new UploadModal({ storageService: mockStorageService, r2Service: mockR2Service,