Skip to content

Commit 3d14525

Browse files
committed
fix: fix broken tests
1 parent bcb977c commit 3d14525

3 files changed

Lines changed: 64 additions & 18 deletions

File tree

src/pages/VisualizerApp.test.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { renderWithI18n, screen, fireEvent, waitFor } from '../test/testUtils';
99
import VisualizerApp from './VisualizerApp.jsx';
1010
import { ThemeProvider } from '../contexts/ThemeContext.jsx';
1111
import { soundManager } from '../utils/soundManager';
12+
import { resetSoundManagerMock } from '../test/soundManagerMock.js';
1213

1314
const { beginExportFlow, exportVideo, videoExporterMock, fullScreenMock } =
1415
vi.hoisted(() => {
@@ -350,11 +351,9 @@ vi.mock('../video/useVideoExporter', () => ({
350351

351352
describe('VisualizerApp', () => {
352353
beforeEach(() => {
353-
vi.restoreAllMocks();
354+
resetSoundManagerMock();
354355
window.localStorage.clear();
355356
document.body.style.cssText = '';
356-
soundManager.disable();
357-
vi.clearAllMocks();
358357
fullScreenMock.isFullScreen = false;
359358
videoExporterMock.exportState = 'idle';
360359
videoExporterMock.exportProgress = 0;
@@ -364,6 +363,7 @@ describe('VisualizerApp', () => {
364363
afterEach(() => {
365364
vi.restoreAllMocks();
366365
document.body.style.cssText = '';
366+
resetSoundManagerMock();
367367
});
368368

369369
async function renderApp() {

src/test/setup.js

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
* See LICENSE for details.
55
*/
66

7-
import { expect, afterEach, vi } from 'vitest';
7+
import { expect, afterEach, beforeEach, vi } from 'vitest';
88
import { cleanup } from '@testing-library/react';
99
import * as matchers from '@testing-library/jest-dom/matchers';
10+
import { resetSoundManagerMock, soundManagerMock } from './soundManagerMock.js';
1011
import '../i18n';
1112

1213
// Mock constants globally to prevent import issues
@@ -253,19 +254,6 @@ vi.mock('tone', () => ({
253254
}));
254255

255256
// Mock soundManager globally - prevents file execution
256-
const soundManagerState = {
257-
isEnabled: false,
258-
};
259-
const soundManagerMock = {
260-
playEvents: vi.fn(),
261-
enable: vi.fn(async () => {
262-
soundManagerState.isEnabled = true;
263-
}),
264-
disable: vi.fn(() => {
265-
soundManagerState.isEnabled = false;
266-
}),
267-
getIsEnabled: vi.fn(() => soundManagerState.isEnabled),
268-
};
269257
vi.mock('../utils/soundManager', () => ({
270258
soundManager: soundManagerMock,
271259
}));
@@ -291,11 +279,29 @@ vi.mock('../utils/gridHelpers.js', () => gridHelpersMock);
291279

292280
expect.extend(matchers);
293281

282+
const originalLocalStorage = globalThis.localStorage;
283+
284+
function restoreRealLocalStorage() {
285+
if (globalThis.localStorage !== originalLocalStorage) {
286+
globalThis.localStorage = originalLocalStorage;
287+
}
288+
try {
289+
originalLocalStorage.clear();
290+
} catch {
291+
// Ignore storage failures in teardown.
292+
}
293+
}
294+
295+
beforeEach(() => {
296+
restoreRealLocalStorage();
297+
});
298+
294299
afterEach(() => {
295300
cleanup();
296301
vi.clearAllTimers();
297-
soundManagerState.isEnabled = false;
302+
resetSoundManagerMock();
298303
if (typeof document !== 'undefined') {
299304
document.body.style.cssText = '';
300305
}
306+
restoreRealLocalStorage();
301307
});

src/test/soundManagerMock.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* Copyright (c) 2025 Bayan Flow
3+
* Licensed under Elastic License 2.0 OR Commercial
4+
* See LICENSE for details.
5+
*/
6+
7+
import { vi } from 'vitest';
8+
9+
export const soundManagerState = {
10+
isEnabled: false,
11+
};
12+
13+
export const soundManagerMock = {
14+
playEvents: vi.fn(),
15+
enable: vi.fn(async () => {
16+
soundManagerState.isEnabled = true;
17+
}),
18+
disable: vi.fn(() => {
19+
soundManagerState.isEnabled = false;
20+
}),
21+
getIsEnabled: vi.fn(() => soundManagerState.isEnabled),
22+
};
23+
24+
/** Re-apply mock implementations after vi.restoreAllMocks() in individual tests. */
25+
export function resetSoundManagerMock() {
26+
soundManagerState.isEnabled = false;
27+
soundManagerMock.enable.mockImplementation(async () => {
28+
soundManagerState.isEnabled = true;
29+
});
30+
soundManagerMock.disable.mockImplementation(() => {
31+
soundManagerState.isEnabled = false;
32+
});
33+
soundManagerMock.getIsEnabled.mockImplementation(
34+
() => soundManagerState.isEnabled
35+
);
36+
soundManagerMock.playEvents.mockClear();
37+
soundManagerMock.enable.mockClear();
38+
soundManagerMock.disable.mockClear();
39+
soundManagerMock.getIsEnabled.mockClear();
40+
}

0 commit comments

Comments
 (0)