fix emoji sending and tests

My bad. Test data is still being commited, changed it to a sample file instead
This commit is contained in:
Dainius
2017-05-16 14:02:09 +03:00
parent e1e1a0d611
commit b1cccf4173
3 changed files with 72 additions and 54 deletions

2
.gitignore vendored
View File

@@ -25,5 +25,5 @@ develop-eggs
docs/_build/ docs/_build/
# Data for tests # Data for tests
test_data.json my_test_data.json
tests.data tests.data

View File

@@ -264,8 +264,8 @@ class Client(object):
self.payloadDefault = {} self.payloadDefault = {}
self.client_id = hex(int(random()*2147483648))[2:] self.client_id = hex(int(random()*2147483648))[2:]
self.start_time = now() self.start_time = now()
self.uid = int(self._session.cookies['c_user']) self.uid = str(self._session.cookies['c_user'])
self.user_channel = "p_" + str(self.uid) self.user_channel = "p_" + self.uid
self.ttstamp = '' self.ttstamp = ''
r = self._get(BaseURL) r = self._get(BaseURL)
@@ -457,6 +457,22 @@ class Client(object):
self.default_thread_id = None self.default_thread_id = None
self.default_thread_type = None self.default_thread_type = None
def _setThread(self, given_thread_id, given_thread_type):
# type: (str, ThreadType) -> (str, ThreadType)
"""
Checks if thread ID is given, checks if default is set and returns correct values
:raises ValueError: if thread ID is not given and there is no default
:return: tuple of thread ID and thread type
"""
if given_thread_id is None:
if self.default_thread_id is not None:
return self.default_thread_id, self.default_thread_type
else:
raise ValueError('Thread ID is not set.')
else:
return given_thread_id, given_thread_type
def getAllUsers(self): def getAllUsers(self):
""" Gets all users from chat with info included """ """ Gets all users from chat with info included """
@@ -513,14 +529,6 @@ class Client(object):
def _getSendData(self, thread_id=None, thread_type=ThreadType.USER): def _getSendData(self, thread_id=None, thread_type=ThreadType.USER):
"""Returns the data needed to send a request to `SendURL`""" """Returns the data needed to send a request to `SendURL`"""
if thread_id is None:
if self.default_thread_id is not None:
thread_id = self.default_thread_id
thread_type = self.default_thread_type
else:
raise ValueError('Thread ID is not set.')
messageAndOTID = generateOfflineThreadingID() messageAndOTID = generateOfflineThreadingID()
timestamp = now() timestamp = now()
date = datetime.now() date = datetime.now()
@@ -614,44 +622,47 @@ class Client(object):
:param thread_type: specify whether thread_id is user or group chat :param thread_type: specify whether thread_id is user or group chat
:return: a list of message ids of the sent message(s) :return: a list of message ids of the sent message(s)
""" """
data = self._getSendData(thread_id=thread_id, thread_type=thread_type) thread_id, thread_type = self._setThread(thread_id, thread_type)
data = self._getSendData(thread_id, thread_type)
data['action_type'] = 'ma-type:user-generated-message' data['action_type'] = 'ma-type:user-generated-message'
data['body'] = message or '' data['body'] = message or ''
data['has_attachment'] = False data['has_attachment'] = False
data['specific_to_list[0]'] = 'fbid:' + str(thread_id) data['specific_to_list[0]'] = 'fbid:' + thread_id
data['specific_to_list[1]'] = 'fbid:' + str(self.uid) data['specific_to_list[1]'] = 'fbid:' + self.uid
return self._doSendRequest(data) return self._doSendRequest(data)
def sendEmoji(self, emoji=None, size=EmojiSize.SMALL, thread_id=None, thread_type=ThreadType.USER): def sendEmoji(self, emoji=None, size=EmojiSize.SMALL, thread_id=None, thread_type=ThreadType.USER):
# type: (str, EmojiSize, str, ThreadType) -> list # type: (str, EmojiSize, str, ThreadType) -> list
""" """
Sends an emoji to given (or default, if not) thread. Sends an emoji. If emoji and size are not specified a small like is sent.
:param emoji: the chosen emoji to send :param emoji: the chosen emoji to send. If not specified, default thread emoji is sent
:param size: size of emoji to send :param size: size of emoji to send
:param thread_id: user/group chat ID :param thread_id: user/group chat ID
:param thread_type: specify whether thread_id is user or group chat :param thread_type: specify whether thread_id is user or group chat
:return: a list of message ids of the sent message(s) :return: a list of message ids of the sent message(s)
""" """
data = self._getSendData(thread_id=thread_id, thread_type=ThreadType.GROUP) thread_id, thread_type = self._setThread(thread_id, thread_type)
data = self._getSendData(thread_id, thread_type)
data['action_type'] = 'ma-type:user-generated-message'
data['has_attachment'] = False
data['specific_to_list[0]'] = 'fbid:' + thread_id
data['specific_to_list[1]'] = 'fbid:' + self.uid
if emoji: if emoji:
data['action_type'] = 'ma-type:user-generated-message' data['body'] = emoji
data['body'] = emoji or '' data['tags[0]'] = 'hot_emoji_size:' + size.name.lower()
data['has_attachment'] = False
data['specific_to_list[0]'] = 'fbid:' + str(thread_id)
data['specific_to_list[1]'] = 'fbid:' + str(self.uid)
data['tags[0]'] = 'hot_emoji_size:' + size['name']
else: else:
data["sticker_id"] = size['value'] data["sticker_id"] = size.value
return self._doSendRequest(data) return self._doSendRequest(data)
def sendImage(self, image_id, message=None, thread_id=None, thread_type=ThreadType.USER): def sendImage(self, image_id, message=None, thread_id=None, thread_type=ThreadType.USER):
"""Sends an already uploaded image with the id image_id to the thread""" """Sends an already uploaded image with the id image_id to the thread"""
data = self._getSendData(thread_id=thread_id, thread_type=ThreadType.GROUP) thread_id, thread_type = self._setThread(thread_id, thread_type)
data = self._getSendData(thread_id, thread_type)
data['action_type'] = 'ma-type:user-generated-message' data['action_type'] = 'ma-type:user-generated-message'
data['body'] = message or '' data['body'] = message or ''
@@ -723,8 +734,8 @@ class Client(object):
:param thread_id: group chat ID :param thread_id: group chat ID
:return: a list of message ids of the sent message(s) :return: a list of message ids of the sent message(s)
""" """
thread_id, thread_type = self._setThread(thread_id, None)
data = self._getSendData(thread_id=thread_id, thread_type=ThreadType.GROUP) data = self._getSendData(thread_id, ThreadType.GROUP)
data['action_type'] = 'ma-type:log-message' data['action_type'] = 'ma-type:log-message'
data['log_message_type'] = 'log:subscribe' data['log_message_type'] = 'log:subscribe'
@@ -738,6 +749,7 @@ class Client(object):
# type: (str, str) -> bool # type: (str, str) -> bool
""" """
Adds users to given (or default, if not) thread. Adds users to given (or default, if not) thread.
:param user_id: user ID to remove :param user_id: user ID to remove
:param thread_id: group chat ID :param thread_id: group chat ID
:return: true if user was removed :return: true if user was removed
@@ -774,12 +786,13 @@ class Client(object):
def changeGroupTitle(self, title, thread_id=None): def changeGroupTitle(self, title, thread_id=None):
""" """
Change title of a group conversation. Change title of a group conversation.
:param title: new group chat title :param title: new group chat title
:param thread_id: group chat ID :param thread_id: group chat ID
:return: a list of message ids of the sent message(s) :return: a list of message ids of the sent message(s)
""" """
thread_id, thread_type = self._setThread(thread_id, None)
data = self._getSendData(thread_id=thread_id, thread_type=ThreadType.GROUP) data = self._getSendData(thread_id, ThreadType.GROUP)
data['action_type'] = 'ma-type:log-message' data['action_type'] = 'ma-type:log-message'
data['log_message_data[name]'] = title data['log_message_data[name]'] = title
@@ -787,12 +800,16 @@ class Client(object):
return self._doSendRequest(data) return self._doSendRequest(data)
def changeThreadColor(self, new_color, thread_id=None, thread_type=None): def changeThreadColor(self, new_color, thread_id=None):
# type: (ChatColor, str, ThreadType) -> bool # type: (ChatColor, str, ThreadType) -> bool
if thread_id is None and self.def_thread_type == ThreadType.GROUP: """
thread_id = self.def_thread_id Changes thread color to specified color. For more info about color names - see wiki.
elif thread_id is None:
raise ValueError('Default Thread ID is not set.') :param new_color: new color name
:param thread_id: user/group chat ID
:return: True if color was changed
"""
thread_id = self._setThread(thread_id, None)
data = { data = {
"color_choice": new_color.value, "color_choice": new_color.value,
@@ -830,11 +847,7 @@ class Client(object):
:return: a list of messages :return: a list of messages
""" """
if thread_id is None and self.is_def_thread_set: thread_id, thread_type = self._setThread(thread_id, thread_type)
thread_id = self.def_thread_id
thread_type = self.def_thread_type
elif thread_id is None and not self.is_def_thread_set:
raise ValueError('Default Thread ID is not set.')
assert last_n > 0, 'length must be positive integer, got %d' % last_n assert last_n > 0, 'length must be positive integer, got %d' % last_n

View File

@@ -18,7 +18,7 @@ logging.basicConfig(level=logging.INFO)
Tests for fbchat Tests for fbchat
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
To use these tests fill in test_data.json or type this information manually in the terminal prompts. To use these tests copy test_data.json to my_test_data.json or type this information manually in the terminal prompts.
- email: Your (or a test user's) email / phone number - email: Your (or a test user's) email / phone number
- password: Your (or a test user's) password - password: Your (or a test user's) password
@@ -61,9 +61,13 @@ class TestFbchat(unittest.TestCase):
self.assertTrue(client.isLoggedIn()) self.assertTrue(client.isLoggedIn())
def test_setDefaultThreadId(self): def test_setDefaultThreadId(self):
client.setDefaultThreadId(client.uid, ThreadType.USER) client.setDefaultThread(client.uid, ThreadType.USER)
self.assertTrue(client.sendMessage("test_default_recipient")) self.assertTrue(client.sendMessage("test_default_recipient"))
def test_resetDefaultThreadId(self):
client.resetDefaultThread()
self.assertRaises(ValueError, client.sendMessage("should_not_send"))
def test_getAllUsers(self): def test_getAllUsers(self):
users = client.getAllUsers() users = client.getAllUsers()
self.assertGreater(len(users), 0) self.assertGreater(len(users), 0)
@@ -83,12 +87,13 @@ class TestFbchat(unittest.TestCase):
self.assertGreater(u.score, 0) self.assertGreater(u.score, 0)
def test_sendEmoji(self): def test_sendEmoji(self):
self.assertTrue(client.sendEmoji(EmojiSize.SMALL, user_uid, ThreadType.USER)) self.assertTrue(client.sendEmoji(size=EmojiSize.SMALL, thread_id=user_uid, thread_type=ThreadType.USER))
self.assertTrue(client.sendEmoji(EmojiSize.MEDIUM, user_uid, ThreadType.USER)) self.assertTrue(client.sendEmoji(size=EmojiSize.MEDIUM, thread_id=user_uid, thread_type=ThreadType.USER))
self.assertTrue(client.sendEmoji(EmojiSize.LARGE, user_uid, ThreadType.USER)) self.assertTrue(client.sendEmoji("😆", EmojiSize.LARGE, user_uid, ThreadType.USER))
self.assertTrue(client.sendEmoji(EmojiSize.SMALL, group_uid, ThreadType.GROUP))
self.assertTrue(client.sendEmoji(EmojiSize.MEDIUM, group_uid, ThreadType.GROUP)) self.assertTrue(client.sendEmoji(size=EmojiSize.SMALL, thread_id=group_uid, thread_type=ThreadType.GROUP))
self.assertTrue(client.sendEmoji(EmojiSize.LARGE, group_uid, ThreadType.GROUP)) self.assertTrue(client.sendEmoji(size=EmojiSize.MEDIUM, thread_id=group_uid, thread_type=ThreadType.GROUP))
self.assertTrue(client.sendEmoji("😆", EmojiSize.LARGE, group_uid, ThreadType.GROUP))
def test_sendMessage(self): def test_sendMessage(self):
self.assertTrue(client.sendMessage('test_send_user', user_uid, ThreadType.USER)) self.assertTrue(client.sendMessage('test_send_user', user_uid, ThreadType.USER))
@@ -135,22 +140,22 @@ class TestFbchat(unittest.TestCase):
self.assertTrue(client.changeThreadTitle('test_changeThreadTitle', group_uid)) self.assertTrue(client.changeThreadTitle('test_changeThreadTitle', group_uid))
def test_changeThreadColor(self): def test_changeThreadColor(self):
self.assertTrue(client.changeThreadColor(ChatColor.BRILLIANT_ROSE, group_uid, ThreadType.GROUP)) self.assertTrue(client.changeThreadColor(ChatColor.BRILLIANT_ROSE, group_uid))
client.sendMessage(ChatColor.BRILLIANT_ROSE.name, group_uid, ThreadType.GROUP) client.sendMessage(ChatColor.BRILLIANT_ROSE.name, group_uid, ThreadType.GROUP)
time.sleep(1) time.sleep(1)
self.assertTrue(client.changeThreadColor(ChatColor.MESSENGER_BLUE, group_uid, ThreadType.GROUP)) self.assertTrue(client.changeThreadColor(ChatColor.MESSENGER_BLUE, group_uid))
client.sendMessage(ChatColor.MESSENGER_BLUE.name, group_uid, ThreadType.GROUP) client.sendMessage(ChatColor.MESSENGER_BLUE.name, group_uid, ThreadType.GROUP)
time.sleep(2) time.sleep(2)
self.assertTrue(client.changeThreadColor(ChatColor.BRILLIANT_ROSE, user_uid, ThreadType.USER)) self.assertTrue(client.changeThreadColor(ChatColor.BRILLIANT_ROSE, user_uid))
client.sendMessage(ChatColor.BRILLIANT_ROSE.name, user_uid, ThreadType.USER) client.sendMessage(ChatColor.BRILLIANT_ROSE.name, user_uid, ThreadType.USER)
time.sleep(1) time.sleep(1)
self.assertTrue(client.changeThreadColor(ChatColor.MESSENGER_BLUE, user_uid, ThreadType.USER)) self.assertTrue(client.changeThreadColor(ChatColor.MESSENGER_BLUE, user_uid))
client.sendMessage(ChatColor.MESSENGER_BLUE.name, user_uid, ThreadType.USER) client.sendMessage(ChatColor.MESSENGER_BLUE.name, user_uid, ThreadType.USER)
@@ -181,7 +186,7 @@ if __name__ == 'tests':
pass pass
try: try:
with open(path.join(path.dirname(__file__), 'test_data.json'), 'r') as f: with open(path.join(path.dirname(__file__), 'my_test_data.json'), 'r') as f:
json = json.load(f) json = json.load(f)
email = json['email'] email = json['email']
password = json['password'] password = json['password']