Files
archy/neode-ui/src/stores/__tests__/screensaver.test.ts
T

100 lines
2.7 KiB
TypeScript

import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
import { setActivePinia, createPinia } from 'pinia'
import { useScreensaverStore } from '../screensaver'
describe('useScreensaverStore', () => {
beforeEach(() => {
setActivePinia(createPinia())
vi.useFakeTimers()
})
afterEach(() => {
vi.useRealTimers()
})
it('starts inactive', () => {
const store = useScreensaverStore()
expect(store.isActive).toBe(false)
})
it('activate sets isActive to true', () => {
const store = useScreensaverStore()
store.activate()
expect(store.isActive).toBe(true)
})
it('deactivate sets isActive to false', () => {
const store = useScreensaverStore()
store.activate()
store.deactivate()
expect(store.isActive).toBe(false)
})
it('deactivate starts inactivity timer that activates after 3 minutes', () => {
const store = useScreensaverStore()
store.deactivate()
expect(store.isActive).toBe(false)
vi.advanceTimersByTime(3 * 60 * 1000)
expect(store.isActive).toBe(true)
})
it('resetInactivityTimer restarts the 3-minute countdown', () => {
const store = useScreensaverStore()
store.deactivate()
// Advance 2 minutes
vi.advanceTimersByTime(2 * 60 * 1000)
expect(store.isActive).toBe(false)
// Reset timer
store.resetInactivityTimer()
// Advance another 2 minutes (would have triggered without reset)
vi.advanceTimersByTime(2 * 60 * 1000)
expect(store.isActive).toBe(false)
// Full 3 minutes from reset
vi.advanceTimersByTime(1 * 60 * 1000)
expect(store.isActive).toBe(true)
})
it('clearInactivityTimer prevents activation', () => {
const store = useScreensaverStore()
store.deactivate()
store.clearInactivityTimer()
vi.advanceTimersByTime(5 * 60 * 1000)
expect(store.isActive).toBe(false)
})
it('suppression prevents automatic and manual activation until resumed', () => {
const store = useScreensaverStore()
store.suppress('video')
expect(store.isSuppressed).toBe(true)
store.resetInactivityTimer()
vi.advanceTimersByTime(5 * 60 * 1000)
expect(store.isActive).toBe(false)
store.activate()
expect(store.isActive).toBe(false)
store.resume('video')
expect(store.isSuppressed).toBe(false)
vi.advanceTimersByTime(3 * 60 * 1000)
expect(store.isActive).toBe(true)
})
it('activate clears any pending timer', () => {
const store = useScreensaverStore()
store.deactivate()
store.activate()
// If timer wasn't cleared, deactivating and waiting would trigger twice
store.deactivate()
vi.advanceTimersByTime(3 * 60 * 1000)
expect(store.isActive).toBe(true)
})
})