import { expect, tap } from '@git.zone/tstest/tapbundle'; import { NanoleafMapper } from '../../ts/integrations/nanoleaf/index.js'; const snapshot = { controllerInfo: { name: 'Living Room Shapes', serialNo: 'NL123ABC', manufacturer: 'Nanoleaf', model: 'NL42', firmwareVersion: '9.6.1', }, state: { on: { value: true }, brightness: { value: 80, min: 0, max: 100 }, hue: { value: 220, min: 0, max: 360 }, sat: { value: 65, min: 0, max: 100 }, ct: { value: 4000, min: 1200, max: 6500 }, colorMode: 'effect', }, effects: { select: 'Northern Lights', effectsList: ['Northern Lights', '*Solid*'], }, panelLayout: { layout: { numPanels: 2, sideLength: 150, positionData: [ { panelId: 101, x: 0, y: 0, o: 0, shapeType: 7 }, { panelId: 102, x: 150, y: 0, o: 60, shapeType: 7 }, ], }, }, rhythm: { rhythmConnected: true, rhythmActive: false, }, }; tap.test('maps Nanoleaf controller and panels to canonical devices', async () => { const devices = NanoleafMapper.toDevices(snapshot); expect(devices[0].id).toEqual('nanoleaf.controller.nl123abc'); expect(devices[0].features.some((featureArg) => featureArg.id === 'panel_count')).toBeTrue(); expect(devices.some((deviceArg) => deviceArg.id === 'nanoleaf.panel.nl123abc.101')).toBeTrue(); }); tap.test('maps Nanoleaf light state, sensors, select, and button entities', async () => { const entities = NanoleafMapper.toEntities(snapshot); const light = entities.find((entityArg) => entityArg.id === 'light.living_room_shapes'); const effect = entities.find((entityArg) => entityArg.id === 'select.living_room_shapes_effect'); expect(light?.state).toEqual('on'); expect(light?.attributes?.brightness).toEqual(80); expect(effect?.state).toEqual('Northern Lights'); expect(entities.some((entityArg) => entityArg.id === 'button.living_room_shapes_identify')).toBeTrue(); expect(entities.some((entityArg) => entityArg.id === 'sensor.living_room_shapes_panel_count')).toBeTrue(); expect(entities.some((entityArg) => entityArg.id === 'sensor.living_room_shapes_panel_101')).toBeTrue(); }); export default tap.start();