88 lines
3.0 KiB
TypeScript
88 lines
3.0 KiB
TypeScript
|
|
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
||
|
|
import { SqueezeboxMapper, type ISqueezeboxSnapshot } from '../../ts/integrations/squeezebox/index.js';
|
||
|
|
|
||
|
|
const snapshot: ISqueezeboxSnapshot = {
|
||
|
|
server: {
|
||
|
|
id: 'lms-1',
|
||
|
|
uuid: 'server-uuid-1',
|
||
|
|
name: 'Home LMS',
|
||
|
|
host: '192.168.1.40',
|
||
|
|
version: '8.5.0',
|
||
|
|
playerCount: 2,
|
||
|
|
stats: { totalSongs: 1200, totalAlbums: 100 },
|
||
|
|
},
|
||
|
|
players: [{
|
||
|
|
playerId: '00:04:20:aa:bb:01',
|
||
|
|
name: 'Living Room',
|
||
|
|
model: 'Squeezebox Radio',
|
||
|
|
firmware: '8.5.0',
|
||
|
|
connected: true,
|
||
|
|
power: true,
|
||
|
|
mode: 'play',
|
||
|
|
volume: 45,
|
||
|
|
muting: false,
|
||
|
|
repeat: 'playlist',
|
||
|
|
shuffle: 'song',
|
||
|
|
title: 'Example Track',
|
||
|
|
artist: 'Example Artist',
|
||
|
|
album: 'Example Album',
|
||
|
|
url: 'http://radio.example/stream.mp3',
|
||
|
|
duration: 180,
|
||
|
|
time: 30,
|
||
|
|
syncGroup: ['00:04:20:aa:bb:02'],
|
||
|
|
}, {
|
||
|
|
playerId: '00:04:20:aa:bb:02',
|
||
|
|
name: 'Kitchen',
|
||
|
|
model: 'Squeezebox Touch',
|
||
|
|
connected: true,
|
||
|
|
power: true,
|
||
|
|
mode: 'pause',
|
||
|
|
volume: 25,
|
||
|
|
muting: true,
|
||
|
|
syncGroup: ['00:04:20:aa:bb:01'],
|
||
|
|
}],
|
||
|
|
favorites: [{
|
||
|
|
id: 'fav-1',
|
||
|
|
name: 'Jazz Radio',
|
||
|
|
url: 'http://radio.example/stream.mp3',
|
||
|
|
type: 'audio',
|
||
|
|
playable: true,
|
||
|
|
}],
|
||
|
|
syncGroups: [{
|
||
|
|
id: 'sync-main',
|
||
|
|
name: 'Downstairs',
|
||
|
|
leaderPlayerId: '00:04:20:aa:bb:01',
|
||
|
|
playerIds: ['00:04:20:aa:bb:01', '00:04:20:aa:bb:02'],
|
||
|
|
}],
|
||
|
|
online: true,
|
||
|
|
source: 'snapshot',
|
||
|
|
};
|
||
|
|
|
||
|
|
tap.test('maps Squeezebox server and players to devices', async () => {
|
||
|
|
const devices = SqueezeboxMapper.toDevices(snapshot);
|
||
|
|
const server = devices.find((deviceArg) => deviceArg.id === 'squeezebox.server.server_uuid_1');
|
||
|
|
const player = devices.find((deviceArg) => deviceArg.id === 'squeezebox.player.00_04_20_aa_bb_01');
|
||
|
|
expect(server?.state.some((stateArg) => stateArg.featureId === 'favorites' && stateArg.value === 1)).toBeTrue();
|
||
|
|
expect(player?.manufacturer).toEqual('Logitech');
|
||
|
|
expect(player?.state.some((stateArg) => stateArg.featureId === 'source' && stateArg.value === 'Jazz Radio')).toBeTrue();
|
||
|
|
});
|
||
|
|
|
||
|
|
tap.test('maps Squeezebox media entities favorites and sync groups', async () => {
|
||
|
|
const entities = SqueezeboxMapper.toEntities(snapshot);
|
||
|
|
const player = entities.find((entityArg) => entityArg.id === 'media_player.living_room');
|
||
|
|
const favorites = entities.find((entityArg) => entityArg.id === 'sensor.home_lms_favorites');
|
||
|
|
const syncGroups = entities.find((entityArg) => entityArg.id === 'sensor.home_lms_sync_groups');
|
||
|
|
const media = entities.find((entityArg) => entityArg.id === 'sensor.living_room_squeezebox_media');
|
||
|
|
|
||
|
|
expect(player?.state).toEqual('playing');
|
||
|
|
expect(player?.attributes?.volumeLevel).toEqual(0.45);
|
||
|
|
expect(player?.attributes?.source).toEqual('Jazz Radio');
|
||
|
|
expect(player?.attributes?.groupMembers).toEqual(['media_player.living_room', 'media_player.kitchen']);
|
||
|
|
expect(player?.attributes?.repeat).toEqual('all');
|
||
|
|
expect(favorites?.state).toEqual(1);
|
||
|
|
expect(syncGroups?.state).toEqual(1);
|
||
|
|
expect(media?.state).toEqual('Example Track');
|
||
|
|
});
|
||
|
|
|
||
|
|
export default tap.start();
|