68 lines
2.4 KiB
Go
68 lines
2.4 KiB
Go
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))
|
|
}
|
|
}
|