def test_map_attributes_to_retweet_with_hashtag(self): original_author = 'dialelo' original_text = 'I <3 #Python' original_status = create_status(user=original_author, text=original_text) text = 'RT @%s: %s' % (original_author, original_text) entities = { u'user_mentions': [], u'hashtags': [ {u'indices': [5, 11], u'text': u'Python'}, ], u'urls': [], } retweet = create_status(text=text, entities=entities, is_retweet=True, retweeted_status=original_status) # retweet text gets parsed because sometimes is not complete expected_result = [u'I ', u'<3 ', ('hashtag', '#Python')] result = map_attributes(retweet, hashtag='hashtag', attag='attag', url='url') self.assertEqual(result, expected_result)
def test_insert_different_statuses(self): old_status = create_status(created_at=datetime(1988, 12, 19)) new_status = create_status(id=2) self.timeline.add_statuses([old_status, new_status]) self.assertEqual(len(self.timeline), 2)
def test_insert_different_statuses_individually(self): old_status = create_status(created_at=datetime(1988, 12, 19)) new_status = create_status(id=2) # first self.timeline.add_status(old_status) self.assertEqual(len(self.timeline), 1) # second self.timeline.add_status(new_status) self.assertEqual(len(self.timeline), 2)
def test_active_index_does_not_change_when_adding_various_statuses(self): a_status = create_status(id=1) another_status = create_status(id=2) # first self.timeline.add_status(a_status) self.assertEqual(self.timeline.active_index, 0) # second self.timeline.add_status(another_status) self.assertEqual(self.timeline.active_index, 0)
def test_clear(self): old_created_at = datetime(1988, 12, 19) old_status = create_status(created_at=old_created_at) new_created_at = datetime.now() new_status = create_status(id=2, created_at=new_created_at) self.timeline.add_statuses([old_status, new_status]) self.timeline.clear() self.assertEqual(len(self.timeline), 0)
def test_authors_username_retweet(self): user = '******' status = create_status(user=user) retweeter = 'bot' retweet = create_status(user=retweeter, is_retweet=True, retweeted_status=status, author=user) author = retweet.authors_username self.assertEqual(user, author)
def test_statuses_ordered_reversely_by_date(self): old_status = create_status(created_at=datetime(1988, 12, 19)) new_status = create_status(id=2) # ordered self.timeline = Timeline(statuses=[new_status, old_status]) self.assertEqual(self.timeline[0], new_status) self.assertEqual(self.timeline[1], old_status) # unordered self.timeline = Timeline(statuses=[old_status, new_status]) self.assertEqual(self.timeline[0], new_status) self.assertEqual(self.timeline[1], old_status)
def test_unique_statuses_in_timeline(self): status = create_status() self.timeline.add_status(status) self.timeline.add_status(status) self.assertEqual(len(self.timeline), 1)
def test_is_DM(self): # status is NOT a DM status = create_status() self.failIf(is_DM(status)) dm = create_direct_message() self.failUnless(is_DM(dm))
def test_is_DM(self): # status is NOT a DM status = create_status() self.assertFalse(is_DM(status)) dm = create_direct_message() self.assertTrue(is_DM(dm))
def test_authors_username_tweet(self): user = '******' status = create_status(user=user) author = status.authors_username self.assertEqual(user, author)
def test_map_attributes_mention(self): text = '@pypi is down!' entities = { u'user_mentions': [ { u'id': 60840400, u'indices': [0, 5], u'id_str': u'60840400', u'screen_name': u'pypi', u'name': u'PYthon Package Index' }, ], u'hashtags': [], u'urls': [], } tweet = create_status( text=text, entities=entities, ) expected_result = [('attag', u'@pypi'), u' is down!'] result = map_attributes(tweet, hashtag='hashtag', attag='attag', url='url') self.assertEqual(result, expected_result)
def test_thread(self): status = create_status() thread_timeline = self.factory.thread(status) self.assertEqual(thread_timeline.update_function.__name__, 'get_thread',) self.assertEqual(thread_timeline._args[0], status)
def test_unread_count(self): self.assertEqual(self.timeline.unread_count, 0) # a status status = create_status(id=1) self.timeline.add_status(status) self.assertEqual(self.timeline.unread_count, 1) self.timeline.mark_all_as_read() self.assertEqual(self.timeline.unread_count, 0) # new statuses statuses = [create_status(id=id_num) for id_num in xrange(2, 10)] self.timeline.add_statuses(statuses) self.assertEqual(self.timeline.unread_count, len(statuses)) self.timeline.mark_all_as_read() self.assertEqual(self.timeline.unread_count, 0)
def test_dm_recipients_username_tweet(self): # authenticating user user = '******' # given a status in which the author is the authenticated author # must return `None` status = create_status(user=user) recipient_own_tweet = status.dm_recipients_username(user) self.failIf(recipient_own_tweet)
def test_thread_timeline(self): active_timeline = self.controller.timelines.active active_timeline.add_status(create_status()) # make sure that there is at least one status in the active timeline self.assertTrue(active_timeline.active) self.controller.append_thread_timeline() appended_timeline = self.timelines[-1] self.assertTrue(is_thread_timeline(appended_timeline))
def test_mentioned_usernames(self): user = '******' mentioned = ('dialelo', 'mental_floss', '4n_4Wfu1_US3RN4M3') expected_output = list(mentioned) text = "@%s, @%s and @%s" % mentioned status = create_status(user=user, text=text) expected = set(expected_output) mentioned_usernames = status.mentioned_usernames self.assertEqual(expected, set(mentioned_usernames))
def test_hashtags(self): user = '******' hashtags = ('#turses', '#arch_linux', '#I<3Python') expected_output = list(hashtags) text = "%s %s %s" % hashtags status = create_status(user=user, text=text) expected = set(expected_output) mentioned_hashtags = status.hashtags self.assertEqual(expected, set(mentioned_hashtags))
def test_mentioned_for_reply(self): user = '******' mentioned = ('dialelo', 'mental_floss', '4n_4Wfu1_US3RN4M3') expected_output = list(mentioned) expected_output.append(user) expected_output = map(prepend_at, expected_output) text = "@%s, @%s and @%s" % mentioned status = create_status(user=user, text=text) expected = set(filter(prepend_at, expected_output)) mentioned_for_reply = status.mentioned_for_reply self.assertEqual(expected, set(mentioned_for_reply))
def test_timeline(self): timeline = tests.create_timeline() self.assertTrue(isinstance(timeline, Timeline)) self.assertEqual(0, len(timeline.statuses)) status = None with self.assertRaises(Exception): timeline.add(status) status2 = tests.create_another_status() self.assertRaises(ValueError, timeline.remove(status2)) status = tests.create_status() timeline.add(status) self.assertEqual(1, len(timeline.statuses)) timeline.remove(status) self.assertEqual(0, len(timeline.statuses))
def test_map_attributes_mention(self): text = '@pypi is down!' entities = { u'user_mentions': [ {u'id': 60840400, u'indices': [0, 5], u'id_str': u'60840400', u'screen_name': u'pypi', u'name': u'PYthon Package Index'}, ], u'hashtags': [], u'urls': [], } tweet = create_status(text=text, entities=entities,) expected_result = [('attag', u'@pypi'), u' is down!'] result = tweet.map_attributes(hashtag='hashtag', attag='attag', url='url') self.assertEqual(result, expected_result)
def test_map_attributes_with_mentions_hashtags_and_url(self): text = (u'@aaloy QT @Pybonacci: \xa1Qu\xe9 pasada con Vim!' u' #Python #IDE RT @dialelo uso un setup parecido a este: ' u'http://t.co/5lTGNzba') entities = { u'user_mentions': [{ u'id': 60840400, u'indices': [0, 6], u'id_str': u'60840400', u'screen_name': u'aaloy', u'name': u'Antoni Aloy' }, { u'id': 552951614, u'indices': [11, 21], u'id_str': u'552951614', u'screen_name': u'Pybonacci', u'name': u'Pybonacci' }, { u'id': 87322884, u'indices': [60, 68], u'id_str': u'87322884', u'screen_name': u'dialelo', u'name': u'Alejandro G\xf3mez' }], u'hashtags': [{ u'indices': [44, 51], u'text': u'Python' }, { u'indices': [52, 56], u'text': u'IDE' }], u'urls': [{ u'url': u'http://t.co/5lTGNzba', u'indices': [99, 119], u'expanded_url': u'http://sontek.net/turning-vim-into-a-modern-python-ide', u'display_url': u'sontek.net/turning-vim-in\u2026' }] } expected_result = [('attag', u'@aaloy'), u' QT ', ('attag', u'@Pybonacci'), u': \xa1Qu\xe9 pasada con Vim! ', ('hashtag', u'#Python'), u' ', ('hashtag', u'#IDE'), u' RT ', ('attag', u'@dialelo'), u' uso un setup parecido a este: ', ('url', u'sontek.net/turning-vim-in\u2026')] status = create_status(text=text, entities=entities) result = map_attributes(status, hashtag='hashtag', attag='attag', url='url') self.assertEqual(result, expected_result) text = (u'New release of #Turses 0.1.6 with lots of improvements, ' u'ncurses twitter client. https://t.co/cciH85AG via @dialelo') entities = { u'hashtags': [{ u'indices': [15, 22], u'text': u'Turses' }], u'urls': [{ u'display_url': u'github.com/alejandrogomez\u2026', u'expanded_url': u'https://github.com/alejandrogomez/turses', u'indices': [80, 101], u'url': u'https://t.co/cciH85AG' }], u'user_mentions': [{ u'id': 87322884, u'id_str': u'87322884', u'indices': [106, 114], u'name': u'Alejandro G\xf3mez', u'screen_name': u'dialelo' }] } expected_result = [ u'New release of ', ('hashtag', u'#Turses'), (u' 0.1.6 with lots of improvements, ' u'ncurses twitter client. '), ('url', u'github.com/alejandrogomez\u2026'), u' via ', ('attag', u'@dialelo') ] status = create_status(user='******', text=text, entities=entities) result = map_attributes(status, hashtag='hashtag', attag='attag', url='url') self.assertEqual(result, expected_result)
def test_status(self): status = tests.create_status() self.assertTrue(isinstance(status, Status)) self.assertFalse(isinstance(status, User)) self.assertFalse(isinstance(status, DirectMessage)) self.assertEqual(status.__str__(), status.id_str)
def test_active_index_becomes_0_when_adding_first_status(self): status = create_status() self.timeline.add_status(status) self.assertEqual(self.timeline.active_index, 0)
def test_active_index_is_0_when_creating_timeline_with_statuses(self): status = create_status() self.timeline = Timeline(statuses=[status]) self.assertEqual(self.timeline.active_index, 0)
def test_create_with_status(self): # load the defaults status = create_status() StatusWidget(status)
def test_map_attributes_with_mentions_hashtags_and_url(self): text = (u'@aaloy QT @Pybonacci: \xa1Qu\xe9 pasada con Vim!' u' #Python #IDE RT @dialelo uso un setup parecido a este: ' u'http://t.co/5lTGNzba') entities = { u'user_mentions': [ {u'id': 60840400, u'indices': [0, 6], u'id_str': u'60840400', u'screen_name': u'aaloy', u'name': u'Antoni Aloy'}, {u'id': 552951614, u'indices': [11, 21], u'id_str': u'552951614', u'screen_name': u'Pybonacci', u'name': u'Pybonacci'}, {u'id': 87322884, u'indices': [60, 68], u'id_str': u'87322884', u'screen_name': u'dialelo', u'name': u'Alejandro G\xf3mez'} ], u'hashtags': [ {u'indices': [44, 51], u'text': u'Python'}, {u'indices': [52, 56], u'text': u'IDE'} ], u'urls': [ {u'url': u'http://t.co/5lTGNzba', u'indices': [99, 119], u'expanded_url': u'http://sontek.net/turning-vim-into-a-modern-python-ide', u'display_url': u'sontek.net/turning-vim-in\u2026'} ]} expected_result = [('attag', u'@aaloy'), u' QT ', ('attag', u'@Pybonacci'), u': \xa1Qu\xe9 pasada con Vim! ', ('hashtag', u'#Python'), u' ', ('hashtag', u'#IDE'), u' RT ', ('attag', u'@dialelo'), u' uso un setup parecido a este: ', ('url', u'sontek.net/turning-vim-in\u2026')] status = create_status(text=text, entities=entities) result = map_attributes(status, hashtag='hashtag', attag='attag', url='url') self.assertEqual(result, expected_result) text = (u'New release of #Turses 0.1.6 with lots of improvements, ' u'ncurses twitter client. https://t.co/cciH85AG via @dialelo') entities = { u'hashtags': [{u'indices': [15, 22], u'text': u'Turses'}], u'urls': [{u'display_url': u'github.com/alejandrogomez\u2026', u'expanded_url': u'https://github.com/alejandrogomez/turses', u'indices': [80, 101], u'url': u'https://t.co/cciH85AG'}], u'user_mentions': [{u'id': 87322884, u'id_str': u'87322884', u'indices': [106, 114], u'name': u'Alejandro G\xf3mez', u'screen_name': u'dialelo'}] } expected_result = [u'New release of ', ('hashtag', u'#Turses'), (u' 0.1.6 with lots of improvements, ' u'ncurses twitter client. '), ('url', u'github.com/alejandrogomez\u2026'), u' via ', ('attag', u'@dialelo')] status = create_status(user='******', text=text, entities=entities) result = map_attributes(status, hashtag='hashtag', attag='attag', url='url') self.assertEqual(result, expected_result)
def test_create_fav(self): api_twipy = tests.create_api() tweet = tests.create_status() api_twipy.create_fav(tweet_id=tweet.id_str)
def test_create_with_status(self): # load the defaults configuration = Configuration() status = create_status() StatusWidget(status, configuration)
def test_retweet(self): api_twipy = tests.create_api() status = tests.create_status() api_twipy.retweet(tweet_id=status.id_str)