password_manager/tests/lib/stores/settings.test.js

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)
})
})
})