Files
silo-server/internal/sections/user_collection_limit_test.go
87159b0a38 feat(collections): add profile-scoped display filters (#191)
* feat(collections): add profile-scoped display filters

* refactor(collections): dedup display-filter helpers per review

Address code-review feedback on the profile-scoped display filters
without changing behavior:

- Widen CompletedHistoryItemMap to accept ProgressCompletionStore and
  drop the duplicate completedHistoryItemMapForProgress copy.
- Extract the duplicated MDBList candidate retry loop into a generic
  collectionutil.FetchMDBListWithFallback helper, used by both the user
  and library collection syncers, and cover it with unit tests.
- Reuse validateOptionalLibraryIDs in HandleUpdateCollection instead of
  an inline positive-ID loop.
- Import the shared COLLECTION_{WATCH,MEDIA}_FILTER_OPTIONS in the
  template config form rather than redefining them locally.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(collections): sanitize query_definition library_ids fallback

readSourceConfigLibraryIDs validated source_config.library_ids (finite,
positive, truncated, deduplicated) but returned the query_definition
fallback raw, so legacy rows could surface zero/negative/duplicate IDs
that the backend now rejects on save. Extract a shared sanitizer and
apply it to both paths.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* refactor(docs): This makes the agents annoying to work with

* Improve playback session handling

* Support collection source order in catalog filters

* fix(collections): address display filter review feedback

* refactor(catalog): remove duplicate collection query params

* Hide episode media scope for collection overlays

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 11:03:38 -04:00

36 lines
819 B
Go

package sections
import (
"reflect"
"testing"
"github.com/Silo-Server/silo-server/internal/models"
)
func TestLimitUserCollectionSectionItemsKeepsFilteredTotal(t *testing.T) {
filtered := []*models.MediaItem{
{ContentID: "visible-a"},
{ContentID: "visible-b"},
{ContentID: "visible-c"},
}
got, total := limitUserCollectionSectionItems(filtered, 2)
if total != 3 {
t.Fatalf("total = %d, want full filtered count", total)
}
if ids := sectionMediaItemIDs(got); !reflect.DeepEqual(ids, []string{"visible-a", "visible-b"}) {
t.Fatalf("limited IDs = %#v, want first visible items", ids)
}
}
func sectionMediaItemIDs(items []*models.MediaItem) []string {
ids := make([]string, 0, len(items))
for _, item := range items {
if item != nil {
ids = append(ids, item.ContentID)
}
}
return ids
}