test(plex): a collection's editable flag and the mirror's reads, committed through HTTP
The editable endpoint had no route test: dropping its commit left every test green.
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
"""The Plex pages' local reads and the one local-only write, through HTTP.
|
||||
|
||||
The service tests (`test_plex_service.py`) hold what each read and write does; these hold that the
|
||||
route calls it, commits — the `db` fixture fails a test whose handler left a write uncommitted —
|
||||
and what a client sees back. None of these reach Plex. Needs the DB.
|
||||
"""
|
||||
|
||||
from app.plex.models import PlexCollection, PlexItem, PlexLibrary
|
||||
|
||||
|
||||
def _seed(db):
|
||||
lib = PlexLibrary(plex_key="1", title="Movies", kind="movie", enabled=True)
|
||||
db.add(lib)
|
||||
db.flush()
|
||||
db.add_all(
|
||||
[
|
||||
PlexItem(rating_key="m1", library_id=lib.id, kind="movie", title="M"),
|
||||
PlexCollection(rating_key="c1", library_id=lib.id, title="Mine"),
|
||||
PlexCollection(rating_key="c2", library_id=lib.id, title="IMDb Top 250"),
|
||||
]
|
||||
)
|
||||
db.commit()
|
||||
|
||||
|
||||
def test_an_admin_marks_a_collection_editable_and_it_stays(db, make_user, as_user):
|
||||
_seed(db)
|
||||
admin = as_user(make_user(role="admin"))
|
||||
r = admin.post("/api/plex/collections/c1/editable", json={"editable": True})
|
||||
assert r.status_code == 200, r.text
|
||||
assert (r.json()["editable"], r.json()["can_edit"]) == (True, True)
|
||||
db.expire_all()
|
||||
listed = admin.get("/api/plex/collections").json()["collections"]
|
||||
assert {c["id"]: c["editable"] for c in listed} == {"c1": True, "c2": False}
|
||||
# An auto-list is never editable.
|
||||
r = admin.post("/api/plex/collections/c2/editable", json={"editable": True})
|
||||
assert r.status_code == 400
|
||||
assert (
|
||||
admin.post("/api/plex/collections/c9/editable", json={"editable": True}).status_code == 404
|
||||
)
|
||||
|
||||
|
||||
def test_the_library_list_and_a_movie_page_read_from_the_mirror(
|
||||
db, make_user, as_user, monkeypatch
|
||||
):
|
||||
from app.routes.plex import detail
|
||||
|
||||
_seed(db)
|
||||
client = as_user(make_user())
|
||||
libs = client.get("/api/plex/libraries").json()["libraries"]
|
||||
assert [(lib["key"], lib["count"]) for lib in libs] == [("1", 1)]
|
||||
|
||||
class _NoPlex:
|
||||
def __init__(self, db):
|
||||
from app.plex.client import PlexNotConfigured
|
||||
|
||||
raise PlexNotConfigured()
|
||||
|
||||
monkeypatch.setattr(detail, "PlexClient", _NoPlex)
|
||||
body = client.get("/api/plex/item/m1").json()
|
||||
assert (body["id"], body["library"], body["status"], body["collections"]) == (
|
||||
"m1",
|
||||
"1",
|
||||
"new",
|
||||
[],
|
||||
)
|
||||
assert client.get("/api/plex/item/nope").json()["detail"]["reason"] == "plex_item"
|
||||
Reference in New Issue
Block a user