@@ -264,16 +264,63 @@ def test_verify_token_with_consume_network_error(self, mocker):
264264 mocker .patch ("jwt.PyJWKClient.get_signing_key_from_jwt" , return_value = PyJWK (signing_key ))
265265 mocker .patch ("jwt.get_unverified_header" , return_value = JWT_PAYLOAD_SAMPLE .get ("headers" ))
266266 mock_http_client = mocker .patch ("firebase_admin._http_client.JsonHttpClient" )
267- mock_http_client .return_value .body .side_effect = requests .exceptions .RequestException ("Network error" )
268-
267+ mock_http_client .return_value .body .side_effect = requests .exceptions .RequestException (
268+ "Network error" )
269+
270+ # Use a fresh app to ensure _AppCheckService is re-initialized with the mock
271+ cred = testutils .MockCredential ()
272+ app = firebase_admin .initialize_app (
273+ cred , {'projectId' : PROJECT_ID }, name = 'test_consume_error' )
274+
275+ try :
276+ with pytest .raises (exceptions .UnknownError ) as excinfo :
277+ app_check .verify_token ("encoded" , app , consume = True )
278+ assert str (excinfo .value ) == (
279+ "Unknown error while making a remote service call: Network error" )
280+ finally :
281+ firebase_admin .delete_app (app )
282+
283+ def test_verify_token_with_consume_non_dict_response (self , mocker ):
284+ """Test verify_token with consume=True handles non-dict response."""
285+ mocker .patch ("jwt.decode" , return_value = JWT_PAYLOAD_SAMPLE )
286+ mocker .patch ("jwt.PyJWKClient.get_signing_key_from_jwt" , return_value = PyJWK (signing_key ))
287+ mocker .patch ("jwt.get_unverified_header" , return_value = JWT_PAYLOAD_SAMPLE .get ("headers" ))
288+ mock_http_client = mocker .patch ("firebase_admin._http_client.JsonHttpClient" )
289+ mock_http_client .return_value .body .return_value = ["not" , "a" , "dict" ]
290+
291+ # Use a fresh app to ensure _AppCheckService is re-initialized with the mock
292+ cred = testutils .MockCredential ()
293+ app = firebase_admin .initialize_app (
294+ cred , {'projectId' : PROJECT_ID }, name = 'test_consume_non_dict' )
295+
296+ try :
297+ with pytest .raises (exceptions .UnknownError ) as excinfo :
298+ app_check .verify_token ("encoded" , app , consume = True )
299+ assert str (excinfo .value ) == (
300+ 'Unexpected response from App Check service. '
301+ 'Expected a JSON object, but got list.' )
302+ finally :
303+ firebase_admin .delete_app (app )
304+
305+ def test_verify_token_with_consume_malformed_json (self , mocker ):
306+ """Test verify_token with consume=True handles malformed JSON response."""
307+ mocker .patch ("jwt.decode" , return_value = JWT_PAYLOAD_SAMPLE )
308+ mocker .patch ("jwt.PyJWKClient.get_signing_key_from_jwt" , return_value = PyJWK (signing_key ))
309+ mocker .patch ("jwt.get_unverified_header" , return_value = JWT_PAYLOAD_SAMPLE .get ("headers" ))
310+ mock_http_client = mocker .patch ("firebase_admin._http_client.JsonHttpClient" )
311+ mock_http_client .return_value .body .side_effect = ValueError ("Malformed JSON" )
312+
269313 # Use a fresh app to ensure _AppCheckService is re-initialized with the mock
270314 cred = testutils .MockCredential ()
271- app = firebase_admin .initialize_app (cred , {'projectId' : PROJECT_ID }, name = 'test_consume_error' )
315+ app = firebase_admin .initialize_app (
316+ cred , {'projectId' : PROJECT_ID }, name = 'test_consume_malformed_json' )
272317
273318 try :
274319 with pytest .raises (exceptions .UnknownError ) as excinfo :
275320 app_check .verify_token ("encoded" , app , consume = True )
276- assert str (excinfo .value ) == "Unknown error while making a remote service call: Network error"
321+ assert str (excinfo .value ) == (
322+ 'Unexpected response from App Check service. '
323+ 'Error: Malformed JSON' )
277324 finally :
278325 firebase_admin .delete_app (app )
279326
0 commit comments