matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
61 lines • 3.43 kB
JavaScript
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