diff --git a/app/routers/library.py b/app/routers/library.py index d8aad24..59fd7da 100644 --- a/app/routers/library.py +++ b/app/routers/library.py @@ -224,12 +224,12 @@ async def library_shared( params: list = [] if dir in ("all", "made"): conds.append("p.share_mode != 'private'") + if dir in ("all", "made") and made_ids: + conds.append(f"p.id IN ({','.join('?' for _ in made_ids)})") + params.extend(made_ids) if dir in ("all", "received") and recv_ids: conds.append(f"p.id IN ({','.join('?' for _ in recv_ids)})") params.extend(recv_ids) - if dir == "made" and made_ids: - conds.append(f"p.id IN ({','.join('?' for _ in made_ids)})") - params.extend(made_ids) if dir == "received" and not recv_ids: return {"items": []} diff --git a/tests/test_sharing.py b/tests/test_sharing.py index 053be53..043f693 100644 --- a/tests/test_sharing.py +++ b/tests/test_sharing.py @@ -259,6 +259,17 @@ def test_library_shared_dir_all_is_union(client): assert a in ids +def test_library_shared_dir_all_includes_private_shared_made(client): + _auth(client, user_id=1, login="owner") + with get_conn_ctx() as conn: + a = _make_page_with(conn, "Private Shared A") + client.post(f"/api/pages/{a}/share", json={"user_id": 2, "permission": "comment"}) + + all_items = client.get("/api/library/shared").json()["items"] + ids = [it["id"] for it in all_items] + assert a in ids, "privately-shared page must appear in 'all' (union made+received)" + + def test_library_shared_invalid_dir_falls_back_to_all(client): _auth(client, user_id=1, login="owner") with get_conn_ctx() as conn: