const assert = require('assert'); const { formatReceivedTimestamp, normalizeIp, TcpService } = require('../tcp-service'); const { buildFrame, buildBloodPressurePayload } = require('../tcp-simulator'); describe('tcp-service', () => { it('normalizes IPv4 mapped addresses', () => { assert.strictEqual(normalizeIp('::ffff:192.168.1.10'), '192.168.1.10'); assert.strictEqual(normalizeIp('127.0.0.1'), '127.0.0.1'); }); it('formats receive timestamp', () => { assert.strictEqual(formatReceivedTimestamp(new Date('2026-05-12T10:20:30')), '2026-05-12 10:20:30'); }); it('adds M when blood pressure frame is handled', async () => { let receivedMetric = null; const service = new TcpService({ tcpConfig: { maxBufferBytes: 8192 }, devices: [], alModelPath: './alModel.json', logger: { info() {}, warn() {}, error() {}, debug() {} }, onMetric(_device, metric) { receivedMetric = metric; }, }); const fakeSocket = {}; service.sessions.set(fakeSocket, { device: { deviceId: 'JH-001', ip: '127.0.0.1' }, decoder: { push() { return [{ ok: true, publish: true, messageType: 'blood-pressure', metric: { N: 120, O: 80, P: 76 }, }]; }, }, }); service.handleData(fakeSocket, buildFrame(1, 0x01, 0x01, buildBloodPressurePayload())); assert.strictEqual(receivedMetric.N, 120); assert.strictEqual(receivedMetric.O, 80); assert.strictEqual(receivedMetric.P, 76); assert.match(receivedMetric.M, /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/); }); });