fix(frontend): resolve failing tests for v0.101

- setup: mock HTMLCanvasElement.getContext and HTMLMediaElement.pause for JSDOM
- bitrateService: accept multiple network error message patterns
- TrackDetailPage: use Object.defineProperty for navigator.clipboard
This commit is contained in:
senke 2026-02-19 12:07:02 +01:00
parent 6a499ae11b
commit 9b8a4f83be
3 changed files with 49 additions and 5 deletions

View file

@ -195,12 +195,13 @@ describe('bitrateService', () => {
request: {},
response: undefined,
message: 'Network Error',
code: undefined, // avoid ENETUNREACH/ERR_NETWORK path in parseApiError
};
(apiClient.post as any).mockRejectedValue(error);
await expect(adaptBitrate(trackId, request)).rejects.toThrow(
/Network error/,
/Network error|No internet connection|Unable to connect/,
);
});

View file

@ -209,10 +209,10 @@ describe('TrackDetailPage', () => {
it('should copy share link when share button is clicked', async () => {
vi.mocked(getTrack).mockResolvedValue(mockTrack);
const mockWriteText = vi.fn().mockResolvedValue(undefined);
Object.assign(navigator, {
clipboard: {
writeText: mockWriteText,
},
Object.defineProperty(navigator, 'clipboard', {
value: { writeText: mockWriteText },
writable: true,
configurable: true,
});
render(<TrackDetailPage />, { wrapper: createWrapper() });

View file

@ -151,6 +151,49 @@ Object.defineProperty(window, 'WebSocket', {
value: MockWebSocket,
});
// Mock HTMLCanvasElement.getContext (JSDOM does not implement it)
HTMLCanvasElement.prototype.getContext = function (
this: HTMLCanvasElement,
contextId: string
): CanvasRenderingContext2D | null {
if (contextId === '2d') {
return {
canvas: this,
fillRect: vi.fn(),
clearRect: vi.fn(),
getImageData: vi.fn(() => ({ data: new Uint8ClampedArray(0), width: 0, height: 0 })),
putImageData: vi.fn(),
createImageData: vi.fn(() => ({ data: new Uint8ClampedArray(0), width: 0, height: 0 })),
setTransform: vi.fn(),
drawImage: vi.fn(),
save: vi.fn(),
restore: vi.fn(),
beginPath: vi.fn(),
moveTo: vi.fn(),
lineTo: vi.fn(),
closePath: vi.fn(),
stroke: vi.fn(),
translate: vi.fn(),
scale: vi.fn(),
rotate: vi.fn(),
arc: vi.fn(),
fill: vi.fn(),
measureText: vi.fn(() => ({ width: 0 })),
transform: vi.fn(),
rect: vi.fn(),
clip: vi.fn(),
} as unknown as CanvasRenderingContext2D;
}
return null;
};
// Mock HTMLMediaElement.pause (JSDOM does not implement it)
HTMLMediaElement.prototype.pause = vi.fn();
Object.defineProperty(HTMLMediaElement.prototype, 'paused', {
get: () => true,
configurable: true,
});
// Mock des variables d'environnement
Object.defineProperty(import.meta, 'env', {
value: {