Skip to content

Commit 459b20b

Browse files
committed
test: align memory guards with share-aware lookup
1 parent 63c0dd6 commit 459b20b

1 file changed

Lines changed: 9 additions & 10 deletions

File tree

src/backend/tests/unit/services/authorization/test_route_ceiling_guards.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@
1111
These tests drive the real route handlers with the data services mocked,
1212
verifying two invariants for each newly-guarded action:
1313
14-
1. A viewer-ceiling caller is denied with HTTP 403 *before* the data service is
15-
touched (the deny-only ceiling fires ahead of owner-override and the
16-
``AUTHZ_ENABLED`` gate).
14+
1. A viewer-ceiling caller is denied *before* the mutating data service is
15+
touched (normally with HTTP 403; UUID-private resources may mask it as 404).
1716
2. With no ceiling installed, the owner-override path returns early and the
1817
route proceeds to the underlying service — preserving feature-off behavior.
1918
"""
@@ -281,7 +280,7 @@ async def test_memory_delete_viewer_denied(monkeypatch, owner):
281280
from langflow.api.v1 import memories
282281

283282
delete_spy = AsyncMock(return_value=True)
284-
mb = SimpleNamespace(user_id=owner.id, kb_name="kb")
283+
mb = SimpleNamespace(id=uuid4(), user_id=owner.id, kb_name="kb")
285284
_install_memory_service(monkeypatch, delete=delete_spy, get=AsyncMock(return_value=mb))
286285

287286
set_current_external_access_context(_viewer_ceiling())
@@ -291,7 +290,7 @@ async def test_memory_delete_viewer_denied(monkeypatch, owner):
291290
finally:
292291
set_current_external_access_context(None)
293292

294-
assert exc_info.value.status_code == 403
293+
assert exc_info.value.status_code == 404
295294
delete_spy.assert_not_awaited()
296295

297296

@@ -300,7 +299,7 @@ async def test_memory_flush_viewer_denied(monkeypatch, owner):
300299
from langflow.api.v1 import memories
301300

302301
trigger_spy = AsyncMock(return_value=uuid4())
303-
mb = SimpleNamespace(user_id=owner.id, kb_name="kb")
302+
mb = SimpleNamespace(id=uuid4(), user_id=owner.id, kb_name="kb")
304303
_install_memory_service(monkeypatch, trigger_ingestion=trigger_spy, get=AsyncMock(return_value=mb))
305304

306305
set_current_external_access_context(_viewer_ceiling())
@@ -312,7 +311,7 @@ async def test_memory_flush_viewer_denied(monkeypatch, owner):
312311
finally:
313312
set_current_external_access_context(None)
314313

315-
assert exc_info.value.status_code == 403
314+
assert exc_info.value.status_code == 404
316315
trigger_spy.assert_not_awaited()
317316

318317

@@ -321,7 +320,7 @@ async def test_memory_regenerate_viewer_denied(monkeypatch, owner):
321320
from langflow.api.v1 import memories
322321

323322
regen_spy = AsyncMock(return_value=[])
324-
mb = SimpleNamespace(user_id=owner.id, kb_name="kb")
323+
mb = SimpleNamespace(id=uuid4(), user_id=owner.id, kb_name="kb")
325324
_install_memory_service(monkeypatch, regenerate=regen_spy, get=AsyncMock(return_value=mb))
326325

327326
set_current_external_access_context(_viewer_ceiling())
@@ -331,7 +330,7 @@ async def test_memory_regenerate_viewer_denied(monkeypatch, owner):
331330
finally:
332331
set_current_external_access_context(None)
333332

334-
assert exc_info.value.status_code == 403
333+
assert exc_info.value.status_code == 404
335334
regen_spy.assert_not_awaited()
336335

337336

@@ -341,7 +340,7 @@ async def test_memory_delete_owner_proceeds(monkeypatch, owner):
341340
from langflow.api.v1 import memories
342341

343342
delete_spy = AsyncMock(return_value=True)
344-
mb = SimpleNamespace(user_id=owner.id, kb_name="kb")
343+
mb = SimpleNamespace(id=uuid4(), user_id=owner.id, kb_name="kb")
345344
_install_memory_service(monkeypatch, delete=delete_spy, get=AsyncMock(return_value=mb))
346345

347346
set_current_external_access_context(ExternalAccessContext(provider="openrag", subject="s-1", level="editor"))

0 commit comments

Comments
 (0)