@@ -101,6 +101,103 @@ def test_get_resource_401(self, mock_http_client_with_response):
101101 self .fga .get_resource (resource_type = "test" , resource_id = "test" )
102102
103103
104+ class TestWarnings :
105+ @pytest .fixture (autouse = True )
106+ def setup (self , sync_http_client_for_test ):
107+ self .http_client = sync_http_client_for_test
108+ self .fga = FGA (http_client = self .http_client )
109+
110+ def test_check_with_warning (self , mock_http_client_with_response ):
111+ mock_response = {
112+ "result" : "authorized" ,
113+ "is_implicit" : True ,
114+ "warnings" : [
115+ {
116+ "code" : "missing_context_keys" ,
117+ "message" : "Missing context keys" ,
118+ "keys" : ["key1" , "key2" ],
119+ }
120+ ],
121+ }
122+ mock_http_client_with_response (self .http_client , mock_response , 200 )
123+
124+ response = self .fga .check (
125+ op = "any_of" ,
126+ checks = [
127+ WarrantCheckInput (
128+ resource_type = "schedule" ,
129+ resource_id = "schedule-A1" ,
130+ relation = "viewer" ,
131+ subject = SubjectInput (resource_type = "user" , resource_id = "user-A" ),
132+ )
133+ ],
134+ )
135+ assert response .dict (exclude_none = True ) == mock_response
136+
137+ def test_query_with_warning (self , mock_http_client_with_response ):
138+ mock_response = {
139+ "object" : "list" ,
140+ "data" : [
141+ {
142+ "resource_type" : "user" ,
143+ "resource_id" : "richard" ,
144+ "relation" : "member" ,
145+ "warrant" : {
146+ "resource_type" : "role" ,
147+ "resource_id" : "developer" ,
148+ "relation" : "member" ,
149+ "subject" : {"resource_type" : "user" , "resource_id" : "richard" },
150+ },
151+ "is_implicit" : True ,
152+ }
153+ ],
154+ "list_metadata" : {},
155+ "warnings" : [
156+ {
157+ "code" : "missing_context_keys" ,
158+ "message" : "Missing context keys" ,
159+ "keys" : ["key1" , "key2" ],
160+ }
161+ ],
162+ }
163+
164+ mock_http_client_with_response (self .http_client , mock_response , 200 )
165+
166+ response = self .fga .query (
167+ q = "select member of type user for permission:view-docs" ,
168+ order = "asc" ,
169+ warrant_token = "warrant_token" ,
170+ )
171+ assert response .dict (exclude_none = True ) == mock_response
172+
173+ def test_check_with_generic_warning (self , mock_http_client_with_response ):
174+ mock_response = {
175+ "result" : "authorized" ,
176+ "is_implicit" : True ,
177+ "warnings" : [
178+ {
179+ "code" : "generic" ,
180+ "message" : "Generic warning" ,
181+ }
182+ ],
183+ }
184+
185+ mock_http_client_with_response (self .http_client , mock_response , 200 )
186+
187+ response = self .fga .check (
188+ op = "any_of" ,
189+ checks = [
190+ WarrantCheckInput (
191+ resource_type = "schedule" ,
192+ resource_id = "schedule-A1" ,
193+ relation = "viewer" ,
194+ subject = SubjectInput (resource_type = "user" , resource_id = "user-A" ),
195+ )
196+ ],
197+ )
198+ assert response .dict (exclude_none = True ) == mock_response
199+
200+
104201class TestFGA :
105202 @pytest .fixture (autouse = True )
106203 def setup (self , sync_http_client_for_test ):
0 commit comments