Fixed tests, and improved send()

This commit is contained in:
Mads Marquart
2017-05-05 20:12:17 +02:00
parent 2280d31cbb
commit 64243c20b2
2 changed files with 32 additions and 15 deletions

View File

@@ -451,6 +451,8 @@ class Client(object):
:param like: size of the like sticker you want to send :param like: size of the like sticker you want to send
:param image_id: id for the image to send, gotten from the UploadURL :param image_id: id for the image to send, gotten from the UploadURL
:param add_user_ids: a list of user ids to add to a chat :param add_user_ids: a list of user ids to add to a chat
returns a list of message ids of the sent message(s)
""" """
if self.is_def_recipient_set: if self.is_def_recipient_set:
@@ -521,11 +523,10 @@ class Client(object):
data["sticker_id"] = sticker data["sticker_id"] = sticker
r = self._post(SendURL, data) r = self._post(SendURL, data)
if r.ok: if not r.ok:
log.info('Message sent.') log.warning('Error when sending message: Got {} response'.format(r.status_code))
else: return False
log.info('Message not sent.')
if isinstance(r._content, str) is False: if isinstance(r._content, str) is False:
r._content = r._content.decode(facebookEncoding) r._content = r._content.decode(facebookEncoding)
@@ -534,10 +535,18 @@ class Client(object):
# 'errorDescription' is in the users own language! # 'errorDescription' is in the users own language!
log.warning('Error #{} when sending message: {}'.format(j['error'], j['errorDescription'])) log.warning('Error #{} when sending message: {}'.format(j['error'], j['errorDescription']))
return False return False
message_ids = []
try:
message_ids += [action['message_id'] for action in j['payload']['actions'] if 'message_id' in action]
except KeyError as e:
log.warning('Error when sending message: No message ids could be found')
return False
log.info('Message sent.')
log.debug("Sending {}".format(r)) log.debug("Sending {}".format(r))
log.debug("With data {}".format(data)) log.debug("With data {}".format(data))
return True return message_ids
def sendRemoteImage(self, recipient_id=None, message=None, is_user=True, image=''): def sendRemoteImage(self, recipient_id=None, message=None, is_user=True, image=''):
@@ -826,10 +835,10 @@ class Client(object):
fbid = m['delta']['messageMetadata']['actorFbId'] fbid = m['delta']['messageMetadata']['actorFbId']
self.on_message_new(mid, fbid, message, m, recipient_id, thread_type) self.on_message_new(mid, fbid, message, m, recipient_id, thread_type)
elif m['type'] in ['jewel_requests_add']: elif m['type'] in ['jewel_requests_add']:
from_id = m['from'] from_id = m['from']
self.on_friend_request(from_id) self.on_friend_request(from_id)
else: else:
log.debug("Unknown type {}".format(m)) self.on_unknown_type(m)
except Exception as e: except Exception as e:
# ex_type, ex, tb = sys.exc_info() # ex_type, ex, tb = sys.exc_info()
self.on_message_error(sys.exc_info(), m) self.on_message_error(sys.exc_info(), m)
@@ -1021,3 +1030,9 @@ class Client(object):
def on_qprimer(self, timestamp): def on_qprimer(self, timestamp):
pass pass
def on_unknown_type(self, m):
"""subclass Client and override this method to add custom behavior on event"""
log.debug("Unknown type {}".format(m))

View File

@@ -14,17 +14,19 @@ fbchat.log.setLevel(100)
""" """
Tests for fbchat Tests for fbchat
~~~~~~~~~~~~~~~~
To use these tests, put: To use these tests, put:
- email - email
- password - password
- a group_uid - a group_uid
- a user_uid whom will be kicked from that group and then added again - a user_uid (the user will be kicked from the group and then added again)
(seperated these by a newline) in a file called `tests.data`, or type them manually in the terminal prompts (seperated these by a newline) in a file called `tests.data`, or type them manually in the terminal prompts
Please remember to test both python v. 2.7 and python v. 3.6! Please remember to test both python v. 2.7 and python v. 3.6!
If you've made any changes to the 2FA functionality, test it with a 2FA enabled account If you've made any changes to the 2FA functionality, test it with a 2FA enabled account
If you only want to execute specific tests, pass the function names in the commandline
""" """
@@ -56,21 +58,21 @@ class TestFbchat(unittest.TestCase):
def test_getAllUsers(self): def test_getAllUsers(self):
users = client.getAllUsers() users = client.getAllUsers()
self.assertTrue(len(users) > 0) self.assertGreater(len(users), 0)
def test_getUsers(self): def test_getUsers(self):
users = client.getUsers("Mark Zuckerberg") users = client.getUsers("Mark Zuckerberg")
self.assertTrue(len(users) > 0) self.assertGreater(len(users), 0)
u = users[0] u = users[0]
# Test if values are set correctly # Test if values are set correctly
self.assertTrue(isinstance(u.uid, int)) self.assertIsInstance(u.uid, int)
self.assertEquals(u.type, 'user') self.assertEquals(u.type, 'user')
self.assertEquals(u.photo[:4], 'http') self.assertEquals(u.photo[:4], 'http')
self.assertEquals(u.url[:4], 'http') self.assertEquals(u.url[:4], 'http')
self.assertEquals(u.name, 'Mark Zuckerberg') self.assertEquals(u.name, 'Mark Zuckerberg')
self.assertTrue(u.score > 0) self.assertGreater(u.score, 0)
def test_send_likes(self): def test_send_likes(self):
self.assertTrue(client.send(client.uid, like='s')) self.assertTrue(client.send(client.uid, like='s'))
@@ -147,7 +149,7 @@ if __name__ == '__main__':
try: try:
with open(path.join(path.dirname(__file__), 'tests.data'), 'r') as f: with open(path.join(path.dirname(__file__), 'tests.data'), 'r') as f:
content = f.readlines() content = f.readlines()
content = [x.strip() for x in content] content = [x.strip() for x in content if len(x.strip()) != 0]
email = content[0] email = content[0]
password = content[1] password = content[1]
group_uid = content[2] group_uid = content[2]