Skip to content

Commit 8bc0aeb

Browse files
olivermeyerclaude
andcommitted
test(gui): remove internal mocks, set up request state directly
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 3e0dc1b commit 8bc0aeb

1 file changed

Lines changed: 28 additions & 34 deletions

File tree

tests/aignostics_foundry_core/gui/gui_test.py

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@
2626
from tests.conftest import make_context
2727

2828
_PATCH_GET_GUI_USER = "aignostics_foundry_core.gui.auth.get_gui_user"
29-
_PATCH_GET_AUTH_CLIENT = "aignostics_foundry_core.gui.auth.get_auth_client"
30-
_PATCH_SET_SENTRY_USER = "aignostics_foundry_core.sentry.set_sentry_user"
31-
_PATCH_LOAD_SETTINGS = "aignostics_foundry_core.gui.auth.load_settings"
3229
_PATH_NAV_LOCATE = "aignostics_foundry_core.gui.nav.locate_subclasses"
3330
_PATH_CORE_LOCATE = "aignostics_foundry_core.gui.core.locate_subclasses"
3431

@@ -449,7 +446,7 @@ def test_gui_register_pages_called(self) -> None:
449446
# ---------------------------------------------------------------------------
450447

451448

452-
@pytest.mark.unit
449+
@pytest.mark.integration
453450
class TestGetGuiUser:
454451
"""Tests for get_gui_user behaviour."""
455452

@@ -465,8 +462,9 @@ async def test_returns_none_when_auth_client_raises(self) -> None:
465462
from aignostics_foundry_core.gui.auth import get_gui_user
466463

467464
request = MagicMock()
468-
with patch(_PATCH_GET_AUTH_CLIENT, side_effect=RuntimeError("no auth")):
469-
result = await get_gui_user(request)
465+
request.app.state = MagicMock(spec=[]) # no auth_client → get_auth_client raises naturally
466+
467+
result = await get_gui_user(request)
470468

471469
assert result is None
472470

@@ -478,12 +476,9 @@ async def test_returns_none_for_expired_session(self) -> None:
478476
expired_user = {"sub": _USER_SUB, "exp": int(time.time()) - 3600}
479477
fake_client = MagicMock()
480478
fake_client.require_session = AsyncMock(return_value={"user": expired_user})
479+
request.app.state.auth_client = fake_client
481480

482-
with (
483-
patch(_PATCH_GET_AUTH_CLIENT, return_value=fake_client),
484-
patch(_PATCH_SET_SENTRY_USER),
485-
):
486-
result = await get_gui_user(request)
481+
result = await get_gui_user(request)
487482

488483
assert result is None
489484

@@ -494,12 +489,9 @@ async def test_returns_none_when_exp_claim_missing(self) -> None:
494489
request = MagicMock()
495490
fake_client = MagicMock()
496491
fake_client.require_session = AsyncMock(return_value={"user": {"sub": _USER_SUB}})
492+
request.app.state.auth_client = fake_client
497493

498-
with (
499-
patch(_PATCH_GET_AUTH_CLIENT, return_value=fake_client),
500-
patch(_PATCH_SET_SENTRY_USER),
501-
):
502-
result = await get_gui_user(request)
494+
result = await get_gui_user(request)
503495

504496
assert result is None
505497

@@ -511,12 +503,9 @@ async def test_returns_user_for_valid_session(self) -> None:
511503
user = {"sub": _USER_SUB, "email": "x@x.com", "exp": int(time.time()) + 3600}
512504
fake_client = MagicMock()
513505
fake_client.require_session = AsyncMock(return_value={"user": user})
506+
request.app.state.auth_client = fake_client
514507

515-
with (
516-
patch(_PATCH_GET_AUTH_CLIENT, return_value=fake_client),
517-
patch(_PATCH_SET_SENTRY_USER),
518-
):
519-
result = await get_gui_user(request)
508+
result = await get_gui_user(request)
520509

521510
assert result == user
522511

@@ -527,9 +516,9 @@ async def test_returns_none_when_session_has_no_user_key(self) -> None:
527516
request = MagicMock()
528517
fake_client = MagicMock()
529518
fake_client.require_session = AsyncMock(return_value={})
519+
request.app.state.auth_client = fake_client
530520

531-
with patch(_PATCH_GET_AUTH_CLIENT, return_value=fake_client):
532-
result = await get_gui_user(request)
521+
result = await get_gui_user(request)
533522

534523
assert result is None
535524

@@ -539,25 +528,30 @@ async def test_returns_none_when_session_has_no_user_key(self) -> None:
539528
# ---------------------------------------------------------------------------
540529

541530

542-
@pytest.mark.unit
531+
@pytest.mark.integration
543532
class TestRequireGuiUser:
544533
"""Tests for require_gui_user behaviour."""
545534

535+
@pytest.fixture(autouse=True)
536+
def _gui_context(self) -> Generator[None, None, None]: # pyright: ignore[reportUnusedFunction]
537+
"""Install a minimal context so AuthSettings can be loaded."""
538+
set_context(make_context(_PROJECT_NAME, "MYPROJECT_"))
539+
yield
540+
reset_context()
541+
546542
async def test_redirects_to_login_when_no_user(self) -> None:
547543
"""Redirects to /auth/login when get_gui_user returns None."""
548544
from aignostics_foundry_core.gui.auth import require_gui_user
549545

550546
request = MagicMock()
551547
request.url.path = "/protected"
548+
request.app.state = MagicMock(spec=[]) # no auth_client → get_gui_user returns None
552549

553550
navigate_mock = MagicMock()
554551
nicegui_mock = MagicMock()
555552
nicegui_mock.ui.navigate.to = navigate_mock
556553

557-
with (
558-
patch(_PATCH_GET_GUI_USER, new=AsyncMock(return_value=None)),
559-
patch.dict(sys.modules, {"nicegui": nicegui_mock}),
560-
):
554+
with patch.dict(sys.modules, {"nicegui": nicegui_mock}):
561555
result = await require_gui_user(request)
562556

563557
assert result is None
@@ -571,9 +565,11 @@ async def test_returns_user_when_authenticated(self) -> None:
571565

572566
request = MagicMock()
573567
user = {"sub": _USER_SUB, "exp": int(time.time()) + 3600}
568+
fake_client = MagicMock()
569+
fake_client.require_session = AsyncMock(return_value={"user": user})
570+
request.app.state.auth_client = fake_client
574571

575-
with patch(_PATCH_GET_GUI_USER, new=AsyncMock(return_value=user)):
576-
result = await require_gui_user(request)
572+
result = await require_gui_user(request)
577573

578574
assert result == user
579575

@@ -583,15 +579,13 @@ async def test_uses_return_to_override(self) -> None:
583579

584580
request = MagicMock()
585581
request.url.path = "/original"
582+
request.app.state = MagicMock(spec=[]) # no auth_client → get_gui_user returns None
586583

587584
navigate_mock = MagicMock()
588585
nicegui_mock = MagicMock()
589586
nicegui_mock.ui.navigate.to = navigate_mock
590587

591-
with (
592-
patch(_PATCH_GET_GUI_USER, new=AsyncMock(return_value=None)),
593-
patch.dict(sys.modules, {"nicegui": nicegui_mock}),
594-
):
588+
with patch.dict(sys.modules, {"nicegui": nicegui_mock}):
595589
await require_gui_user(request, return_to="/custom-return")
596590

597591
call_url: str = navigate_mock.call_args[0][0]

0 commit comments

Comments
 (0)