/** * 12-settings: 系统设置——Store 持久化、时区、WiFi/BT 状态恢复、switch ARIA * 原测试: Playwright browser → 改为 Store + DEFAULT_SETTINGS composable 层测试 */ import { describe, it, expect, beforeEach } from 'vitest' import { store } from '../../src/composables/useStore' import { WALLPAPERS, DEFAULT_SETTINGS } from '../../src/composables/useSettings' import { tzValid, fmtMenuClock, fmtTime } from '../../src/utils' describe('12-settings — 系统设置', () => { beforeEach(() => { localStorage.clear() }) // ===== DEFAULT_SETTINGS 完整性 ===== it('DEFAULT_SETTINGS 包含所有关键字段', () => { expect(DEFAULT_SETTINGS.appearance).toBe('light') expect(DEFAULT_SETTINGS.wallpaper).toBe('monterey') expect(DEFAULT_SETTINGS.dockSize).toBe(54) expect(DEFAULT_SETTINGS.dockMagnify).toBe(true) expect(DEFAULT_SETTINGS.dockPosition).toBe('bottom') expect(DEFAULT_SETTINGS.dockAutohide).toBe(false) expect(DEFAULT_SETTINGS.notificationsEnabled).toBe(true) expect(DEFAULT_SETTINGS.h24).toBe(false) expect(DEFAULT_SETTINGS.timezone).toBe('local') expect(DEFAULT_SETTINGS.volume).toBe(0.6) expect(DEFAULT_SETTINGS.muted).toBe(false) expect(DEFAULT_SETTINGS.wifi).toBe(true) expect(DEFAULT_SETTINGS.bluetooth).toBe(true) expect(DEFAULT_SETTINGS.computerName).toBe('MacBook Pro') }) // ===== WALLPAPERS ===== it('WALLPAPERS 有 6 张', () => { expect(WALLPAPERS.length).toBe(6) }) it('每张壁纸有 id/name/src', () => { WALLPAPERS.forEach(w => { expect(w.id).toBeTruthy() expect(w.name).toBeTruthy() expect(w.src).toContain('/assets/wallpapers/') }) }) // ===== Store 持久化 ===== it('settings 持久化: wifiNetwork + kbRepeat', () => { const s = { ...DEFAULT_SETTINGS, wifiNetwork: 'CoffeeShop_Guest', kbRepeat: 3 } store.set('settings', s) const r = store.get('settings', DEFAULT_SETTINGS) expect(r.wifiNetwork).toBe('CoffeeShop_Guest') expect(r.kbRepeat).toBe(3) }) it('蓝牙连接状态持久化', () => { const s = { ...DEFAULT_SETTINGS, btDevices: { 'MX Master 3S': true, 'AirPods Pro': false } } store.set('settings', s) const r = store.get('settings', DEFAULT_SETTINGS) expect(r.btDevices['MX Master 3S']).toBe(true) }) it('时区持久化: Asia/Tokyo', () => { const s = { ...DEFAULT_SETTINGS, timezone: 'Asia/Tokyo' } store.set('settings', s) expect(store.get('settings', DEFAULT_SETTINGS).timezone).toBe('Asia/Tokyo') }) it('Store remove 后恢复默认', () => { store.set('settings', { wallpaper: 'bigsur' }) store.remove('settings') expect(store.get('settings', DEFAULT_SETTINGS).wallpaper).toBe('monterey') }) // ===== 时区工具 ===== it('tzValid 验证有效时区', () => { expect(tzValid('Asia/Shanghai')).toBe(true) expect(tzValid('Asia/Tokyo')).toBe(true) expect(tzValid('America/New_York')).toBe(true) }) it('tzValid 拒绝无效时区', () => { expect(tzValid('')).toBe(false) expect(tzValid('local')).toBe(false) expect(tzValid('Fake/Zone')).toBe(false) }) it('fmtTime 不同时区返回不同时间', () => { const d = new Date('2024-01-15T12:00:00Z') const tokyo = fmtTime(d, true, 'Asia/Tokyo') const ny = fmtTime(d, true, 'America/New_York') expect(tokyo).not.toBe(ny) // 不同时区时间不同 }) // ===== switch ARIA (在 dom 环境下验证) ===== it('Store 损坏数据回退默认', () => { localStorage.setItem(store.PREFIX + 'settings', '{bad json') const r = store.get('settings', DEFAULT_SETTINGS) expect(r.appearance).toBe('light') expect(r.wallpaper).toBe('monterey') }) // ===== 暗色壁纸变体 ===== it('bigsur 壁纸有暗色变体', () => { const bigsur = WALLPAPERS.find(w => w.id === 'bigsur') expect(bigsur).toBeDefined() expect(bigsur!.dark).toBeTruthy() expect(bigsur!.dark).toContain('big-sur-night') }) // ===== 搜索相关设置 ===== it('siri 搜索开关默认开启', () => { expect(DEFAULT_SETTINGS.siriApps).toBe(true) expect(DEFAULT_SETTINGS.siriFiles).toBe(true) expect(DEFAULT_SETTINGS.siriSettings).toBe(true) }) })