47 lines
1.5 KiB
Go
47 lines
1.5 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// The TV decodes this into GatewayRelated. Both field names and the empty-value encoding
|
|
// are part of the contract: kotlinx.serialization would reject a null where it expects a
|
|
// list, so a title with no reasons must still send `[]`.
|
|
func TestRelatedResponseWireShape(t *testing.T) {
|
|
raw, err := json.Marshal(relatedResponse{
|
|
Reasons: nonNilStrings(nil),
|
|
Items: nonNilRaws(nil),
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("marshal: %v", err)
|
|
}
|
|
if got := string(raw); got != `{"reasons":[],"items":[]}` {
|
|
t.Fatalf("empty response encoded as %s", got)
|
|
}
|
|
|
|
raw, err = json.Marshal(relatedResponse{
|
|
Reasons: []string{"Because you watch Thriller"},
|
|
Items: []json.RawMessage{json.RawMessage(`{"Id":"1","Name":"Sicario"}`)},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("marshal: %v", err)
|
|
}
|
|
// Items are Emby's item JSON forwarded verbatim, exactly as every other row is.
|
|
if !strings.Contains(string(raw), `"items":[{"Id":"1","Name":"Sicario"}]`) {
|
|
t.Fatalf("item payload was not forwarded verbatim: %s", raw)
|
|
}
|
|
}
|
|
|
|
func TestRelatedFieldsAskEmbyForStudios(t *testing.T) {
|
|
// Why() names the studio a viewer keeps returning to, and Emby omits Studios unless
|
|
// the request asks for it.
|
|
if !strings.Contains(fieldsRelated, "Studios") {
|
|
t.Fatalf("fieldsRelated must request Studios, got %q", fieldsRelated)
|
|
}
|
|
if !strings.Contains(fieldsRelated, "People") {
|
|
t.Fatalf("fieldsRelated must request People, got %q", fieldsRelated)
|
|
}
|
|
}
|