matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
55 lines (48 loc) • 2.24 kB
text/typescript
import { DeviceData } from '../../roborockCommunication/Zmodel/device';
import { updateFromHomeData } from '../../runtimes/handleHomeDataMessage';
import { homeData } from '../testData/mockData';
import { PowerSource, RvcRunMode } from 'matterbridge/matter/clusters';
// Mocks
const mockUpdateAttribute = jest.fn();
const duid = 'test-duid';
const robot = {
updateAttribute: mockUpdateAttribute,
device: { data: { model: 'test-model' } as DeviceData | undefined },
dockStationStatus: {},
};
const platform = {
robots: new Map([[duid, robot]]),
log: {
error: jest.fn(),
debug: jest.fn(),
notice: jest.fn(),
/* eslint-disable no-console */
fatal: jest.fn().mockImplementation((message: string, ...arg: unknown[]) => console.info(message, ...arg)),
},
roborockService: {},
enableExperimentalFeature: {},
};
describe('updateFromHomeData', () => {
beforeEach(() => {
jest.clearAllMocks();
});
it('should update robot attributes when valid data is provided', async () => {
await updateFromHomeData(homeData, platform as any);
expect(mockUpdateAttribute).toHaveBeenCalledWith(PowerSource.Cluster.id, 'batPercentRemaining', 200, expect.anything());
expect(mockUpdateAttribute).toHaveBeenCalledWith(PowerSource.Cluster.id, 'batChargeLevel', 0, expect.anything());
expect(mockUpdateAttribute).toHaveBeenCalledWith(RvcRunMode.Cluster.id, 'currentMode', 1, expect.anything());
expect(mockUpdateAttribute).toHaveBeenCalledWith(PowerSource.Cluster.id, 'batChargeState', PowerSource.BatChargeState.IsAtFullCharge, expect.anything());
expect(platform.log.error).not.toHaveBeenCalled();
});
it('should log error if robot is not found', async () => {
platform.robots.clear();
await updateFromHomeData(homeData, platform as any);
expect(platform.log.error).not.toHaveBeenCalledWith(expect.stringContaining('Robot with DUID'));
});
it('should log error if device data is undefined', async () => {
platform.robots.clear();
platform.robots.set('test-duid', { ...robot, device: { data: undefined } });
await updateFromHomeData(homeData, platform as any);
expect(platform.log.error).toHaveBeenCalledWith('Device not found in home data');
});
});