import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { cleanup, fireEvent, render, waitFor } from '@testing-library/react' import { APP_ZOOM_STORAGE_KEY } from '../lib/appZoom' import { useSettingsStore } from '../stores/settingsStore' import { useKeyboardShortcuts } from './useKeyboardShortcuts' function ShortcutHost() { useKeyboardShortcuts() return null } function setNavigatorPlatform(platform: string) { Object.defineProperty(window.navigator, 'platform', { configurable: true, value: platform, }) } describe('useKeyboardShortcuts app zoom', () => { beforeEach(() => { window.localStorage.clear() document.documentElement.removeAttribute('data-app-zoom-mode') document.documentElement.removeAttribute('data-app-zoom-percent') document.documentElement.style.removeProperty('--app-zoom') document.body.style.removeProperty('zoom') useSettingsStore.setState({ uiZoom: 1 }) setNavigatorPlatform('Win32') }) afterEach(() => { cleanup() }) it('handles Ctrl zoom shortcuts on Windows and Linux style platforms', async () => { render() fireEvent.keyDown(document, { code: 'Equal', ctrlKey: true, key: '=', }) await waitFor(() => { expect(window.localStorage.getItem(APP_ZOOM_STORAGE_KEY)).toBe('1.1') }) expect(useSettingsStore.getState().uiZoom).toBe(1.1) expect(document.documentElement.getAttribute('data-app-zoom-percent')).toBe('110') fireEvent.keyDown(document, { code: 'Minus', ctrlKey: true, key: '-', }) await waitFor(() => { expect(window.localStorage.getItem(APP_ZOOM_STORAGE_KEY)).toBe('1') }) expect(useSettingsStore.getState().uiZoom).toBe(1) fireEvent.keyDown(document, { code: 'NumpadAdd', ctrlKey: true, key: '+', }) await waitFor(() => { expect(window.localStorage.getItem(APP_ZOOM_STORAGE_KEY)).toBe('1.1') }) fireEvent.keyDown(document, { code: 'Digit0', ctrlKey: true, key: '0', }) await waitFor(() => { expect(window.localStorage.getItem(APP_ZOOM_STORAGE_KEY)).toBe('1') }) }) it('uses Cmd zoom shortcuts on macOS', async () => { setNavigatorPlatform('MacIntel') render() fireEvent.keyDown(document, { code: 'Minus', key: '-', metaKey: true, }) await waitFor(() => { expect(window.localStorage.getItem(APP_ZOOM_STORAGE_KEY)).toBe('0.9') }) fireEvent.keyDown(document, { code: 'Equal', ctrlKey: true, key: '=', }) await new Promise((resolve) => setTimeout(resolve, 0)) expect(window.localStorage.getItem(APP_ZOOM_STORAGE_KEY)).toBe('0.9') }) })