Server changes/Sonarr
This commit is contained in:
@@ -27,6 +27,31 @@ type fakeSource struct {
|
||||
similarSeeds []string
|
||||
}
|
||||
|
||||
type fakeCuratedLibrary struct {
|
||||
byGenre map[string][]json.RawMessage
|
||||
}
|
||||
|
||||
func (f *fakeCuratedLibrary) LibraryCandidates(
|
||||
_ context.Context,
|
||||
_ []string,
|
||||
_ int,
|
||||
) ([]json.RawMessage, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (f *fakeCuratedLibrary) CuratedCandidates(
|
||||
_ context.Context,
|
||||
_ []string,
|
||||
genres, studios []string,
|
||||
_ int,
|
||||
) ([]json.RawMessage, error) {
|
||||
key := strings.Join(genres, "|")
|
||||
if len(studios) > 0 {
|
||||
key = "studio:" + studios[0]
|
||||
}
|
||||
return f.byGenre[key], nil
|
||||
}
|
||||
|
||||
func (f *fakeSource) Items(_ context.Context, _ emby.Credentials, params url.Values) (*emby.ItemsResult, error) {
|
||||
f.mu.Lock()
|
||||
defer f.mu.Unlock()
|
||||
@@ -191,6 +216,67 @@ func TestBuildRowsReturnsNothingForAUserWithNoHistory(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestCuratedShowRowsAndItemsAreOrderedByViewingAffinity(t *testing.T) {
|
||||
source := &fakeSource{
|
||||
itemsByFilter: map[string][]json.RawMessage{
|
||||
"IsPlayed": {
|
||||
raw("history", "Funny History", "Episode", "Comedy"),
|
||||
},
|
||||
},
|
||||
similar: map[string][]json.RawMessage{},
|
||||
}
|
||||
engine := testEngine(source)
|
||||
engine.Library = &fakeCuratedLibrary{byGenre: map[string][]json.RawMessage{
|
||||
"Comedy": {
|
||||
raw("comedy-low", "Lower Rated Match", "Series", "Comedy"),
|
||||
raw("comedy-high", "Higher Rated Match", "Series", "Comedy"),
|
||||
},
|
||||
"Drama": {
|
||||
raw("drama-1", "Drama One", "Series", "Drama"),
|
||||
raw("drama-2", "Drama Two", "Series", "Drama"),
|
||||
},
|
||||
}}
|
||||
engine.CuratedRows = []CuratedRow{
|
||||
{ID: "drama", Title: "Drama TV Shows", Kind: "shows", ItemTypes: []string{"Series"}, Genres: []string{"Drama"}},
|
||||
{ID: "comedy", Title: "Comedy TV Shows", Kind: "shows", ItemTypes: []string{"Series"}, Genres: []string{"Comedy"}},
|
||||
}
|
||||
|
||||
rows, err := engine.BuildRows(context.Background(), emby.Credentials{UserID: "u1"})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(rows) != 2 {
|
||||
t.Fatalf("expected two curated rows, got %v", rowTitles(rows))
|
||||
}
|
||||
if rows[0].ID != "comedy" || rows[1].ID != "drama" {
|
||||
t.Fatalf("user's comedy affinity should order shelves, got %v", rowTitles(rows))
|
||||
}
|
||||
if rows[0].Kind != "shows" {
|
||||
t.Fatalf("curated TV shelf kind = %q", rows[0].Kind)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCuratedRowsFallBackToRatingForANewUser(t *testing.T) {
|
||||
source := &fakeSource{itemsByFilter: map[string][]json.RawMessage{}}
|
||||
engine := testEngine(source)
|
||||
engine.MinRowItems = 1
|
||||
engine.Library = &fakeCuratedLibrary{byGenre: map[string][]json.RawMessage{
|
||||
"Drama": {raw("drama", "Strong Drama", "Series", "Drama")},
|
||||
}}
|
||||
engine.CuratedRows = []CuratedRow{{
|
||||
ID: "drama", Title: "Drama TV Shows", Kind: "shows",
|
||||
ItemTypes: []string{"Series"}, Genres: []string{"Drama"},
|
||||
}}
|
||||
|
||||
rows, err := engine.BuildRows(context.Background(), emby.Credentials{UserID: "new"})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(rows) != 1 || rows[0].ID != "drama" {
|
||||
t.Fatalf("new profiles should receive quality-ranked curated rows: %+v", rows)
|
||||
}
|
||||
}
|
||||
|
||||
// A failing similarity lookup is one dead row, not a dead home screen.
|
||||
func TestBuildRowsSurvivesASimilarLookupFailure(t *testing.T) {
|
||||
source := &fakeSource{
|
||||
|
||||
Reference in New Issue
Block a user