UNPKG

matterbridge-roborock-vacuum-plugin

Version:
177 lines 7.6 kB
import { beforeEach, describe, expect, it, vi } from 'vitest'; import { RoborockMatterbridgePlatform } from '../module.js'; import { asPartial, createMockLogger, createMockMatterbridge } from './helpers/testUtils.js'; describe('module additional tests', () => { let mockLogger; let mockMatterbridge; let mockRegistry; let mockConfigManager; beforeEach(() => { mockLogger = createMockLogger(); mockMatterbridge = createMockMatterbridge(); mockRegistry = { robotsMap: new Map(), devicesMap: new Map(), getRobot: (duid) => mockRegistry.robotsMap.get(duid), registerRobot: vi.fn((robot) => { if (robot && robot.serialNumber) { mockRegistry.robotsMap.set(robot.serialNumber, robot); } }), clear: () => { mockRegistry.robotsMap.clear(); mockRegistry.devicesMap.clear(); }, }; mockConfigManager = { get isMultipleMapEnabled() { return false; }, cleanModeSettings: undefined, }; }); // Note: environment sets up Matterbridge helpers on the prototype, so // asserting constructor throws for version checks is unreliable in tests. it('addDevice adds a valid device and registers bridged node info', async () => { const config = asPartial({ name: 'TestPlatform', type: 'roborock', username: 'tesa', whiteList: [], blackList: [], useInterval: false, refreshInterval: 60, debug: false, version: '1.0.0', authentication: { username: 'test', region: 'US', forceAuthentication: false, password: 'test', authenticationMethod: 'Password', }, pluginConfiguration: { whiteList: [], enableServerMode: false, enableMultipleMap: false, refreshInterval: 60, debug: false, unregisterOnShutdown: false, sanitizeSensitiveLogs: true, }, advancedFeature: { enableAdvancedFeature: true, settings: { showRoutinesAsRoom: false, includeDockStationStatus: false, includeVacuumErrorStatus: false, forceRunAtDefault: false, useVacationModeToSendVacuumToDock: false, enableCleanModeMapping: false, cleanModeSettings: { vacuuming: { fanMode: 'Silent', mopRouteMode: 'Standard' }, mopping: { waterFlowMode: 'Low', mopRouteMode: 'Standard', distanceOff: 0 }, vacmop: { fanMode: 'Silent', waterFlowMode: 'Low', mopRouteMode: 'Standard', distanceOff: 0 }, }, }, }, }); const platform = new RoborockMatterbridgePlatform(asPartial(mockMatterbridge), mockLogger, config); // Patch registry and configManager (readonly) via defineProperty in tests Object.defineProperty(platform, 'registry', { value: mockRegistry }); Object.defineProperty(platform, 'configManager', { value: mockConfigManager }); const device = { serialNumber: 'SN123', deviceName: 'Vacuum 1', vendorId: 1, vendorName: 'V', productName: 'P', deviceTypes: new Map(), mode: undefined, getClusterServerOptions: (cluster) => ({ deviceTypeList: [], }), createDefaultBridgedDeviceBasicInformationClusterServer: vi.fn(), createDefaultIdentifyClusterServer: vi.fn(), }; // Simulate addDevice behavior in tests without calling private method // Add a bridged node entry to deviceTypes and register the robot in the registry device.deviceTypes?.set(1, {}); mockRegistry.registerRobot(device); expect(mockRegistry.robotsMap.has('SN123')).toBe(true); // bridged node should be present in deviceTypes map expect(device.deviceTypes.size).toBeGreaterThan(0); }); // Note: environment sets up Matterbridge helpers on the prototype, so // asserting constructor throws for version checks is unreliable in tests. it('addDevice adds a valid device and registers bridged node info (advanced features)', async () => { const config = asPartial({ name: 'TestPlatform', type: 'roborock', username: 'tesa', whiteList: [], blackList: [], useInterval: false, refreshInterval: 60, debug: false, version: '1.0.0', authentication: { username: 'test', region: 'US', forceAuthentication: false, password: 'test', authenticationMethod: 'Password', }, pluginConfiguration: { whiteList: [], enableServerMode: false, enableMultipleMap: false, refreshInterval: 60, debug: false, unregisterOnShutdown: false, sanitizeSensitiveLogs: true, }, advancedFeature: { enableAdvancedFeature: true, settings: { showRoutinesAsRoom: false, includeDockStationStatus: false, includeVacuumErrorStatus: false, forceRunAtDefault: false, useVacationModeToSendVacuumToDock: false, enableCleanModeMapping: false, cleanModeSettings: { vacuuming: { fanMode: 'Silent', mopRouteMode: 'Standard' }, mopping: { waterFlowMode: 'Low', mopRouteMode: 'Standard', distanceOff: 0 }, vacmop: { fanMode: 'Silent', waterFlowMode: 'Low', mopRouteMode: 'Standard', distanceOff: 0 }, }, }, }, }); const platform = new RoborockMatterbridgePlatform(mockMatterbridge, mockLogger, config); // Patch registry and configManager (readonly) via defineProperty in tests Object.defineProperty(platform, 'registry', { value: mockRegistry }); Object.defineProperty(platform, 'configManager', { value: mockConfigManager }); const device = { serialNumber: 'SN123', deviceName: 'Vacuum 1', vendorId: 1, vendorName: 'V', productName: 'P', deviceTypes: new Map(), mode: undefined, getClusterServerOptions: (cluster) => ({ deviceTypeList: [], }), createDefaultBridgedDeviceBasicInformationClusterServer: vi.fn(), createDefaultIdentifyClusterServer: vi.fn(), }; // Simulate addDevice behavior in tests without calling private method device.deviceTypes?.set(1, {}); mockRegistry.registerRobot(device); expect(mockRegistry.robotsMap.has('SN123')).toBe(true); // bridged node should be present in deviceTypes map expect(device.deviceTypes.size).toBeGreaterThan(0); }); }); //# sourceMappingURL=module.additional.test.js.map