← Public packages
@danj/audible-auth
Locked Audible credential gateway: Connect, token refresh, and narrow Audible calls for other Kody packages.
src/__tests__/disconnect.test.ts
35 lines · 1.8 KB · TypeScriptimport assert from 'node:assert/strict'
import { registerHooks } from 'node:module'
import { test } from 'node:test'
// Disconnect with storage, secrets, and Amazon faked; the order of steps is the contract.
const fake: any = globalThis
fake.steps = [] as string[]
fake.device = { locale: 'ca' }
const mocks: Record<string, string> = {
'./device.ts': `export const loadDevice=async()=>globalThis.device; export const clearDevice=async()=>{globalThis.steps.push('clear-device')}; export const clearArchiveSigning=async()=>{globalThis.steps.push('clear-signing')}`,
'./secrets.ts': `export const deleteSecret=async(name)=>{globalThis.steps.push('delete:'+name);return true}`,
'./tokens.ts': `export const deregisterDevice=async()=>{globalThis.steps.push('deregister');return true}`,
}
registerHooks({
resolve(specifier, context, next) {
return mocks[specifier] && context.parentURL?.endsWith('/disconnect.ts') ? { url: `mock:${specifier}`, shortCircuit: true } : next(specifier, context)
},
load(url, context, next) {
return url.startsWith('mock:') ? { format: 'module', shortCircuit: true, source: mocks[url.slice(5)] } : next(url, context)
},
})
const { disconnect } = await import('../disconnect.ts')
test('the device leaves Amazon before its tokens are deleted, then everything is forgotten', async () => {
assert.deepEqual(await disconnect(), { wasConnected: true, deviceRemoved: true, secretsDeleted: true })
assert.equal(fake.steps[0], 'deregister')
assert.deepEqual(new Set(fake.steps.slice(1)), new Set(['delete:audible-access-token', 'delete:audible-refresh-token', 'clear-device', 'clear-signing']))
})
test('nothing connected means nothing to do', async () => {
fake.device = null
fake.steps = []
assert.deepEqual(await disconnect(), { wasConnected: false, deviceRemoved: false, secretsDeleted: false })
assert.deepEqual(fake.steps, [])
})