Files
memby/server/internal/api/search_discover_test.go
T

68 lines
2.4 KiB
Go
Raw Normal View History

package api
import (
"encoding/json"
"testing"
)
func TestDiscoveryQueryNormalisationCollapsesTheSameQuestion(t *testing.T) {
same := []string{"Disclosure Day", "disclosure day", " disclosure day ", "DISCLOSURE Day"}
want := normaliseDiscoveryQuery(same[0])
for _, query := range same[1:] {
if got := normaliseDiscoveryQuery(query); got != want {
t.Fatalf("%q normalised to %q, want %q", query, got, want)
}
}
if normaliseDiscoveryQuery("disclosure") == want {
t.Fatal("a materially different query must not share a cache key")
}
}
func TestDiscoveryFloorIsCountedInRunes(t *testing.T) {
for _, query := range []string{"", " ", "d", "di", " di "} {
if discoveryQueryEligible(query) {
t.Fatalf("%q should not reach Sonarr or Radarr", query)
}
}
for _, query := range []string{"dis", "disclosure day", "君の名は"} {
if !discoveryQueryEligible(query) {
t.Fatalf("%q should be eligible for discovery", query)
}
}
}
func TestRequestableIsStampedOnTheWayOut(t *testing.T) {
items := []json.RawMessage{
searchExternalItem("Disclosure Day", 2027, "", "Movie", "radarr", RequestStatusRequestable, "12", "", false),
searchExternalItem("Something Tracked", 2020, "", "Series", "sonarr", RequestStatusProcessing, "34", "", false),
}
for _, canRequest := range []bool{true, false} {
decorated := applyRequestable(append([]json.RawMessage{}, items...), canRequest)
var requestable, processing map[string]any
if err := json.Unmarshal(decorated[0], &requestable); err != nil {
t.Fatal(err)
}
if err := json.Unmarshal(decorated[1], &processing); err != nil {
t.Fatal(err)
}
if requestable["MembyRequestable"] != canRequest {
t.Fatalf("canRequest=%v: requestable candidate got %v", canRequest, requestable["MembyRequestable"])
}
// Only a title nothing has and nobody has asked for offers the button, whatever
// this viewer is permitted to do.
if processing["MembyRequestable"] != false {
t.Fatalf("canRequest=%v: a tracked title must never offer Request", canRequest)
}
}
}
func TestDiscoveryMergeCollapsesOnProviderID(t *testing.T) {
merged := []json.RawMessage{}
one := searchExternalItem("Disclosure Day", 2027, "", "Movie", "radarr", RequestStatusRequestable, "12", "", false)
merged = mergeSearchRaw(merged, one, 20)
merged = mergeSearchRaw(merged, one, 20)
if len(merged) != 1 {
t.Fatalf("one title reported twice produced %d cards", len(merged))
}
}