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):
816
816
except ValueError :
817
817
pass
818
818
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' )
823
830
if not msg :
824
831
msg = 'Unexpected HTTP response with status: {0}; body: {1}' .format (
825
832
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):
914
914
body = {'message' : messaging ._MessagingService .JSON_ENCODER .default (msg )}
915
915
assert json .loads (recorder [0 ].body .decode ()) == body
916
916
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
+
917
943
918
944
class TestTopicManagement (object ):
919
945
You can’t perform that action at this time.
0 commit comments