test_tweet.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. from base import BaseTestCase, Tweet, get_timeline_tweet
  2. # image = tweet + 'div.attachments.media-body > div > div > a > div > img'
  3. # self.assert_true(self.get_image_url(image).split('/')[0] == 'http')
  4. class TweetInfo():
  5. def __init__(self, index, fullname, username, date, text):
  6. self.index = index
  7. self.fullname = fullname
  8. self.username = username
  9. self.date = date
  10. self.text = text
  11. timeline_tweets = [
  12. TweetInfo(1, 'Test account', 'mobile_test', '10 Aug 2016',
  13. '.'),
  14. TweetInfo(3, 'Test account', 'mobile_test', '3 Mar 2016',
  15. 'LIVE on #Periscope pscp.tv/w/aadiTzF6dkVOTXZSbX…'),
  16. TweetInfo(6, 'mobile test 2', 'mobile_test_2', '1 Oct 2014',
  17. 'Testing. One two three four. Test.')
  18. ]
  19. status_tweets = [
  20. TweetInfo(20, 'jack 🌍🌏🌎', 'jack', '21 Mar 2006',
  21. 'just setting up my twttr'),
  22. TweetInfo(134849778302464000, 'The Twoffice', 'TheTwoffice', '10 Nov 2011',
  23. 'test'),
  24. TweetInfo(105685475985080322, 'The Twoffice', 'TheTwoffice', '22 Aug 2011',
  25. 'regular tweet'),
  26. TweetInfo(572593440719912960, 'Test account', 'mobile_test', '2 Mar 2015',
  27. 'testing test')
  28. ]
  29. invalid_tweets = [
  30. 'mobile_test/status/120938109238',
  31. 'TheTwoffice/status/8931928312'
  32. ]
  33. multiline_tweets = [
  34. TweetInfo(1142904127594401797, '', 'hot_pengu', '',
  35. """
  36. 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:
  37. @exelotl
  38. #pixelart #gbadev #gba #indiedev"""),
  39. TweetInfo(400897186990284800, '', 'mobile_test_3', '',
  40. """
  41. KEEP
  42. CALM
  43. AND
  44. CLICHÉ
  45. ON""")
  46. ]
  47. class TestTweet(BaseTestCase):
  48. def test_timeline(self):
  49. for info in timeline_tweets:
  50. self.open_nitter(f'{info.username}')
  51. tweet = get_timeline_tweet(info.index)
  52. self.assert_exact_text(info.fullname, tweet.fullname)
  53. self.assert_exact_text('@' + info.username, tweet.username)
  54. self.assert_exact_text(info.date, tweet.date)
  55. self.assert_text(info.text, tweet.text)
  56. def test_status(self):
  57. tweet = Tweet()
  58. for info in status_tweets:
  59. self.open_nitter(f'{info.username}/status/{info.index}')
  60. self.assert_exact_text(info.fullname, tweet.fullname)
  61. self.assert_exact_text('@' + info.username, tweet.username)
  62. self.assert_exact_text(info.date, tweet.date)
  63. self.assert_text(info.text, tweet.text)
  64. def test_multiline_formatting(self):
  65. for info in multiline_tweets:
  66. self.open_nitter(f'{info.username}/status/{info.index}')
  67. self.assert_text(info.text.strip('\n'), '.main-tweet')
  68. def test_emojis(self):
  69. self.open_nitter('Tesla/status/1134850442511257600')
  70. self.assert_text('🌈❤️🧡💛💚💙💜', '.main-tweet')
  71. def test_links(self):
  72. self.open_nitter('nim_lang/status/1110499584852353024')
  73. self.assert_text('nim-lang.org/araq/ownedrefs.…', '.main-tweet')
  74. self.assert_text('news.ycombinator.com/item?id…', '.main-tweet')
  75. self.assert_text('old.reddit.com/r/programming…', '.main-tweet')
  76. self.open_nitter('nim_lang/status/1125887775151140864')
  77. self.assert_text('en.wikipedia.org/wiki/Nim_(p…)', '.main-tweet')
  78. self.open_nitter('hiankun_taioan/status/1086916335215341570')
  79. self.assert_text('(hackernoon.com/interview-wit…)', '.main-tweet')
  80. def test_invalid_id(self):
  81. for tweet in invalid_tweets:
  82. self.open_nitter(tweet)
  83. self.assert_text('Tweet not found', '.error-panel')