test_community.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. from base import BaseTestCase
  2. from parameterized import parameterized
  3. COMMUNITY_ID = '1493446837214187523'
  4. COMMUNITY_PATH = f'i/communities/{COMMUNITY_ID}'
  5. class CommunityTest(BaseTestCase):
  6. def test_top_page_loads(self):
  7. self.open_nitter(COMMUNITY_PATH)
  8. self.assert_element_visible('.community-header')
  9. self.assert_text('Build in Public', '.community-name')
  10. def test_banner_visible(self):
  11. self.open_nitter(COMMUNITY_PATH)
  12. self.assert_element_visible('.timeline-banner img')
  13. def test_member_count(self):
  14. self.open_nitter(COMMUNITY_PATH)
  15. self.assert_element_visible('.community-member-count')
  16. self.assert_text('Members', '.community-member-count')
  17. def test_description_visible(self):
  18. self.open_nitter(COMMUNITY_PATH)
  19. self.assert_element_visible('.community-description')
  20. def test_tabs_present(self):
  21. self.open_nitter(COMMUNITY_PATH)
  22. tabs = self.find_elements('.tab a')
  23. labels = [t.text for t in tabs]
  24. self.assertEqual(labels, ['Top', 'Latest', 'Media', 'About'])
  25. def test_top_tab_active(self):
  26. self.open_nitter(COMMUNITY_PATH)
  27. self.assert_element_visible('.tab .active a[href$="/' + COMMUNITY_ID + '"]')
  28. def test_top_has_tweets(self):
  29. self.open_nitter(COMMUNITY_PATH)
  30. self.assert_element_visible('.timeline-item .tweet-body')
  31. def test_top_has_pagination(self):
  32. self.open_nitter(COMMUNITY_PATH)
  33. self.assert_element_visible('.show-more')
  34. self.assert_text('Load more', '.show-more')
  35. def test_latest_has_tweets(self):
  36. self.open_nitter(f'{COMMUNITY_PATH}/latest')
  37. self.assert_element_visible('.timeline-item .tweet-body')
  38. def test_latest_tab_active(self):
  39. self.open_nitter(f'{COMMUNITY_PATH}/latest')
  40. self.assert_element_visible('.tab .active a[href$="/latest"]')
  41. def test_media_has_tweets(self):
  42. self.open_nitter(f'{COMMUNITY_PATH}/media')
  43. self.assert_element_visible('.timeline-item .tweet-body')
  44. def test_media_tab_active(self):
  45. self.open_nitter(f'{COMMUNITY_PATH}/media')
  46. self.assert_element_visible('.tab .active a[href$="/media"]')
  47. def test_about_page(self):
  48. self.open_nitter(f'{COMMUNITY_PATH}/about')
  49. self.assert_element_visible('.community-about')
  50. self.assert_text('Community Info', '.community-info h2')
  51. def test_about_rules(self):
  52. self.open_nitter(f'{COMMUNITY_PATH}/about')
  53. self.assert_element_visible('.community-rules')
  54. self.assert_text('Rules', '.community-rules h2')
  55. rules = self.find_elements('.community-rule')
  56. self.assertGreater(len(rules), 0)
  57. def test_about_creator(self):
  58. self.open_nitter(f'{COMMUNITY_PATH}/about')
  59. self.assert_text('Created', '.community-info')
  60. link = self.find_element('.community-info-item a')
  61. self.assertTrue(link.text.startswith('@'))
  62. self.assertGreater(len(link.text), 1)
  63. def test_about_tab_active(self):
  64. self.open_nitter(f'{COMMUNITY_PATH}/about')
  65. self.assert_element_visible('.tab .active a[href$="/about"]')
  66. def test_about_moderators(self):
  67. self.open_nitter(f'{COMMUNITY_PATH}/about')
  68. self.assert_element_visible('.community-moderators')
  69. self.assert_text('Moderators', '.community-moderators h2')
  70. mods = self.find_elements('.community-moderator')
  71. self.assertGreater(len(mods), 0)
  72. def test_about_moderators_have_avatars(self):
  73. self.open_nitter(f'{COMMUNITY_PATH}/about')
  74. avatars = self.find_elements('.community-mod-avatar')
  75. self.assertGreater(len(avatars), 0)
  76. def test_about_moderators_link_to_profiles(self):
  77. self.open_nitter(f'{COMMUNITY_PATH}/about')
  78. links = self.find_elements('.community-mod-username')
  79. self.assertGreater(len(links), 0)
  80. for link in links:
  81. self.assertTrue(link.text.startswith('@'))
  82. self.assertTrue(link.get_attribute('href').startswith('http'))
  83. def test_about_see_all_link(self):
  84. self.open_nitter(f'{COMMUNITY_PATH}/about')
  85. link = self.find_element('.community-mods-link')
  86. self.assertEqual(link.text, 'See all')
  87. self.assertIn('/moderators', link.get_attribute('href'))
  88. def test_members_page(self):
  89. self.open_nitter(f'{COMMUNITY_PATH}/members')
  90. self.assert_element_visible('.timeline-item')
  91. users = self.find_elements('.timeline-item .username')
  92. self.assertGreater(len(users), 0)
  93. def test_members_has_member_tabs(self):
  94. self.open_nitter(f'{COMMUNITY_PATH}/members')
  95. tabs = self.find_elements('.tab a')
  96. labels = [t.text for t in tabs]
  97. self.assertEqual(labels, ['All', 'Moderators'])
  98. def test_members_all_tab_active(self):
  99. self.open_nitter(f'{COMMUNITY_PATH}/members')
  100. self.assert_element_visible('.tab .active a[href$="/members"]')
  101. def test_members_count_is_link(self):
  102. self.open_nitter(COMMUNITY_PATH)
  103. link = self.find_element('.community-member-count')
  104. self.assertIn('Members', link.text)
  105. self.assertIn('/members', link.get_attribute('href'))
  106. def test_moderators_page(self):
  107. self.open_nitter(f'{COMMUNITY_PATH}/moderators')
  108. self.assert_element_visible('.timeline-item')
  109. users = self.find_elements('.timeline-item .username')
  110. self.assertGreater(len(users), 0)
  111. def test_moderators_tab_active(self):
  112. self.open_nitter(f'{COMMUNITY_PATH}/moderators')
  113. self.assert_element_visible('.tab .active a[href$="/moderators"]')
  114. def test_moderators_has_member_tabs(self):
  115. self.open_nitter(f'{COMMUNITY_PATH}/moderators')
  116. tabs = self.find_elements('.tab a')
  117. labels = [t.text for t in tabs]
  118. self.assertEqual(labels, ['All', 'Moderators'])
  119. def test_pinned_tweet_label(self):
  120. self.open_nitter(COMMUNITY_PATH)
  121. self.assert_element_visible('.pinned')
  122. self.assert_text('Pinned by Community mods', '.pinned')
  123. def test_hashtags_visible(self):
  124. self.open_nitter(COMMUNITY_PATH)
  125. self.assert_element_visible('.community-tags')
  126. tags = self.find_elements('.community-tag')
  127. self.assertGreater(len(tags), 0)
  128. def test_hashtags_are_links(self):
  129. self.open_nitter(COMMUNITY_PATH)
  130. tags = self.find_elements('.community-tag')
  131. for tag in tags:
  132. href = tag.get_attribute('href')
  133. self.assertIn('/hashtag/', href)
  134. self.assertTrue(tag.text.startswith('#'))
  135. def test_hashtag_page(self):
  136. self.open_nitter(f'{COMMUNITY_PATH}/hashtag/buildinpublic')
  137. self.assert_element_visible('.timeline-item .tweet-body')
  138. def test_hashtag_shows_header(self):
  139. self.open_nitter(f'{COMMUNITY_PATH}/hashtag/buildinpublic')
  140. self.assert_element_visible('.community-header')
  141. self.assert_text('Build in Public', '.community-name')
  142. def test_hashtag_shows_tag_title(self):
  143. self.open_nitter(f'{COMMUNITY_PATH}/hashtag/buildinpublic')
  144. self.assert_element_visible('.community-hashtag-header')
  145. self.assert_text('#buildinpublic', '.community-hashtag-title')
  146. def test_hashtag_no_main_tabs(self):
  147. self.open_nitter(f'{COMMUNITY_PATH}/hashtag/buildinpublic')
  148. tabs = self.find_elements('.tab a')
  149. tab_labels = [t.text for t in tabs]
  150. self.assertNotIn('Top', tab_labels)
  151. self.assertNotIn('About', tab_labels)
  152. def test_category_visible(self):
  153. self.open_nitter(COMMUNITY_PATH)
  154. self.assert_element_visible('.community-category')
  155. def test_about_join_policy(self):
  156. self.open_nitter(f'{COMMUNITY_PATH}/about')
  157. self.assert_text('Anyone can join', '.community-info')
  158. def test_about_visibility_note(self):
  159. self.open_nitter(f'{COMMUNITY_PATH}/about')
  160. self.assert_text('publicly visible', '.community-info')
  161. def test_404_invalid_id(self):
  162. self.open_nitter('i/communities/999')
  163. self.assert_element_visible('.error-panel')
  164. self.assert_text('not found', '.error-panel')
  165. @parameterized.expand(['', '/latest', '/media', '/about',
  166. '/members', '/moderators'])
  167. def test_page_no_error(self, suffix):
  168. self.open_nitter(f'{COMMUNITY_PATH}{suffix}')
  169. self.assert_element_not_visible('.error-panel')