mirror of
https://github.com/OpenSquawk/OpenSquawk
synced 2026-05-15 03:25:40 +08:00
86 lines
2.7 KiB
TypeScript
86 lines
2.7 KiB
TypeScript
import { describe, it } from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
|
|
import { getBridgeLog, logBridgeEvent } from '~~/server/utils/bridgeLog'
|
|
import { getBridgeTokenFromHeader, normalizeBridgeToken } from '~~/server/utils/bridge'
|
|
import { flightlabTelemetryStore } from '~~/server/utils/flightlabTelemetry'
|
|
|
|
describe('bridge token handling', () => {
|
|
it('normalizes valid tokens and rejects invalid inputs', () => {
|
|
assert.equal(normalizeBridgeToken(' bridge-token-123 '), 'bridge-token-123')
|
|
assert.equal(normalizeBridgeToken('abc'), null)
|
|
assert.equal(normalizeBridgeToken(' '.repeat(10)), null)
|
|
assert.equal(normalizeBridgeToken(1234), null)
|
|
assert.equal(normalizeBridgeToken('x'.repeat(257)), null)
|
|
})
|
|
|
|
it('reads and normalizes x-bridge-token from request headers', () => {
|
|
const event = {
|
|
node: {
|
|
req: {
|
|
headers: {
|
|
'x-bridge-token': ' live-bridge-token ',
|
|
},
|
|
},
|
|
},
|
|
} as any
|
|
|
|
assert.equal(getBridgeTokenFromHeader(event), 'live-bridge-token')
|
|
})
|
|
})
|
|
|
|
describe('bridge log store', () => {
|
|
it('keeps only the latest 200 entries and supports since filtering', () => {
|
|
const token = `tok-${Date.now()}-${Math.random().toString(36).slice(2)}`
|
|
|
|
for (let i = 0; i < 205; i++) {
|
|
logBridgeEvent(token, {
|
|
endpoint: '/api/bridge/data',
|
|
method: 'POST',
|
|
statusCode: 200,
|
|
color: 'green',
|
|
summary: `entry-${i}`,
|
|
})
|
|
}
|
|
|
|
const all = getBridgeLog(token)
|
|
assert.equal(all.length, 200)
|
|
assert.equal(all[0]!.summary, 'entry-5')
|
|
assert.equal(all[199]!.summary, 'entry-204')
|
|
assert.equal(all[0]!.id < all[199]!.id, true)
|
|
|
|
const sinceId = all[149]!.id
|
|
const sinceEntries = getBridgeLog(token, sinceId)
|
|
assert.equal(sinceEntries.length, 50)
|
|
assert.equal(sinceEntries.every((entry) => entry.id > sinceId), true)
|
|
})
|
|
})
|
|
|
|
describe('flightlab telemetry store', () => {
|
|
it('stores latest telemetry and notifies listeners', () => {
|
|
const userId = `user-${Date.now()}`
|
|
const received: any[] = []
|
|
|
|
const unsubscribe = flightlabTelemetryStore.subscribe((incomingUserId, data) => {
|
|
if (incomingUserId === userId) {
|
|
received.push(data)
|
|
}
|
|
})
|
|
|
|
flightlabTelemetryStore.update(userId, { IAS: 121, ALT: 4500 })
|
|
const latest = flightlabTelemetryStore.get(userId)
|
|
|
|
assert.equal(latest?.IAS, 121)
|
|
assert.equal(latest?.ALT, 4500)
|
|
assert.equal(typeof latest?.timestamp, 'number')
|
|
assert.equal(received.length, 1)
|
|
|
|
const callsBeforeUnsubscribe = received.length
|
|
unsubscribe()
|
|
flightlabTelemetryStore.update(userId, { IAS: 130 })
|
|
|
|
assert.equal(flightlabTelemetryStore.get(userId)?.IAS, 130)
|
|
assert.equal(received.length, callsBeforeUnsubscribe)
|
|
})
|
|
})
|