Expose session/last-used user and device IP on player rows. Filter retrieve_player_list by users, merge GET /Devices when include_offline is set, and resolve spoken names to HA media_player entities via player_links (device_id or IP). PlayNow still requires a live session.
42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package server
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"git.i3omb.com/gronod/emby-mcp/internal/config"
|
|
"git.i3omb.com/gronod/emby-mcp/internal/emby"
|
|
)
|
|
|
|
func TestResolvePlayerByAliasAndIP(t *testing.T) {
|
|
links := []config.PlayerLink{{
|
|
Names: []string{"lounge", "living room"},
|
|
HAEntity: "media_player.lounge_tv",
|
|
HASource: "Emby",
|
|
DeviceIP: "192.168.0.20",
|
|
EmbyDeviceID: "dev-lounge",
|
|
}}
|
|
live := []emby.PlayerSession{{
|
|
SessionID: "sess-1",
|
|
DeviceID: "dev-lounge",
|
|
DeviceName: "Lounge Shield",
|
|
DeviceIPAddress: "192.168.0.20",
|
|
UserName: "Gordon",
|
|
Online: true,
|
|
}}
|
|
got, ok := resolvePlayer("lounge", links, live)
|
|
if !ok || got.SessionID != "sess-1" || got.HAEntity != "media_player.lounge_tv" || got.WakeRequired {
|
|
t.Fatalf("%+v ok=%v", got, ok)
|
|
}
|
|
offline, ok := resolvePlayer("living room", links, nil)
|
|
if !ok || !offline.WakeRequired || offline.SessionID != "" {
|
|
t.Fatalf("offline %+v ok=%v", offline, ok)
|
|
}
|
|
}
|
|
|
|
func TestResolvePlayerUnknown(t *testing.T) {
|
|
_, ok := resolvePlayer("attic", nil, nil)
|
|
if ok {
|
|
t.Fatal("expected miss")
|
|
}
|
|
}
|