Files
silo-server/internal/watchsync/scrobble_identity_test.go
Quick104 166c5ef32f Add reliable Jellycompat watch scrobbling
- Forward start, pause, resume, and stop events with stable media identities
- Persist and retry terminal scrobbles across teardown and restart paths
- Reject ambiguous playback-report route matches
2026-07-22 21:41:05 -04:00

45 lines
1.4 KiB
Go

package watchsync
import (
"context"
"testing"
"github.com/Silo-Server/silo-server/internal/userstore"
)
type fixedScrobbleIdentityResolver struct {
identity userstore.WatchIdentity
}
func (r fixedScrobbleIdentityResolver) ResolveHistoryIdentity(context.Context, string) userstore.WatchIdentity {
return r.identity
}
func TestResolveScrobbleIdentityEpisode(t *testing.T) {
season := 2
episode := 7
event := ResolveScrobbleIdentity(context.Background(), fixedScrobbleIdentityResolver{
identity: userstore.WatchIdentity{
StableType: "episode",
ProviderIDs: map[string]string{"tmdb": "episode-tmdb"},
SeriesProviderIDs: map[string]string{"tvdb": "series-tvdb"},
Season: &season,
Episode: &episode,
},
}, ScrobbleEvent{MediaItemID: "episode-1"})
if event.Kind != "episode" || event.TMDBID != "episode-tmdb" || event.SeriesTVDBID != "series-tvdb" {
t.Fatalf("resolved identity = %+v", event)
}
if event.SeasonNumber != season || event.EpisodeNumber != episode {
t.Fatalf("resolved episode numbers = S%dE%d, want S%dE%d", event.SeasonNumber, event.EpisodeNumber, season, episode)
}
}
func TestResolveScrobbleIdentityDefaultsUnknownItemToMovie(t *testing.T) {
event := ResolveScrobbleIdentity(context.Background(), nil, ScrobbleEvent{MediaItemID: "movie-1"})
if event.Kind != "movie" {
t.Fatalf("kind = %q, want movie", event.Kind)
}
}