92 lines
2.8 KiB
JavaScript
92 lines
2.8 KiB
JavaScript
import { describe, it, expect, beforeEach, vi } from 'vitest'
|
|
import { settings } from '../../../src/lib/stores/settings.js'
|
|
import { saveSetting, getSetting } from '../../../src/lib/storage/db.js'
|
|
|
|
beforeEach(() => {
|
|
// Reset settings to defaults
|
|
settings.autoLockMinutes = 5
|
|
settings.lockOnTabSwitch = true
|
|
})
|
|
|
|
describe('SettingsStore', () => {
|
|
describe('default values', () => {
|
|
it('should have default autoLockMinutes of 5', () => {
|
|
expect(settings.autoLockMinutes).toBe(5)
|
|
})
|
|
|
|
it('should have default lockOnTabSwitch of true', () => {
|
|
expect(settings.lockOnTabSwitch).toBe(true)
|
|
})
|
|
})
|
|
|
|
describe('load()', () => {
|
|
it('should load persisted settings from IndexedDB', async () => {
|
|
await saveSetting('autoLockMinutes', 10)
|
|
await saveSetting('lockOnTabSwitch', false)
|
|
|
|
await settings.load()
|
|
|
|
expect(settings.autoLockMinutes).toBe(10)
|
|
expect(settings.lockOnTabSwitch).toBe(false)
|
|
})
|
|
|
|
it('should fall back to defaults for missing keys', async () => {
|
|
// Remove any previously saved settings
|
|
await saveSetting('autoLockMinutes', undefined)
|
|
await saveSetting('lockOnTabSwitch', undefined)
|
|
|
|
await settings.load()
|
|
|
|
expect(settings.autoLockMinutes).toBe(5)
|
|
expect(settings.lockOnTabSwitch).toBe(true)
|
|
})
|
|
|
|
it('should fall back to defaults for partially missing keys', async () => {
|
|
await saveSetting('autoLockMinutes', 15)
|
|
await saveSetting('lockOnTabSwitch', undefined)
|
|
|
|
await settings.load()
|
|
|
|
expect(settings.autoLockMinutes).toBe(15)
|
|
expect(settings.lockOnTabSwitch).toBe(true) // default
|
|
})
|
|
|
|
it('should handle string values from IndexedDB', async () => {
|
|
await saveSetting('autoLockMinutes', '10')
|
|
await saveSetting('lockOnTabSwitch', 'true')
|
|
|
|
await settings.load()
|
|
|
|
expect(settings.autoLockMinutes).toBe(10) // coerced to number
|
|
expect(settings.lockOnTabSwitch).toBe(true) // coerced to boolean
|
|
})
|
|
})
|
|
|
|
describe('save()', () => {
|
|
it('should persist settings to IndexedDB', async () => {
|
|
settings.autoLockMinutes = 15
|
|
settings.lockOnTabSwitch = false
|
|
|
|
await settings.save()
|
|
|
|
// Verify by loading back
|
|
const loadedMinutes = await getSetting('autoLockMinutes')
|
|
const loadedTabSwitch = await getSetting('lockOnTabSwitch')
|
|
expect(loadedMinutes).toBe(15)
|
|
expect(loadedTabSwitch).toBe(false)
|
|
})
|
|
|
|
it('should persist different values', async () => {
|
|
settings.autoLockMinutes = 30
|
|
settings.lockOnTabSwitch = true
|
|
|
|
await settings.save()
|
|
|
|
const loadedMinutes = await getSetting('autoLockMinutes')
|
|
const loadedTabSwitch = await getSetting('lockOnTabSwitch')
|
|
expect(loadedMinutes).toBe(30)
|
|
expect(loadedTabSwitch).toBe(true)
|
|
})
|
|
})
|
|
})
|