UNPKG

matterbridge-roborock-vacuum-plugin

Version:
61 lines 3.43 kB
import { describe, expect, it, vi } from 'vitest'; import { MessageContext, Protocol } from '../../../roborockCommunication/models/index.js'; import { MessageDeserializer } from '../../../roborockCommunication/protocol/deserializers/messageDeserializer.js'; import { asType, mkUser } from '../../helpers/testUtils.js'; function buildHeaderBuffer(version, seq, nonce, timestamp, protocol) { const buf = Buffer.alloc(3 + 4 + 4 + 4 + 2); buf.write(version, 0, 3, 'utf8'); buf.writeUInt32BE(seq, 3); buf.writeUInt32BE(nonce, 7); buf.writeUInt32BE(timestamp, 11); buf.writeUInt16BE(protocol, 15); return buf; } describe('MessageDeserializer (basic)', () => { it('returns ResponseMessage for protocols without payload', () => { const ctx = new MessageContext(asType(mkUser())); const logger = asType({ notice: vi.fn(), error: vi.fn(), debug: vi.fn() }); const d = new MessageDeserializer(ctx, logger); const duid = 'DTEST'; const headerBuf = buildHeaderBuffer('1.0', 1, 2, 3, Protocol.hello_request); const resp = d.deserialize(duid, headerBuf, 'local'); expect(resp.duid).toBe(duid); expect(resp.header.version).toBe('1.0'); expect(resp.header.protocol).toBe(Protocol.hello_request); }); it('throws for unsupported protocol version', () => { const ctx = new MessageContext(asType(mkUser())); const logger = asType({ notice: vi.fn(), error: vi.fn(), debug: vi.fn() }); const d = new MessageDeserializer(ctx, logger); const headerBuf = buildHeaderBuffer('ZZZ', 1, 2, 3, Protocol.hello_request); expect(() => d.deserialize('DTEST', headerBuf, 'local')).toThrow(/unknown protocol/); }); it('returns ResponseMessage for ping_response without payload', () => { const ctx = new MessageContext(asType(mkUser())); const logger = asType({ notice: vi.fn(), error: vi.fn(), debug: vi.fn() }); const d = new MessageDeserializer(ctx, logger); const headerBuf = buildHeaderBuffer('1.0', 1, 2, 3, Protocol.ping_response); const resp = d.deserialize('DTEST', headerBuf, 'local'); expect(resp.header.protocol).toBe(Protocol.ping_response); expect(resp.body).toBeUndefined(); }); it('returns ResponseMessage for hello_response without payload', () => { const ctx = new MessageContext(asType(mkUser())); const logger = asType({ notice: vi.fn(), error: vi.fn(), debug: vi.fn() }); const d = new MessageDeserializer(ctx, logger); const headerBuf = buildHeaderBuffer('1.0', 1, 2, 3, Protocol.hello_response); const resp = d.deserialize('DTEST', headerBuf, 'local'); expect(resp.header.protocol).toBe(Protocol.hello_response); expect(resp.body).toBeUndefined(); }); it('returns ResponseMessage for general_response without payload', () => { const ctx = new MessageContext(asType(mkUser())); const logger = asType({ notice: vi.fn(), error: vi.fn(), debug: vi.fn() }); const d = new MessageDeserializer(ctx, logger); const headerBuf = buildHeaderBuffer('1.0', 1, 2, 3, Protocol.general_response); const resp = d.deserialize('DTEST', headerBuf, 'local'); expect(resp.header.protocol).toBe(Protocol.general_response); expect(resp.body).toBeUndefined(); }); }); //# sourceMappingURL=messageDeserializer.unit.test.js.map