feat: eigene Sammlung — „hab ich" mit Quelle
Streaming-Verfügbarkeit beantwortet nur die halbe Frage: manche Filme laufen nirgends mehr, die hat man gekauft und liegen zu Hause — in Jellyfin, Plex, Emby, auf dem NAS oder als Scheibe. Bewusst getrennt vom Feld „wo schaue ich das": das eine sagt, wo ein Titel gerade läuft, und das ändert sich ständig; das andere sagt, was einem gehört, und das bleibt. Auf der Detailseite steht die Sammlung deshalb vor der Verfügbarkeit — was man hat, ist die verlässlichere Antwort. Durchgezogen bis in Filter, Export, CSV-Import und REST-API.
This commit is contained in:
@@ -336,3 +336,55 @@ test("fremde Einträge sind nicht erreichbar", async () => {
|
||||
|
||||
await prisma.user.delete({ where: { id: other.id } });
|
||||
});
|
||||
|
||||
test("Sammlung ist unabhängig von der Streaming-Verfügbarkeit", async () => {
|
||||
const entry = await addToLibrary(userId, movieTitleId, "WATCHLIST");
|
||||
|
||||
const fresh = await prisma.libraryEntry.findUniqueOrThrow({ where: { id: entry.id } });
|
||||
assert.equal(fresh.owned, false, "standardmäßig gehört einem nichts");
|
||||
assert.equal(fresh.ownedSource, null);
|
||||
|
||||
const owned = await updateEntryDetails(userId, entry.id, {
|
||||
owned: true,
|
||||
ownedSource: " Jellyfin ",
|
||||
});
|
||||
assert.equal(owned.owned, true);
|
||||
assert.equal(owned.ownedSource, "Jellyfin", "Rand wird beschnitten");
|
||||
|
||||
// Der Fundort bleibt davon unberührt: das eine sagt, wo es läuft,
|
||||
// das andere, wo es bei mir liegt.
|
||||
assert.equal(
|
||||
owned.whereToWatch,
|
||||
"Disney Plus",
|
||||
"der Vorschlag aus der Verfügbarkeit bleibt davon unberührt",
|
||||
);
|
||||
|
||||
const released = await updateEntryDetails(userId, entry.id, {
|
||||
owned: false,
|
||||
ownedSource: "",
|
||||
});
|
||||
assert.equal(released.owned, false);
|
||||
assert.equal(released.ownedSource, null, "leerer Text wird zu null");
|
||||
});
|
||||
|
||||
test("Sammlung: Filter und Zähler in der Bibliothek", async () => {
|
||||
const movie = await addToLibrary(userId, movieTitleId, "WATCHLIST");
|
||||
const series = await addToLibrary(userId, seriesTitleId, "WATCHING");
|
||||
await updateEntryDetails(userId, movie.id, { owned: true, ownedSource: "Blu-ray" });
|
||||
|
||||
const { getLibrary, getLibraryFacets } = await import("../src/lib/queries");
|
||||
|
||||
const alle = await getLibrary(userId, {});
|
||||
assert.equal(alle.length, 2);
|
||||
|
||||
const nurSammlung = await getLibrary(userId, { owned: true });
|
||||
assert.equal(nurSammlung.length, 1);
|
||||
assert.equal(nurSammlung[0]?.entryId, movie.id);
|
||||
assert.equal(nurSammlung[0]?.ownedSource, "Blu-ray");
|
||||
|
||||
const facets = await getLibraryFacets(userId);
|
||||
assert.equal(facets.owned, 1, "der Zähler der Filterleiste stimmt");
|
||||
assert.equal(facets.counts.ALLE, 2);
|
||||
|
||||
await prisma.libraryEntry.deleteMany({ where: { id: { in: [movie.id, series.id] } } });
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user