mirror of
https://github.com/truewhile/MeBox.git
synced 2026-10-01 03:56:38 +08:00
82 lines
2.1 KiB
Go
82 lines
2.1 KiB
Go
package service
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/ShukeBta/MMTL/internal/model"
|
|
)
|
|
|
|
func TestMergedRemoteUserData(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
raw any
|
|
history model.PlaybackHistory
|
|
position int64
|
|
played bool
|
|
percent float64
|
|
count int
|
|
preserve any
|
|
}{
|
|
{
|
|
name: "in-progress preserves remote fields",
|
|
raw: map[string]any{
|
|
"PlayCount": 2,
|
|
"Custom": "remote-value",
|
|
},
|
|
history: model.PlaybackHistory{PositionMs: 25_000, DurationMs: 100_000},
|
|
position: 250_000_000,
|
|
played: false,
|
|
percent: 25,
|
|
count: 2,
|
|
preserve: "remote-value",
|
|
},
|
|
{
|
|
name: "completed ensures a play count",
|
|
raw: map[string]any{"PlayCount": 0},
|
|
history: model.PlaybackHistory{PositionMs: 100_000, DurationMs: 100_000, Completed: true},
|
|
position: 1_000_000_000,
|
|
played: true,
|
|
percent: 100,
|
|
count: 1,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
out := mergedRemoteUserData(tt.raw, &tt.history)
|
|
if got := out["PlaybackPositionTicks"]; got != tt.position {
|
|
t.Fatalf("PlaybackPositionTicks = %#v, want %d", got, tt.position)
|
|
}
|
|
if got := out["Played"]; got != tt.played {
|
|
t.Fatalf("Played = %#v, want %t", got, tt.played)
|
|
}
|
|
if got := out["PlayedPercentage"]; got != tt.percent {
|
|
t.Fatalf("PlayedPercentage = %#v, want %v", got, tt.percent)
|
|
}
|
|
if got := out["PlayCount"]; got != tt.count {
|
|
t.Fatalf("PlayCount = %#v, want %d", got, tt.count)
|
|
}
|
|
if tt.preserve != nil && out["Custom"] != tt.preserve {
|
|
t.Fatalf("Custom = %#v, want %#v", out["Custom"], tt.preserve)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestRemoteItemMapsFindsEnvelopeItems(t *testing.T) {
|
|
remoteID := EncodeEmbyRemoteID("mount-1", "item-1")
|
|
payload := map[string]any{
|
|
"Items": []any{
|
|
map[string]any{"Id": remoteID},
|
|
map[string]any{"Id": "local-item"},
|
|
},
|
|
}
|
|
items := remoteItemMaps(payload)
|
|
if len(items) != 2 {
|
|
t.Fatalf("item count = %d, want 2", len(items))
|
|
}
|
|
if items[0]["Id"] != remoteID {
|
|
t.Fatalf("first item ID = %#v, want %q", items[0]["Id"], remoteID)
|
|
}
|
|
}
|