From 2be76daf5187e13e93277e1f23737582b19d7896 Mon Sep 17 00:00:00 2001 From: Philippe Matray Date: Mon, 9 Mar 2026 10:24:37 +0100 Subject: [PATCH 1/3] fix(ci): fix failing frontend tests - Fix broken import paths in DiffBlade.test.tsx and preferences.test.ts - Add jsdom polyfills for document.queryCommandSupported and window.matchMedia (required by Monaco editor in test environment) --- .../domain/preferences/preferences.test.ts | 6 +++--- src/core/test-utils/setup.ts | 20 +++++++++++++++++++ src/extensions/diff/blades/DiffBlade.test.tsx | 2 +- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/core/stores/domain/preferences/preferences.test.ts b/src/core/stores/domain/preferences/preferences.test.ts index 99296914..c12c16cc 100644 --- a/src/core/stores/domain/preferences/preferences.test.ts +++ b/src/core/stores/domain/preferences/preferences.test.ts @@ -8,11 +8,11 @@ const mockStore = vi.hoisted(() => ({ save: vi.fn(() => Promise.resolve()), })); -vi.mock("../../../lib/store", () => ({ +vi.mock("@/framework/stores/persistence/tauri", () => ({ getStore: vi.fn(() => Promise.resolve(mockStore)), })); -vi.mock("../../toast", () => ({ +vi.mock("@/framework/stores/toast", () => ({ toast: { error: vi.fn(), warning: vi.fn(), @@ -21,7 +21,7 @@ vi.mock("../../toast", () => ({ }, })); -import { resetAllStores } from "../../registry"; +import { resetAllStores } from "@/framework/stores/registry"; import { usePreferencesStore } from "./index"; import { DEFAULT_CHECKLIST } from "./review-checklist.slice"; diff --git a/src/core/test-utils/setup.ts b/src/core/test-utils/setup.ts index 77bd5784..0d415196 100644 --- a/src/core/test-utils/setup.ts +++ b/src/core/test-utils/setup.ts @@ -23,6 +23,26 @@ if (!globalThis.crypto?.randomUUID) { }); } +// Polyfill document.queryCommandSupported for jsdom (used by Monaco editor clipboard) +if (typeof document !== "undefined" && !document.queryCommandSupported) { + document.queryCommandSupported = () => false; +} + +// Polyfill matchMedia for jsdom (used by Monaco editor theme detection) +if (typeof window !== "undefined" && !window.matchMedia) { + window.matchMedia = (query: string) => + ({ + matches: false, + media: query, + onchange: null, + addListener: () => {}, + removeListener: () => {}, + addEventListener: () => {}, + removeEventListener: () => {}, + dispatchEvent: () => false, + }) as MediaQueryList; +} + // Polyfill ResizeObserver for jsdom (used by react-resizable-panels) if (!globalThis.ResizeObserver) { globalThis.ResizeObserver = class ResizeObserver { diff --git a/src/extensions/diff/blades/DiffBlade.test.tsx b/src/extensions/diff/blades/DiffBlade.test.tsx index f43a8fa4..01c8a99c 100644 --- a/src/extensions/diff/blades/DiffBlade.test.tsx +++ b/src/extensions/diff/blades/DiffBlade.test.tsx @@ -1,4 +1,4 @@ -import { render } from "../../test-utils/render"; +import { render } from "../../../core/test-utils/render"; const mockCommands = vi.hoisted(() => ({ getFileDiff: vi.fn().mockResolvedValue({ From c86af9dba4a2528d12947d4fe03aa08869b99af8 Mon Sep 17 00:00:00 2001 From: Philippe Matray Date: Mon, 9 Mar 2026 10:25:51 +0100 Subject: [PATCH 2/3] chore: trigger CI From 49e68e13765e356303b25988c2a0145e03fd5cb7 Mon Sep 17 00:00:00 2001 From: Philippe Matray Date: Mon, 9 Mar 2026 10:28:10 +0100 Subject: [PATCH 3/3] fix(ci): add missing @testing-library/dom dependency @testing-library/react requires @testing-library/dom as a peer dependency, but it was not explicitly listed in package.json, causing CI to fail with "Cannot find module '@testing-library/dom'". --- package-lock.json | 90 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 91 insertions(+) diff --git a/package-lock.json b/package-lock.json index ffb9da92..d5f7721f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,6 +52,7 @@ "@statelyai/inspect": "^0.4.0", "@tailwindcss/vite": "^4", "@tauri-apps/cli": "^2", + "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^14.6.1", @@ -3127,6 +3128,26 @@ "@tauri-apps/api": "^2.8.0" } }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@testing-library/jest-dom": { "version": "6.9.1", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", @@ -3202,6 +3223,13 @@ "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==", "license": "MIT" }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -4569,6 +4597,29 @@ "node": ">= 14.0.0" } }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -5492,6 +5543,13 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, "node_modules/dompurify": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.7.tgz", @@ -6619,6 +6677,16 @@ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -7854,6 +7922,21 @@ "url": "https://opencollective.com/preact" } }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -7922,6 +8005,13 @@ "react-dom": ">=16.8.0" } }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT" + }, "node_modules/react-markdown": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz", diff --git a/package.json b/package.json index b1d5a433..551bf6fa 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "@statelyai/inspect": "^0.4.0", "@tailwindcss/vite": "^4", "@tauri-apps/cli": "^2", + "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^14.6.1",