openpencil/tests/engine/app/settings/credentials/access-check.test.ts
Danila Poyarkov 6cec1b2c58
fix: prevent repeated Keychain prompts and isolate native tests (#664)
* fix: prevent repeated Keychain prompts and isolate native tests

* fix: make credential settings contextual and actionable

* fix: refresh credential recovery state in open Settings

* fix: allow retrying credential status checks

* fix: recover credential access after backend panics

* test: centralize native Tauri invocation

* refactor: clarify credential preferences workflow path
2026-09-09 13:41:55 +03:00

39 lines
1.2 KiB
TypeScript

import { expect, test } from 'bun:test'
import { createCredentialAccessCheck } from '@/app/settings/credentials/preferences/access-check'
test('failed queries do not claim paused access and can be retried', async () => {
let fails = true
const state = createCredentialAccessCheck(async () => {
if (fails) throw new Error('IPC unavailable')
return false
})
await state.check()
expect(state.checkFailed.value).toBe(true)
expect(state.paused.value).toBe(false)
fails = false
await state.check()
expect(state.checkFailed.value).toBe(false)
expect(state.paused.value).toBe(false)
})
test('outdated or disposed queries cannot overwrite the latest state', async () => {
const pending = Promise.withResolvers<boolean>()
let calls = 0
const state = createCredentialAccessCheck(() =>
++calls === 1 ? pending.promise : Promise.resolve(true)
)
const old = state.check()
await state.check()
pending.resolve(false)
await old
expect(state.paused.value).toBe(true)
const next = Promise.withResolvers<boolean>()
const disposed = createCredentialAccessCheck(() => next.promise)
const checking = disposed.check()
disposed.invalidate()
next.resolve(true)
await checking
expect(disposed.paused.value).toBe(false)
})