Files
opsxshell/test/utils/disconnectReason.test.ts
T

39 lines
1.5 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
classifyDisconnectReason,
reconnectDelayMs,
shouldAutoReconnect,
shouldForgetNativeConnection,
} from '../../src/utils/disconnectReason'
describe('classifyDisconnectReason', () => {
it('treats keepalive failure as a link drop that should reconnect', () => {
expect(classifyDisconnectReason('keepalive failed')).toBe('keepalive')
expect(shouldAutoReconnect('keepalive')).toBe(true)
})
it('does not treat the legacy native default as a user click', () => {
expect(classifyDisconnectReason('closed by user')).toBe('unexpected')
expect(classifyDisconnectReason('connection closed')).toBe('unexpected')
expect(shouldAutoReconnect('unexpected')).toBe(true)
})
it('skips auto-reconnect for local policy and teardown', () => {
expect(classifyDisconnectReason('idle suspend')).toBe('idle-suspend')
expect(shouldAutoReconnect('idle-suspend')).toBe(false)
expect(shouldForgetNativeConnection('idle-suspend')).toBe(false)
expect(classifyDisconnectReason('manual')).toBe('user')
expect(classifyDisconnectReason('no refs')).toBe('user')
expect(classifyDisconnectReason('auto reconnect cleanup')).toBe('cleanup')
expect(shouldAutoReconnect('user')).toBe(false)
expect(shouldAutoReconnect('cleanup')).toBe(false)
})
it('backs off reconnect delay', () => {
expect(reconnectDelayMs(1, 1000)).toBe(1000)
expect(reconnectDelayMs(2, 1000)).toBe(1600)
expect(reconnectDelayMs(20, 1000, 5000)).toBe(5000)
})
})