File tree Expand file tree Collapse file tree 2 files changed +37
-4
lines changed Expand file tree Collapse file tree 2 files changed +37
-4
lines changed Original file line number Diff line number Diff line change @@ -816,10 +816,17 @@ def _handle_fcm_error(self, error):
816816 except ValueError :
817817 pass
818818
819- error_details = data .get ('error' , {})
820- code = _MessagingService .FCM_ERROR_CODES .get (
821- error_details .get ('status' ), _MessagingService .UNKNOWN_ERROR )
822- msg = error_details .get ('message' )
819+ error_dict = data .get ('error' , {})
820+ server_code = None
821+ for detail in error_dict .get ('details' , []):
822+ if detail .get ('@type' ) == 'type.googleapis.com/google.firebase.fcm.v1.FcmErrorCode' :
823+ server_code = detail .get ('errorCode' )
824+ break
825+ if not server_code :
826+ server_code = error_dict .get ('status' )
827+ code = _MessagingService .FCM_ERROR_CODES .get (server_code , _MessagingService .UNKNOWN_ERROR )
828+
829+ msg = error_dict .get ('message' )
823830 if not msg :
824831 msg = 'Unexpected HTTP response with status: {0}; body: {1}' .format (
825832 error .response .status_code , error .response .content .decode ())
Original file line number Diff line number Diff line change @@ -914,6 +914,32 @@ def test_send_canonical_error_code(self, status):
914914 body = {'message' : messaging ._MessagingService .JSON_ENCODER .default (msg )}
915915 assert json .loads (recorder [0 ].body .decode ()) == body
916916
917+ @pytest .mark .parametrize ('status' , HTTP_ERRORS )
918+ def test_send_fcm_error_code (self , status ):
919+ payload = json .dumps ({
920+ 'error' : {
921+ 'status' : 'INVALID_ARGUMENT' ,
922+ 'message' : 'test error' ,
923+ 'details' : [
924+ {
925+ '@type' : 'type.googleapis.com/google.firebase.fcm.v1.FcmErrorCode' ,
926+ 'errorCode' : 'UNREGISTERED' ,
927+ },
928+ ],
929+ }
930+ })
931+ _ , recorder = self ._instrument_messaging_service (status = status , payload = payload )
932+ msg = messaging .Message (topic = 'foo' )
933+ with pytest .raises (messaging .ApiCallError ) as excinfo :
934+ messaging .send (msg )
935+ assert str (excinfo .value ) == 'test error'
936+ assert str (excinfo .value .code ) == 'registration-token-not-registered'
937+ assert len (recorder ) == 1
938+ assert recorder [0 ].method == 'POST'
939+ assert recorder [0 ].url == self ._get_url ('explicit-project-id' )
940+ body = {'message' : messaging ._MessagingService .JSON_ENCODER .default (msg )}
941+ assert json .loads (recorder [0 ].body .decode ()) == body
942+
917943
918944class TestTopicManagement (object ):
919945
You can’t perform that action at this time.
0 commit comments