Add native media and network integrations
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
||||
import { DenonavrMapper, type IDenonavrSnapshot } from '../../ts/integrations/denonavr/index.js';
|
||||
|
||||
const snapshot: IDenonavrSnapshot = {
|
||||
receiverInfo: {
|
||||
host: '192.168.1.50',
|
||||
port: 80,
|
||||
name: 'Living Room AVR',
|
||||
manufacturer: 'Denon',
|
||||
modelName: 'AVR-X1700H',
|
||||
serialNumber: 'ABC12345',
|
||||
receiverType: 'avr-x',
|
||||
},
|
||||
zones: [{
|
||||
zone: 'Main',
|
||||
name: 'Main Zone',
|
||||
power: 'ON',
|
||||
state: 'playing',
|
||||
volumeDb: -35,
|
||||
muted: false,
|
||||
source: 'Media Server',
|
||||
sourceList: ['TV', 'Media Server', 'Bluetooth'],
|
||||
soundMode: 'DOLBY DIGITAL',
|
||||
soundModeRaw: 'DOLBY AUDIO - DOLBY DIGITAL',
|
||||
dynamicEq: true,
|
||||
ecoMode: 'Auto',
|
||||
media: {
|
||||
title: 'Track One',
|
||||
artist: 'Artist One',
|
||||
album: 'Album One',
|
||||
contentType: 'music',
|
||||
},
|
||||
available: true,
|
||||
}, {
|
||||
zone: 'Zone2',
|
||||
name: 'Patio',
|
||||
power: 'STANDBY',
|
||||
state: 'off',
|
||||
volumeLevel: 0.25,
|
||||
muted: true,
|
||||
source: 'Tuner',
|
||||
available: true,
|
||||
}],
|
||||
};
|
||||
|
||||
tap.test('maps Denon AVR snapshots to canonical devices', async () => {
|
||||
const devices = DenonavrMapper.toDevices(snapshot);
|
||||
expect(devices[0].id).toEqual('denonavr.receiver.abc12345');
|
||||
expect(devices[0].manufacturer).toEqual('Denon');
|
||||
expect(devices[0].state.some((stateArg) => stateArg.featureId === 'main_source' && stateArg.value === 'Media Server')).toBeTrue();
|
||||
expect(devices[0].state.some((stateArg) => stateArg.featureId === 'zone2_power' && stateArg.value === 'off')).toBeTrue();
|
||||
});
|
||||
|
||||
tap.test('maps Denon AVR zones to media, sensor, and switch entities', async () => {
|
||||
const entities = DenonavrMapper.toEntities(snapshot);
|
||||
const media = entities.find((entityArg) => entityArg.id === 'media_player.living_room_avr');
|
||||
const source = entities.find((entityArg) => entityArg.id === 'sensor.living_room_avr_source');
|
||||
const mute = entities.find((entityArg) => entityArg.id === 'switch.living_room_avr_zone2_mute');
|
||||
const dynamicEq = entities.find((entityArg) => entityArg.id === 'switch.living_room_avr_dynamic_eq');
|
||||
|
||||
expect(media?.platform).toEqual('media_player');
|
||||
expect(media?.state).toEqual('playing');
|
||||
expect(media?.attributes?.volumeLevel).toEqual(0.45);
|
||||
expect(source?.state).toEqual('Media Server');
|
||||
expect(mute?.state).toEqual(true);
|
||||
expect(dynamicEq?.state).toEqual(true);
|
||||
});
|
||||
|
||||
export default tap.start();
|
||||
Reference in New Issue
Block a user