0.3.22 - PINs
This commit is contained in:
@@ -136,6 +136,85 @@ func TestClientCapabilitiesAreNormalizedAndBounded(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateSectionDefinitionsRejectsDuplicateIDs(t *testing.T) {
|
||||
raw := json.RawMessage(`[
|
||||
{"id":"a","type":"favorites","title":"Favourites","enabled":true,"position":10,"dataSource":"emby.favourites","component":"mediaRow","destination":"home"},
|
||||
{"id":"a","type":"latest","title":"Recently Added","enabled":true,"position":20,"dataSource":"emby.latest","component":"mediaRow","destination":"home"}
|
||||
]`)
|
||||
if err := validateSectionDefinitions("home.sectionDefinitions", raw); err == nil {
|
||||
t.Fatal("duplicate row id was accepted")
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateSectionDefinitionsRejectsDuplicatePositions(t *testing.T) {
|
||||
raw := json.RawMessage(`[
|
||||
{"id":"a","type":"favorites","title":"Favourites","enabled":true,"position":10,"dataSource":"emby.favourites","component":"mediaRow","destination":"home"},
|
||||
{"id":"b","type":"latest","title":"Recently Added","enabled":true,"position":10,"dataSource":"emby.latest","component":"mediaRow","destination":"home"}
|
||||
]`)
|
||||
if err := validateSectionDefinitions("home.sectionDefinitions", raw); err == nil {
|
||||
t.Fatal("duplicate row position was accepted")
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateSectionDefinitionsRejectsMissingTitle(t *testing.T) {
|
||||
raw := json.RawMessage(`[{"id":"a","type":"favorites","title":"","enabled":true,"position":10,"dataSource":"emby.favourites","component":"mediaRow","destination":"home"}]`)
|
||||
if err := validateSectionDefinitions("home.sectionDefinitions", raw); err == nil {
|
||||
t.Fatal("missing title was accepted")
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateSectionDefinitionsRejectsInvalidMaxItems(t *testing.T) {
|
||||
raw := json.RawMessage(`[{"id":"a","type":"favorites","title":"Favourites","enabled":true,"position":10,"maxItems":500,"dataSource":"emby.favourites","component":"mediaRow","destination":"home"}]`)
|
||||
if err := validateSectionDefinitions("home.sectionDefinitions", raw); err == nil {
|
||||
t.Fatal("out-of-range maxItems was accepted")
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateSectionDefinitionsRejectsUnsupportedRowPageCombination(t *testing.T) {
|
||||
// Genres is a Movies/TV row type; it has no business on Home.
|
||||
raw := json.RawMessage(`[{"id":"a","type":"genres","title":"Genres","enabled":true,"position":10,"dataSource":"emby.genres","component":"genreBrowser","destination":"movies"}]`)
|
||||
if err := validateSectionDefinitions("home.sectionDefinitions", raw); err == nil {
|
||||
t.Fatal("genres row was accepted on the Home page")
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateSectionDefinitionsRejectsIncompatibleDataSource(t *testing.T) {
|
||||
raw := json.RawMessage(`[{"id":"a","type":"favorites","title":"Favourites","enabled":true,"position":10,"dataSource":"emby.latest","component":"mediaRow","destination":"home"}]`)
|
||||
if err := validateSectionDefinitions("home.sectionDefinitions", raw); err == nil {
|
||||
t.Fatal("mismatched data source was accepted")
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateSectionDefinitionsRejectsDestinationMismatchedToPage(t *testing.T) {
|
||||
raw := json.RawMessage(`[{"id":"a","type":"genres","title":"Genres","enabled":true,"position":10,"dataSource":"emby.genres","component":"genreBrowser","destination":"tv"}]`)
|
||||
if err := validateSectionDefinitions("movies.sectionDefinitions", raw); err == nil {
|
||||
t.Fatal("genres row on Movies pointed at TV was accepted")
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateSectionDefinitionsAcceptsTheDefaultDocument(t *testing.T) {
|
||||
for key, definitions := range map[string][]config.RemoteSectionDefinition{
|
||||
"home.sectionDefinitions": config.DefaultRemoteConfig().Home.SectionDefinitions,
|
||||
"movies.sectionDefinitions": config.DefaultRemoteConfig().Movies.SectionDefinitions,
|
||||
"tv.sectionDefinitions": config.DefaultRemoteConfig().TV.SectionDefinitions,
|
||||
} {
|
||||
raw, err := json.Marshal(definitions)
|
||||
if err != nil {
|
||||
t.Fatalf("marshal %s: %v", key, err)
|
||||
}
|
||||
if err := validateSectionDefinitions(key, raw); err != nil {
|
||||
t.Fatalf("default %s was rejected: %v", key, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateSectionDefinitionsAllowsCustomRowsOutsideTheCatalogue(t *testing.T) {
|
||||
raw := json.RawMessage(`[{"id":"a","type":"custom","title":"Something new","enabled":true,"position":10,"dataSource":"gateway.whatever","component":"mediaRow","destination":"home"}]`)
|
||||
if err := validateSectionDefinitions("home.sectionDefinitions", raw); err != nil {
|
||||
t.Fatalf("custom row was rejected: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFeatureAdminRejectsUnknownFlagsBeforeWriting(t *testing.T) {
|
||||
server := testServer(config.Config{})
|
||||
req := httptest.NewRequest(http.MethodPost, "/admin/api/features",
|
||||
|
||||
Reference in New Issue
Block a user