test(plex): cover create write-through + the 409->nameTaken mapping (F-F)

Backend: create-collection happy path (write-through + editable) and the
create resync-failure 422 (honest reconcile detail), mirroring the rename/remove
tests. Frontend: extract notifyCollectionEditError (the 409->nameTaken vs
generic-fallback mapping that was inline in the New-collection create()) and
unit-test it; wire create() through it.
This commit is contained in:
2026-08-23 08:08:34 +02:00
parent 7caa2636e4
commit 81b7660232
4 changed files with 106 additions and 16 deletions
@@ -303,6 +303,54 @@ def test_remove_item_writes_through_to_plex(db, monkeypatch):
app.dependency_overrides.clear()
def _resync_create(db, plex, lib, rk):
"""Create-path resync stub: the new rating_key has no local row yet, so materialize it."""
col = PlexCollection(rating_key=rk, library_id=lib.id, title="Fresh Coll", child_count=1)
db.add(col)
db.flush()
return col
def test_create_writes_through_to_plex(db, monkeypatch):
_lib, user = _seed_editable(db)
stub = _CollStub()
client = _admin_client(db, user, monkeypatch, stub, resync=_resync_create)
try:
r = client.post(
"/api/plex/collections",
json={"library": "1", "title": "Fresh Coll", "item_rating_key": "m1"},
)
assert r.status_code == 200, r.text
assert "create_collection" in stub.calls
body = r.json()
assert body["id"] == "NEW" # the stub's new ratingKey
assert body["editable"] is True # create marks the new collection editable
finally:
app.dependency_overrides.clear()
def test_create_resync_failure_is_422(db, monkeypatch):
# The collection was created in Plex (wrote=True) but the follow-up resync read failed → 422 with
# the honest "reconcile on the next sync" detail, not a false "write failed".
_lib, user = _seed_editable(db)
stub = _CollStub()
def _boom(db_, plex, lib_, rk):
raise PlexError("read failed")
client = _admin_client(db, user, monkeypatch, stub, resync=_boom)
try:
r = client.post(
"/api/plex/collections",
json={"library": "1", "title": "Fresh Coll", "item_rating_key": "m1"},
)
assert r.status_code == 422, r.text
assert "reconcile" in r.json()["detail"].lower()
assert "create_collection" in stub.calls
finally:
app.dependency_overrides.clear()
def test_mutation_failure_returns_422_write_failed(db, monkeypatch):
# The Plex mutation itself raised → the write never landed → 422 "Plex write failed", and resync
# is never reached (stub.calls holds only the mutating call).