mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-03 12:37:56 +00:00
84 lines
2.7 KiB
JavaScript
84 lines
2.7 KiB
JavaScript
import { useAppearanceHotKeys } from '../useAppearanceHotKeys';
|
|
import { useI18n } from 'dashboard/composables/useI18n';
|
|
import { LocalStorage } from 'shared/helpers/localStorage';
|
|
import { LOCAL_STORAGE_KEYS } from 'dashboard/constants/localStorage';
|
|
import { setColorTheme } from 'dashboard/helper/themeHelper.js';
|
|
|
|
vi.mock('dashboard/composables/useI18n');
|
|
vi.mock('shared/helpers/localStorage');
|
|
vi.mock('dashboard/helper/themeHelper.js');
|
|
|
|
describe('useAppearanceHotKeys', () => {
|
|
beforeEach(() => {
|
|
useI18n.mockReturnValue({
|
|
t: vi.fn(key => key),
|
|
});
|
|
|
|
window.matchMedia = vi.fn().mockReturnValue({ matches: false });
|
|
});
|
|
|
|
it('should return goToAppearanceHotKeys computed property', () => {
|
|
const { goToAppearanceHotKeys } = useAppearanceHotKeys();
|
|
expect(goToAppearanceHotKeys.value).toBeDefined();
|
|
});
|
|
|
|
it('should have the correct number of appearance options', () => {
|
|
const { goToAppearanceHotKeys } = useAppearanceHotKeys();
|
|
expect(goToAppearanceHotKeys.value.length).toBe(4); // 1 parent + 3 theme options
|
|
});
|
|
|
|
it('should have the correct parent option', () => {
|
|
const { goToAppearanceHotKeys } = useAppearanceHotKeys();
|
|
const parentOption = goToAppearanceHotKeys.value.find(
|
|
option => option.id === 'appearance_settings'
|
|
);
|
|
expect(parentOption).toBeDefined();
|
|
expect(parentOption.children.length).toBe(3);
|
|
});
|
|
|
|
it('should have the correct theme options', () => {
|
|
const { goToAppearanceHotKeys } = useAppearanceHotKeys();
|
|
const themeOptions = goToAppearanceHotKeys.value.filter(
|
|
option => option.parent === 'appearance_settings'
|
|
);
|
|
expect(themeOptions.length).toBe(3);
|
|
expect(themeOptions.map(option => option.id)).toEqual([
|
|
'light',
|
|
'dark',
|
|
'auto',
|
|
]);
|
|
});
|
|
|
|
it('should call setAppearance when a theme option is selected', () => {
|
|
const { goToAppearanceHotKeys } = useAppearanceHotKeys();
|
|
const lightThemeOption = goToAppearanceHotKeys.value.find(
|
|
option => option.id === 'light'
|
|
);
|
|
|
|
lightThemeOption.handler();
|
|
|
|
expect(LocalStorage.set).toHaveBeenCalledWith(
|
|
LOCAL_STORAGE_KEYS.COLOR_SCHEME,
|
|
'light'
|
|
);
|
|
expect(setColorTheme).toHaveBeenCalledWith(false);
|
|
});
|
|
|
|
it('should handle system dark mode preference', () => {
|
|
window.matchMedia = vi.fn().mockReturnValue({ matches: true });
|
|
|
|
const { goToAppearanceHotKeys } = useAppearanceHotKeys();
|
|
const autoThemeOption = goToAppearanceHotKeys.value.find(
|
|
option => option.id === 'auto'
|
|
);
|
|
|
|
autoThemeOption.handler();
|
|
|
|
expect(LocalStorage.set).toHaveBeenCalledWith(
|
|
LOCAL_STORAGE_KEYS.COLOR_SCHEME,
|
|
'auto'
|
|
);
|
|
expect(setColorTheme).toHaveBeenCalledWith(true);
|
|
});
|
|
});
|