UNPKG

matterbridge-roborock-vacuum-plugin

Version:
365 lines 16.3 kB
import { beforeEach, describe, expect, it, test, vi } from 'vitest'; import { MapInfo, RoomMap } from '../../core/application/models/index.js'; import { HomeEntity } from '../../core/domain/entities/Home.js'; import { RoomEntity } from '../../core/domain/entities/Room.js'; import { getSupportedAreas } from '../../initialData/getSupportedAreas.js'; import { makeLogger } from '../testUtils.js'; // import { debugStringify } from 'matterbridge/logger'; const mockLogger = makeLogger(); function createHomeEntity(vacuumRooms, roomMap, enableMultipleMap = false, mapInfos = []) { const mapDataDtos = mapInfos.map((entry) => ({ mapFlag: entry.id, add_time: Date.now(), length: entry.rooms.length, name: entry.name ?? '', bak_maps: [], rooms: entry.rooms, })); const mapInfo = new MapInfo({ max_multi_map: mapInfos.length, max_bak_map: 0, multi_map_count: mapInfos.length, map_info: mapDataDtos, }); return new HomeEntity(1, 'Test Home', roomMap ?? RoomMap.empty(), mapInfo, 0); } describe('getSupportedAreas (legacy)', () => { it('returns Unknown area when vacuumRooms missing or roomMap missing', () => { const homeEntity = createHomeEntity([], undefined, false); const res = getSupportedAreas(homeEntity, makeLogger()); expect(res.supportedAreas.length).toBe(1); expect(res.supportedAreas[0]?.areaInfo?.locationInfo?.locationName).toContain('Unknown'); }); test('enableMultipleMap returns supportedMaps', () => { const vacuumRooms = [{ id: 1, name: 'R1' }]; const roomMap = new RoomMap([{ id: 10, iot_name_id: '10', tag: 0, iot_map_id: 7, iot_name: 'RoomX' }]); const homeEntity = createHomeEntity(vacuumRooms, roomMap, true, [{ id: 7, name: 'Level 7', rooms: [] }]); const res = getSupportedAreas(homeEntity, makeLogger()); expect(res.supportedMaps.length).toBeGreaterThanOrEqual(1); expect(res.roomIndexMap).toBeDefined(); }); }); describe('getSupportedAreas', () => { beforeEach(() => { vi.clearAllMocks(); }); it('returns default area when rooms and roomMap are empty (case 1)', () => { const vacuumRooms = [ { id: 2775739, name: 'Garage' }, { id: 1474466, name: 'Outside' }, { id: 1459590, name: 'AAA room' }, { id: 1459587, name: "BBB's Room" }, { id: 1459580, name: "CCC's room" }, { id: 1458155, name: 'Dining room' }, { id: 1457889, name: 'Bathroom' }, { id: 1457888, name: 'Living room' }, { id: 991195, name: 'Downstairs Bathroom' }, { id: 991190, name: 'Garage Entryway' }, { id: 991187, name: 'TV Room' }, { id: 991185, name: 'Bedroom' }, { id: 612205, name: "DDD's Room" }, { id: 612204, name: 'Upstairs Bathroom' }, { id: 612202, name: 'Hallway' }, { id: 612200, name: 'EEE Room' }, { id: 609148, name: 'Dining Room' }, { id: 609146, name: 'Kitchen' }, { id: 609145, name: 'Living Room' }, ]; const roomMap = new RoomMap([ { id: 16, iot_name_id: '609146', tag: 0, iot_map_id: 0, iot_name: 'Kitchen' }, { id: 17, iot_name_id: '1457889', tag: 0, iot_map_id: 0, iot_name: 'Bathroom' }, { id: 18, iot_name_id: '612202', tag: 0, iot_map_id: 0, iot_name: 'Hallway' }, { id: 19, iot_name_id: '1458155', tag: 0, iot_map_id: 0, iot_name: 'Dining room' }, { id: 20, iot_name_id: '1457888', tag: 0, iot_map_id: 0, iot_name: 'Living room' }, { id: 21, iot_name_id: '1459580', tag: 0, iot_map_id: 0, iot_name: "BBB's room" }, { id: 22, iot_name_id: '612205', tag: 0, iot_map_id: 0, iot_name: "CCC's Room" }, { id: 23, iot_name_id: '1474466', tag: 0, iot_map_id: 0, iot_name: 'Outside' }, ]); const homeEntity = createHomeEntity(vacuumRooms, roomMap, false); const { supportedAreas } = getSupportedAreas(homeEntity, mockLogger); expect(supportedAreas.length).toEqual(8); }); it('returns default area when rooms and roomMap are empty (case 2)', () => { const vacuumRooms = [ { id: 11453731, name: 'Living room' }, { id: 11453727, name: 'Kitchen' }, { id: 11453415, name: 'Bathroom' }, { id: 11453409, name: "Emile's Room" }, { id: 11453404, name: "Nadia's Room" }, { id: 11453398, name: 'Hallway' }, { id: 11453391, name: 'Dining room' }, { id: 11453384, name: 'Outside' }, ]; const roomMap = new RoomMap([ { id: 16, iot_name_id: '2775739', tag: 0, iot_map_id: 0, iot_name: '' }, { id: 17, iot_name_id: '991195', tag: 0, iot_map_id: 0, iot_name: '' }, { id: 18, iot_name_id: '991187', tag: 0, iot_map_id: 0, iot_name: '' }, { id: 19, iot_name_id: '991185', tag: 0, iot_map_id: 0, iot_name: '' }, { id: 20, iot_name_id: '991190', tag: 0, iot_map_id: 0, iot_name: '' }, ]); const homeEntity = createHomeEntity(vacuumRooms, roomMap, false); const { supportedAreas } = getSupportedAreas(homeEntity, mockLogger); expect(supportedAreas.length).toEqual(5); }); it('returns default area when rooms and roomMap are empty (case 3)', () => { const vacuumRooms = [ { id: 11453731, name: 'Living room' }, { id: 11453727, name: 'Kitchen' }, { id: 11453415, name: 'Bathroom' }, { id: 11453409, name: "Emile's Room" }, { id: 11453404, name: "Nadia's Room" }, { id: 11453398, name: 'Hallway' }, { id: 11453391, name: 'Dining room' }, { id: 11453384, name: 'Outside' }, ]; const roomMap = new RoomMap([ { id: 16, iot_name_id: '2775739', tag: 0, iot_map_id: 0, iot_name: '' }, { id: 17, iot_name_id: '991195', tag: 0, iot_map_id: 0, iot_name: '' }, { id: 18, iot_name_id: '991187', tag: 0, iot_map_id: 0, iot_name: '' }, { id: 19, iot_name_id: '991185', tag: 0, iot_map_id: 0, iot_name: '' }, { id: 20, iot_name_id: '991190', tag: 0, iot_map_id: 0, iot_name: '' }, ]); const homeEntity = createHomeEntity(vacuumRooms, roomMap, false); const { supportedAreas } = getSupportedAreas(homeEntity, mockLogger); expect(supportedAreas.length).toEqual(5); }); it('returns default area when rooms and roomMap are empty (case 4)', () => { const vacuumRooms = [ { id: 11100845, name: 'Kitchen' }, { id: 11100849, name: 'Study' }, { id: 11100842, name: 'Living room' }, { id: 11100847, name: 'Bedroom' }, { id: 12461114, name: 'Guest bedroom' }, { id: 12461109, name: 'Master bedroom' }, { id: 12461111, name: 'Balcony' }, ]; const roomMap = new RoomMap([ { id: 16, iot_name_id: '2775739', tag: 0, iot_map_id: 0, iot_name: '' }, { id: 17, iot_name_id: '991195', tag: 0, iot_map_id: 0, iot_name: '' }, { id: 18, iot_name_id: '991187', tag: 0, iot_map_id: 0, iot_name: '' }, { id: 19, iot_name_id: '991185', tag: 0, iot_map_id: 0, iot_name: '' }, { id: 20, iot_name_id: '991190', tag: 0, iot_map_id: 0, iot_name: '' }, ]); const homeEntity = createHomeEntity(vacuumRooms, roomMap, false); const { supportedAreas } = getSupportedAreas(homeEntity, mockLogger); expect(supportedAreas.length).toEqual(5); }); it('returns default area when rooms and roomMap are empty', () => { const vacuumRooms = [ { id: 11100845, name: 'Kitchen' }, { id: 11100849, name: 'Study' }, { id: 11100842, name: 'Living room' }, { id: 11100847, name: 'Bedroom' }, { id: 11100842, name: 'Living room' }, { id: 12461114, name: 'Guest bedroom' }, { id: 12461109, name: 'Master bedroom' }, { id: 12461111, name: 'Balcony' }, ]; const roomMap = new RoomMap([ { id: 1, iot_name_id: '11100845', tag: 14, iot_map_id: 0, iot_name: 'Kitchen' }, { id: 2, iot_name_id: '11100849', tag: 9, iot_map_id: 0, iot_name: 'Study' }, { id: 3, iot_name_id: '11100842', tag: 6, iot_map_id: 0, iot_name: 'Living room' }, { id: 4, iot_name_id: '11100847', tag: 1, iot_map_id: 0, iot_name: 'Bedroom' }, { id: 1, iot_name_id: '11100842', tag: 6, iot_map_id: 1, iot_name: 'Living room' }, { id: 2, iot_name_id: '12461114', tag: 3, iot_map_id: 1, iot_name: 'Guest bedroom' }, { id: 3, iot_name_id: '12461109', tag: 2, iot_map_id: 1, iot_name: 'Master bedroom' }, { id: 4, iot_name_id: '12461111', tag: 7, iot_map_id: 1, iot_name: 'Balcony' }, ]); const homeEntity = createHomeEntity(vacuumRooms, roomMap, true, [ { id: 0, name: 'First Map', rooms: [] }, { id: 1, name: 'Second Map', rooms: [] }, ]); const { supportedAreas, supportedMaps } = getSupportedAreas(homeEntity, makeLogger()); expect(supportedAreas.length).toEqual(8); expect(supportedMaps.length).toEqual(2); }); it('real test 1', () => { const vacuumRooms = [ new RoomEntity(11100845, 'Kitchen'), new RoomEntity(11100849, 'Study'), new RoomEntity(11100842, 'Living room'), new RoomEntity(11100847, 'Bedroom'), new RoomEntity(12461114, 'Guest bedroom'), new RoomEntity(12461109, 'Master bedroom'), new RoomEntity(12461111, 'Balcony'), ]; const roomMap = new RoomMap([ { id: 1, iot_name_id: '11100845', tag: 14, iot_map_id: 0, iot_name: 'Kitchen' }, { id: 2, iot_name_id: '11100849', tag: 9, iot_map_id: 0, iot_name: 'Study' }, { id: 3, iot_name_id: '11100842', tag: 6, iot_map_id: 0, iot_name: 'Living room' }, { id: 4, iot_name_id: '11100847', tag: 1, iot_map_id: 0, iot_name: 'Bedroom' }, { id: 1, iot_name_id: '11100842', tag: 6, iot_map_id: 1, iot_name: 'Living room' }, { id: 2, iot_name_id: '12461114', tag: 3, iot_map_id: 1, iot_name: 'Guest bedroom' }, { id: 3, iot_name_id: '12461109', tag: 2, iot_map_id: 1, iot_name: 'Master bedroom' }, { id: 4, iot_name_id: '12461111', tag: 7, iot_map_id: 1, iot_name: 'Balcony' }, ]); const homeEntity = createHomeEntity(vacuumRooms, roomMap, true, [ { id: 0, name: 'First Map', rooms: [] }, { id: 1, name: 'Second Map', rooms: [] }, ]); const { supportedAreas, supportedMaps } = getSupportedAreas(homeEntity, makeLogger()); expect(supportedAreas.length).toEqual(8); expect(supportedMaps.length).toEqual(2); // console.log(`Supported areas: ${JSON.stringify(supportedAreas, null, 2)} `); // console.log(`Supported maps: ${JSON.stringify(supportedMaps, null, 2)} `); }); it('real test 2', () => { const roomMap = new RoomMap([ { id: 16, iot_name_id: '12231095', tag: 0, iot_map_id: 1, iot_name: 'Garage', }, { id: 17, iot_name_id: '12231033', tag: 0, iot_map_id: 1, iot_name: 'Downstairs Bathroom', }, { id: 18, iot_name_id: '12231071', tag: 0, iot_map_id: 1, iot_name: 'TV Room', }, { id: 19, iot_name_id: '12231086', tag: 0, iot_map_id: 1, iot_name: 'Bedroom', }, { id: 20, iot_name_id: '12231061', tag: 0, iot_map_id: 1, iot_name: 'Garage Entryway', }, ]); const mapInfo = new MapInfo({ max_multi_map: 1, max_bak_map: 1, multi_map_count: 1, map_info: [ { mapFlag: 1, add_time: 1771001870, length: 10, name: 'Downstairs', bak_maps: [{ mapFlag: 4, add_time: 1771000925 }], }, ], }); const minLogger = makeLogger(); const homeInfo = new HomeEntity(123, 'My home', roomMap, mapInfo, 0); const { supportedAreas, supportedMaps } = getSupportedAreas(homeInfo, minLogger); const firstSupportedMap = supportedMaps.length > 0 ? supportedMaps[0] : undefined; const finalResult = supportedAreas.filter((area) => area.mapId === firstSupportedMap?.mapId); expect(finalResult.length).greaterThan(0); }); it('real test 3', () => { const roomMap = new RoomMap([ { id: 1, tag: 14, iot_name_id: '11100845', iot_map_id: 0, iot_name: 'Kitchen', }, { id: 2, tag: 9, iot_name_id: '11100849', iot_map_id: 0, iot_name: 'Study', }, { id: 3, tag: 6, iot_name_id: '11100842', iot_map_id: 0, iot_name: 'Living room', }, { id: 4, tag: 1, iot_name_id: '11100847', iot_map_id: 0, iot_name: 'Bedroom', }, { id: 1, tag: 6, iot_name_id: '11100842', iot_map_id: 1, iot_name: 'Living room', }, { id: 2, tag: 3, iot_name_id: '12461114', iot_map_id: 1, iot_name: 'Guest bedroom', }, { id: 3, tag: 2, iot_name_id: '12461109', iot_map_id: 1, iot_name: 'Master bedroom', }, { id: 4, tag: 7, iot_name_id: '12461111', iot_map_id: 1, iot_name: 'Balcony', }, ]); const mapInfo = new MapInfo({ max_multi_map: 4, max_bak_map: 1, multi_map_count: 2, map_info: [ { mapFlag: 0, add_time: 1753511673, length: 0, name: 'Map 1', bak_maps: [ { mapFlag: 4, add_time: 1753578164, }, ], }, { mapFlag: 1, add_time: 1753579596, length: 0, name: 'Map 2', bak_maps: [ { mapFlag: 5, add_time: 1753578579, }, ], }, ], }); const minLogger = makeLogger(); const homeInfo = new HomeEntity(123, 'My home', roomMap, mapInfo, 0); const { supportedAreas, supportedMaps, roomIndexMap } = getSupportedAreas(homeInfo, minLogger); // console.log(`supportedAreas: ${debugStringify(supportedAreas)}`); // console.log(`supportedMaps: ${debugStringify(supportedMaps)}`); // console.log(`roomIndexMap: ${debugStringify(roomIndexMap)}`); expect(supportedAreas.length).toEqual(8); expect(supportedMaps.length).toEqual(2); }); }); //# sourceMappingURL=getSupportedAreas.test.js.map