a39b891a3d
Would definitely be better to have an account with custom tests, but oh well, not yet.
160 lines
5.3 KiB
Python
160 lines
5.3 KiB
Python
from base import BaseTestCase, Tweet, get_timeline_tweet
|
|
from parameterized import parameterized
|
|
|
|
# image = tweet + 'div.attachments.media-body > div > div > a > div > img'
|
|
# self.assert_true(self.get_image_url(image).split('/')[0] == 'http')
|
|
|
|
timeline = [
|
|
[1, 'Test account', 'mobile_test', '10 Aug 2016', '763483571793174528',
|
|
'.'],
|
|
|
|
[3, 'Test account', 'mobile_test', '3 Mar 2016', '705522133443571712',
|
|
'LIVE on #Periscope pscp.tv/w/aadiTzF6dkVOTXZSbX…'],
|
|
|
|
[6, 'mobile test 2', 'mobile_test_2', '1 Oct 2014', '517449200045277184',
|
|
'Testing. One two three four. Test.']
|
|
]
|
|
|
|
status = [
|
|
[20, 'jack 🌍🌏🌎', 'jack', '21 Mar 2006', 'just setting up my twttr'],
|
|
[134849778302464000, 'The Twoffice', 'TheTwoffice', '10 Nov 2011', 'test'],
|
|
[105685475985080322, 'The Twoffice', 'TheTwoffice', '22 Aug 2011', 'regular tweet'],
|
|
[572593440719912960, 'Test account', 'mobile_test', '2 Mar 2015', 'testing test']
|
|
]
|
|
|
|
invalid = [
|
|
['mobile_test/status/120938109238'],
|
|
['TheTwoffice/status/8931928312']
|
|
]
|
|
|
|
multiline = [
|
|
[1102965189392113665, 'piIIowhugs',
|
|
"""
|
|
summoning circle, hope this works
|
|
|
|
🕯
|
|
🕯 🕯
|
|
🕯 🕯
|
|
|
|
🕯 serotonin 🕯
|
|
|
|
🕯 🕯
|
|
🕯 🕯
|
|
🕯"""],
|
|
|
|
[400897186990284800, 'mobile_test_3',
|
|
"""
|
|
♔
|
|
KEEP
|
|
CALM
|
|
AND
|
|
CLICHÉ
|
|
ON"""]
|
|
]
|
|
|
|
link = [
|
|
['nim_lang/status/1110499584852353024', [
|
|
'nim-lang.org/araq/ownedrefs.…',
|
|
'news.ycombinator.com/item?id…',
|
|
'old.reddit.com/r/programming…'
|
|
]],
|
|
['nim_lang/status/1125887775151140864', [
|
|
'en.wikipedia.org/wiki/Nim_(p…'
|
|
]],
|
|
['hiankun_taioan/status/1086916335215341570', [
|
|
'(hackernoon.com/interview-wit…)'
|
|
]],
|
|
['archillinks/status/1146302618223951873', [
|
|
'flickr.com/photos/87101284@N…',
|
|
'hisafoto.tumblr.com/post/176…'
|
|
]],
|
|
['archillinks/status/1146292551936335873', [
|
|
'flickr.com/photos/michaelrye…',
|
|
'furtho.tumblr.com/post/16618…'
|
|
]]
|
|
]
|
|
|
|
username = [
|
|
['Bountysource/status/1094803522053320705', ['nim_lang']],
|
|
['leereilly/status/1058464250098704385', ['godotengine', 'unity3d', 'nim_lang']]
|
|
]
|
|
|
|
emoji = [
|
|
['Tesla/status/1134850442511257600', '🌈❤️🧡💛💚💙💜']
|
|
]
|
|
|
|
retweet = [
|
|
[7, 'mobile_test_2', 'mobile test 2', 'Test account', '@mobile_test', '1234'],
|
|
[3, 'mobile_test_8', 'mobile test 8', 'jack 🌍🌏🌎', '@jack', 'twttr']
|
|
]
|
|
|
|
reply = [
|
|
['mobile_test?max_position=471336696307392513', '@mobile_test', '@mobile_test'],
|
|
['mobile_test_2?max_position=375101899214561280', '@mobile_test_2', '@mobile_test']
|
|
]
|
|
|
|
|
|
class TweetTest(BaseTestCase):
|
|
@parameterized.expand(timeline)
|
|
def test_timeline(self, index, fullname, username, date, tid, text):
|
|
self.open_nitter(username)
|
|
tweet = get_timeline_tweet(index)
|
|
self.assert_exact_text(fullname, tweet.fullname)
|
|
self.assert_exact_text('@' + username, tweet.username)
|
|
self.assert_exact_text(date, tweet.date)
|
|
self.assert_text(text, tweet.text)
|
|
permalink = self.find_element(tweet.date + ' a')
|
|
self.assertIn(tid, permalink.get_attribute('href'))
|
|
|
|
@parameterized.expand(status)
|
|
def test_status(self, tid, fullname, username, date, text):
|
|
tweet = Tweet()
|
|
self.open_nitter(f'{username}/status/{tid}')
|
|
self.assert_exact_text(fullname, tweet.fullname)
|
|
self.assert_exact_text('@' + username, tweet.username)
|
|
self.assert_exact_text(date, tweet.date)
|
|
self.assert_text(text, tweet.text)
|
|
|
|
@parameterized.expand(multiline)
|
|
def test_multiline_formatting(self, tid, username, text):
|
|
self.open_nitter(f'{username}/status/{tid}')
|
|
self.assert_text(text.strip('\n'), '.main-tweet')
|
|
|
|
@parameterized.expand(emoji)
|
|
def test_emoji(self, tweet, text):
|
|
self.open_nitter(tweet)
|
|
self.assert_text(text, '.main-tweet')
|
|
|
|
@parameterized.expand(link)
|
|
def test_link(self, tweet, links):
|
|
self.open_nitter(tweet)
|
|
for link in links:
|
|
self.assert_text(link, '.main-tweet')
|
|
|
|
@parameterized.expand(username)
|
|
def test_username(self, tweet, usernames):
|
|
self.open_nitter(tweet)
|
|
for un in usernames:
|
|
link = self.find_link_text(f'@{un}')
|
|
self.assertIn(f'/{un}', link.get_property('href'))
|
|
|
|
@parameterized.expand(retweet)
|
|
def test_retweet(self, index, url, retweet_by, fullname, username, text):
|
|
self.open_nitter(url)
|
|
tweet = get_timeline_tweet(index)
|
|
self.assert_text(f'{retweet_by} retweeted', tweet.retweet)
|
|
self.assert_text(text, tweet.text)
|
|
self.assert_exact_text(fullname, tweet.fullname)
|
|
self.assert_exact_text(username, tweet.username)
|
|
|
|
@parameterized.expand(invalid)
|
|
def test_invalid_id(self, tweet):
|
|
self.open_nitter(tweet)
|
|
self.assert_text('Tweet not found', '.error-panel')
|
|
|
|
@parameterized.expand(reply)
|
|
def test_reply(self, tweet, username, reply):
|
|
self.open_nitter(tweet)
|
|
tweet = get_timeline_tweet(2)
|
|
self.assert_text(username, tweet.username)
|
|
self.assert_text('Replying to ' + reply, tweet.reply)
|