def test_ping_fcm_unsupported(self):
        client = MobileClient(parent=ndb.Key(Account, 'user_id'),
                              user_id='user_id',
                              messaging_id='token',
                              client_type=-1,
                              device_uuid='uuid',
                              display_name='Phone')

        with self.assertRaises(Exception,
                               msg='Unsupported FCM client type: -1'):
            TBANSHelper._ping_client(client)
    def test_ping_fcm_fail(self):
        client = MobileClient(parent=ndb.Key(Account, 'user_id'),
                              user_id='user_id',
                              messaging_id='token',
                              client_type=ClientType.OS_IOS,
                              device_uuid='uuid',
                              display_name='Phone')

        batch_response = messaging.BatchResponse(
            [messaging.SendResponse(None, FirebaseError(500, 'testing'))])
        with patch.object(FCMRequest, 'send',
                          return_value=batch_response) as mock_send:
            success = TBANSHelper._ping_client(client)
            mock_send.assert_called_once()
            self.assertFalse(success)
    def test_ping_android(self):
        client_type = ClientType.OS_ANDROID
        messaging_id = 'token'

        client = MobileClient(parent=ndb.Key(Account, 'user_id'),
                              user_id='user_id',
                              messaging_id=messaging_id,
                              client_type=client_type,
                              device_uuid='uuid',
                              display_name='Phone')

        from notifications.ping import PingNotification
        with patch.object(PingNotification, 'send') as mock_send:
            success = TBANSHelper._ping_client(client)
            mock_send.assert_called_once_with({client_type: [messaging_id]})
            self.assertTrue(success)