@@ -68,6 +68,36 @@ def get_data(self, min_x_field=None, max_x_field=None, period_x_field=None):
6868 assert result ["results" ] == [{"x" : "A" , "y" : 1 }]
6969
7070
71+ async def test_dashboard_widget_binds_request_and_user_context (monkeypatch ):
72+ monkeypatch .setattr ("fastadmin.api.service.get_user_id_from_session_id" , AsyncMock (return_value = 1 ))
73+ current_user = {"id" : 1 , "username" : "admin" }
74+ monkeypatch .setattr (
75+ "fastadmin.api.service.get_admin_model" ,
76+ lambda _model : SimpleNamespace (get_obj = AsyncMock (return_value = current_user )),
77+ )
78+
79+ class SyncWidget :
80+ def __init__ (self ):
81+ self .request = None
82+ self .user = None
83+
84+ def set_context (self , request = None , user = None ):
85+ self .request = request
86+ self .user = user
87+
88+ def get_data (self , min_x_field = None , max_x_field = None , period_x_field = None ):
89+ return {"results" : [{"x" : "A" , "y" : 1 }]}
90+
91+ widget = SyncWidget ()
92+ monkeypatch .setitem (admin_dashboard_widgets , "SyncWidgetContext" , widget )
93+
94+ request = object ()
95+ result = await ApiService ().dashboard_widget ("sid" , "SyncWidgetContext" , request = request )
96+ assert result ["results" ] == [{"x" : "A" , "y" : 1 }]
97+ assert widget .request is request
98+ assert widget .user == current_user
99+
100+
71101async def test_list_skips_excluded_filter_fields (monkeypatch ):
72102 monkeypatch .setattr ("fastadmin.api.service.get_user_id_from_session_id" , AsyncMock (return_value = 1 ))
73103 admin_model = SimpleNamespace (
0 commit comments