|
@@ -1,103 +1,112 @@
|
|
|
from base import BaseTestCase, Tweet, get_timeline_tweet
|
|
from base import BaseTestCase, Tweet, get_timeline_tweet
|
|
|
|
|
+from parameterized import parameterized
|
|
|
|
|
|
|
|
# image = tweet + 'div.attachments.media-body > div > div > a > div > img'
|
|
# image = tweet + 'div.attachments.media-body > div > div > a > div > img'
|
|
|
# self.assert_true(self.get_image_url(image).split('/')[0] == 'http')
|
|
# self.assert_true(self.get_image_url(image).split('/')[0] == 'http')
|
|
|
-class TweetInfo():
|
|
|
|
|
- def __init__(self, index, fullname, username, date, text):
|
|
|
|
|
- self.index = index
|
|
|
|
|
- self.fullname = fullname
|
|
|
|
|
- self.username = username
|
|
|
|
|
- self.date = date
|
|
|
|
|
- self.text = text
|
|
|
|
|
|
|
|
|
|
timeline_tweets = [
|
|
timeline_tweets = [
|
|
|
- TweetInfo(1, 'Test account', 'mobile_test', '10 Aug 2016',
|
|
|
|
|
- '.'),
|
|
|
|
|
|
|
+ [1, 'Test account', 'mobile_test', '10 Aug 2016',
|
|
|
|
|
+ '.'],
|
|
|
|
|
|
|
|
- TweetInfo(3, 'Test account', 'mobile_test', '3 Mar 2016',
|
|
|
|
|
- 'LIVE on #Periscope pscp.tv/w/aadiTzF6dkVOTXZSbX…'),
|
|
|
|
|
|
|
+ [3, 'Test account', 'mobile_test', '3 Mar 2016',
|
|
|
|
|
+ 'LIVE on #Periscope pscp.tv/w/aadiTzF6dkVOTXZSbX…'],
|
|
|
|
|
|
|
|
- TweetInfo(6, 'mobile test 2', 'mobile_test_2', '1 Oct 2014',
|
|
|
|
|
- 'Testing. One two three four. Test.')
|
|
|
|
|
|
|
+ [6, 'mobile test 2', 'mobile_test_2', '1 Oct 2014',
|
|
|
|
|
+ 'Testing. One two three four. Test.']
|
|
|
]
|
|
]
|
|
|
|
|
|
|
|
status_tweets = [
|
|
status_tweets = [
|
|
|
- TweetInfo(20, 'jack 🌍🌏🌎', 'jack', '21 Mar 2006',
|
|
|
|
|
- 'just setting up my twttr'),
|
|
|
|
|
|
|
+ [20, 'jack 🌍🌏🌎', 'jack', '21 Mar 2006',
|
|
|
|
|
+ 'just setting up my twttr'],
|
|
|
|
|
|
|
|
- TweetInfo(134849778302464000, 'The Twoffice', 'TheTwoffice', '10 Nov 2011',
|
|
|
|
|
- 'test'),
|
|
|
|
|
|
|
+ [134849778302464000, 'The Twoffice', 'TheTwoffice', '10 Nov 2011',
|
|
|
|
|
+ 'test'],
|
|
|
|
|
|
|
|
- TweetInfo(105685475985080322, 'The Twoffice', 'TheTwoffice', '22 Aug 2011',
|
|
|
|
|
- 'regular tweet'),
|
|
|
|
|
|
|
+ [105685475985080322, 'The Twoffice', 'TheTwoffice', '22 Aug 2011',
|
|
|
|
|
+ 'regular tweet'],
|
|
|
|
|
|
|
|
- TweetInfo(572593440719912960, 'Test account', 'mobile_test', '2 Mar 2015',
|
|
|
|
|
- 'testing test')
|
|
|
|
|
|
|
+ [572593440719912960, 'Test account', 'mobile_test', '2 Mar 2015',
|
|
|
|
|
+ 'testing test']
|
|
|
]
|
|
]
|
|
|
|
|
|
|
|
invalid_tweets = [
|
|
invalid_tweets = [
|
|
|
- 'mobile_test/status/120938109238',
|
|
|
|
|
- 'TheTwoffice/status/8931928312'
|
|
|
|
|
|
|
+ ['mobile_test/status/120938109238'],
|
|
|
|
|
+ ['TheTwoffice/status/8931928312']
|
|
|
]
|
|
]
|
|
|
|
|
|
|
|
multiline_tweets = [
|
|
multiline_tweets = [
|
|
|
- TweetInfo(1142904127594401797, '', 'hot_pengu', '',
|
|
|
|
|
- """
|
|
|
|
|
|
|
+ [1142904127594401797, 'hot_pengu',
|
|
|
|
|
+ """
|
|
|
New tileset, dust effects, background. The 'sea' has per-line parallax and wavey fx which we think is really cool even tho u didn't notice 🐶. code:
|
|
New tileset, dust effects, background. The 'sea' has per-line parallax and wavey fx which we think is really cool even tho u didn't notice 🐶. code:
|
|
|
@exelotl
|
|
@exelotl
|
|
|
- #pixelart #gbadev #gba #indiedev"""),
|
|
|
|
|
|
|
+ #pixelart #gbadev #gba #indiedev"""],
|
|
|
|
|
|
|
|
- TweetInfo(400897186990284800, '', 'mobile_test_3', '',
|
|
|
|
|
- """
|
|
|
|
|
|
|
+ [400897186990284800, 'mobile_test_3',
|
|
|
|
|
+ """
|
|
|
♔
|
|
♔
|
|
|
KEEP
|
|
KEEP
|
|
|
CALM
|
|
CALM
|
|
|
AND
|
|
AND
|
|
|
CLICHÉ
|
|
CLICHÉ
|
|
|
- ON""")
|
|
|
|
|
|
|
+ ON"""]
|
|
|
|
|
+]
|
|
|
|
|
+
|
|
|
|
|
+link_tweets = [
|
|
|
|
|
+ ['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…)'
|
|
|
|
|
+ ]]
|
|
|
|
|
+]
|
|
|
|
|
+
|
|
|
|
|
+emoji_tweets = [
|
|
|
|
|
+ ['Tesla/status/1134850442511257600', '🌈❤️🧡💛💚💙💜']
|
|
|
]
|
|
]
|
|
|
|
|
|
|
|
class TestTweet(BaseTestCase):
|
|
class TestTweet(BaseTestCase):
|
|
|
- def test_timeline(self):
|
|
|
|
|
- for info in timeline_tweets:
|
|
|
|
|
- self.open_nitter(f'{info.username}')
|
|
|
|
|
- tweet = get_timeline_tweet(info.index)
|
|
|
|
|
- self.assert_exact_text(info.fullname, tweet.fullname)
|
|
|
|
|
- self.assert_exact_text('@' + info.username, tweet.username)
|
|
|
|
|
- self.assert_exact_text(info.date, tweet.date)
|
|
|
|
|
- self.assert_text(info.text, tweet.text)
|
|
|
|
|
-
|
|
|
|
|
- def test_status(self):
|
|
|
|
|
|
|
+ @parameterized.expand(timeline_tweets)
|
|
|
|
|
+ def test_timeline(self, index, fullname, username, date, 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)
|
|
|
|
|
+
|
|
|
|
|
+ @parameterized.expand(status_tweets)
|
|
|
|
|
+ def test_status(self, tid, fullname, username, date, text):
|
|
|
tweet = Tweet()
|
|
tweet = Tweet()
|
|
|
- for info in status_tweets:
|
|
|
|
|
- self.open_nitter(f'{info.username}/status/{info.index}')
|
|
|
|
|
- self.assert_exact_text(info.fullname, tweet.fullname)
|
|
|
|
|
- self.assert_exact_text('@' + info.username, tweet.username)
|
|
|
|
|
- self.assert_exact_text(info.date, tweet.date)
|
|
|
|
|
- self.assert_text(info.text, tweet.text)
|
|
|
|
|
-
|
|
|
|
|
- def test_multiline_formatting(self):
|
|
|
|
|
- for info in multiline_tweets:
|
|
|
|
|
- self.open_nitter(f'{info.username}/status/{info.index}')
|
|
|
|
|
- self.assert_text(info.text.strip('\n'), '.main-tweet')
|
|
|
|
|
-
|
|
|
|
|
- def test_emojis(self):
|
|
|
|
|
- self.open_nitter('Tesla/status/1134850442511257600')
|
|
|
|
|
- self.assert_text('🌈❤️🧡💛💚💙💜', '.main-tweet')
|
|
|
|
|
-
|
|
|
|
|
- def test_links(self):
|
|
|
|
|
- self.open_nitter('nim_lang/status/1110499584852353024')
|
|
|
|
|
- self.assert_text('nim-lang.org/araq/ownedrefs.…', '.main-tweet')
|
|
|
|
|
- self.assert_text('news.ycombinator.com/item?id…', '.main-tweet')
|
|
|
|
|
- self.assert_text('old.reddit.com/r/programming…', '.main-tweet')
|
|
|
|
|
-
|
|
|
|
|
- self.open_nitter('nim_lang/status/1125887775151140864')
|
|
|
|
|
- self.assert_text('en.wikipedia.org/wiki/Nim_(p…)', '.main-tweet')
|
|
|
|
|
-
|
|
|
|
|
- self.open_nitter('hiankun_taioan/status/1086916335215341570')
|
|
|
|
|
- self.assert_text('(hackernoon.com/interview-wit…)', '.main-tweet')
|
|
|
|
|
-
|
|
|
|
|
- def test_invalid_id(self):
|
|
|
|
|
- for tweet in invalid_tweets:
|
|
|
|
|
- self.open_nitter(tweet)
|
|
|
|
|
- self.assert_text('Tweet not found', '.error-panel')
|
|
|
|
|
|
|
+ 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_tweets)
|
|
|
|
|
+ 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_tweets)
|
|
|
|
|
+ def test_emojis(self, tweet, text):
|
|
|
|
|
+ self.open_nitter(tweet)
|
|
|
|
|
+ self.assert_text(text, '.main-tweet')
|
|
|
|
|
+
|
|
|
|
|
+ @parameterized.expand(link_tweets)
|
|
|
|
|
+ def test_links(self, tweet, links):
|
|
|
|
|
+ self.open_nitter(tweet)
|
|
|
|
|
+ for link in links:
|
|
|
|
|
+ self.assert_text(link, '.main-tweet')
|
|
|
|
|
+
|
|
|
|
|
+ @parameterized.expand(invalid_tweets)
|
|
|
|
|
+ def test_invalid_id(self, tweet):
|
|
|
|
|
+ self.open_nitter(tweet)
|
|
|
|
|
+ self.assert_text('Tweet not found', '.error-panel')
|