39 lines
1.5 KiB
TypeScript
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)
|
|
})
|
|
})
|