test_tweet_media.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import os
  2. import unittest
  3. from base import BaseTestCase, Poll, Media
  4. from parameterized import parameterized
  5. from selenium.webdriver.common.by import By
  6. import pytest
  7. poll = [
  8. ['nim_lang/status/1064219801499955200', 'Style insensitivity', '91', 1, [
  9. ('47%', 'Yay'), ('53%', 'Nay')
  10. ]],
  11. ['polls/status/1031986180622049281', 'What Tree Is Coolest?', '3,322', 1, [
  12. ('30%', 'Oak'), ('42%', 'Bonsai'), ('5%', 'Hemlock'), ('23%', 'Apple')
  13. ]]
  14. ]
  15. image = [
  16. ['mobile_test/status/519364660823207936', 'BzUnaDFCUAAmrjs'],
  17. #['mobile_test_2/status/324619691039543297', 'BIFH45vCUAAQecj']
  18. ]
  19. gif = [
  20. ['elonmusk/status/1141367104702038016', 'D9bzUqoUcAAfUgf'],
  21. ['Proj_Borealis/status/1136595194621677568', 'D8X_PJAXUAAavPT']
  22. ]
  23. video_m3u8 = [
  24. ['d0m96/status/1078373829917974528', '9q1-v9w8-ft3awgD.jpg'],
  25. ['SpaceX/status/1138474014152712192', 'ocJJj2uu4n1kyD2Y.jpg']
  26. ]
  27. gallery = [
  28. ['mobile_test/status/451108446603980803', [
  29. ['BkKovdrCUAAEz79', 'BkKovdcCEAAfoBO']
  30. ]],
  31. ['mobile_test/status/471539824713691137', [
  32. ['Bos--KNIQAAA7Li', 'Bos--FAIAAAWpah'],
  33. ['Bos--IqIQAAav23']
  34. ]],
  35. ['mobile_test/status/469530783384743936', [
  36. ['BoQbwJAIUAA0QCY', 'BoQbwN1IMAAuTiP'],
  37. ['BoQbwarIAAAlaE-', 'BoQbwh_IEAA27ef']
  38. ]]
  39. ]
  40. class MediaTest(BaseTestCase):
  41. @parameterized.expand(poll)
  42. def test_poll(self, tweet, text, votes, leader, choices):
  43. self.open_nitter(tweet)
  44. self.assert_text(text, '.main-tweet')
  45. self.assert_text(votes, Poll.votes)
  46. poll_choices = self.find_elements(Poll.choice)
  47. for i, (v, o) in enumerate(choices):
  48. choice = poll_choices[i]
  49. value = choice.find_element(By.CLASS_NAME, Poll.value)
  50. option = choice.find_element(By.CLASS_NAME, Poll.option)
  51. choice_class = choice.get_attribute('class')
  52. self.assert_equal(v, value.text)
  53. self.assert_equal(o, option.text)
  54. if i == leader:
  55. self.assertIn(Poll.leader, choice_class)
  56. else:
  57. self.assertNotIn(Poll.leader, choice_class)
  58. @parameterized.expand(image)
  59. def test_image(self, tweet, url):
  60. self.open_nitter(tweet)
  61. self.assert_element_visible(Media.container)
  62. self.assert_element_visible(Media.image)
  63. image_url = self.get_image_url(Media.image + ' img')
  64. self.assertIn(url, image_url)
  65. @parameterized.expand(gif)
  66. def test_gif(self, tweet, gif_id):
  67. self.open_nitter(tweet)
  68. self.assert_element_visible(Media.container)
  69. self.assert_element_visible(Media.gif)
  70. url = self.get_attribute('.main-tweet source', 'src')
  71. thumb = self.get_attribute('.main-tweet video', 'poster')
  72. self.assertIn(gif_id + '.mp4', url)
  73. self.assertIn(gif_id + '.jpg', thumb)
  74. @parameterized.expand(video_m3u8)
  75. def test_video_m3u8(self, tweet, thumb):
  76. if os.environ.get('GITHUB_ACTIONS') == 'true' and '1078373829917974528' in tweet:
  77. self.skipTest('TweetResultByRestId is Cloudflare-blocked from GitHub datacenter IPs')
  78. self.open_nitter(tweet)
  79. self.driver.delete_cookie("hlsPlayback")
  80. self.refresh()
  81. self.assert_element_visible('.main-tweet ' + Media.container)
  82. self.assert_element_visible('.main-tweet ' + Media.video)
  83. video_thumb = self.get_attribute('.main-tweet ' + Media.video + ' img', 'src')
  84. self.assertIn(thumb, video_thumb)
  85. @parameterized.expand(gallery)
  86. def test_gallery(self, tweet, rows):
  87. self.open_nitter(tweet)
  88. self.scroll_to(Media.container)
  89. self.assert_element_visible(Media.container)
  90. self.assert_element_visible(Media.row)
  91. self.assert_element_visible(Media.image)
  92. gallery_rows = self.find_elements(Media.row)
  93. self.assert_equal(len(rows), len(gallery_rows))
  94. for i, row in enumerate(gallery_rows):
  95. images = row.find_elements(By.CSS_SELECTOR, 'img')
  96. self.assert_equal(len(rows[i]), len(images))
  97. for j, image in enumerate(images):
  98. self.assertIn(rows[i][j], image.get_attribute('src'))