2626from 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
453450class 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
543532class 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