mirror of
https://github.com/zedeus/nitter
synced 2026-09-05 22:59:31 +00:00
114 lines
4.6 KiB
Python
114 lines
4.6 KiB
Python
from base import BaseTestCase, Timeline
|
|
from parameterized import parameterized
|
|
|
|
normal = [['jack'], ['elonmusk']]
|
|
|
|
after = [['jack', '1681686036294803456'],
|
|
['elonmusk', '1681686036294803456']]
|
|
|
|
no_more = [['mobile_test_8?cursor=DAABCgABF4YVAqN___kKAAICNn_4msIQAAgAAwAAAAIAAA']]
|
|
|
|
empty = [['emptyuser'], ['mobile_test_10']]
|
|
|
|
protected = [['mobile_test_7'], ['Empty_user']]
|
|
|
|
photo_rail = [['mobile_test', ['Bo0nDsYIYAIjqVn', 'BoQbwJAIUAA0QCY', 'BoQbRQxIIAA3FWD', 'Bn8Qh8iIIAABXrG']]]
|
|
|
|
|
|
class TweetTest(BaseTestCase):
|
|
@parameterized.expand(normal)
|
|
def test_timeline(self, username):
|
|
self.open_nitter(username)
|
|
self.assert_element_present(Timeline.older)
|
|
self.assert_element_absent(Timeline.newest)
|
|
self.assert_element_absent(Timeline.end)
|
|
self.assert_element_absent(Timeline.none)
|
|
|
|
@parameterized.expand(after)
|
|
def test_after(self, username, cursor):
|
|
self.open_nitter(f'{username}?cursor={cursor}')
|
|
self.assert_element_present(Timeline.newest)
|
|
self.assert_element_present(Timeline.older)
|
|
self.assert_element_absent(Timeline.end)
|
|
self.assert_element_absent(Timeline.none)
|
|
|
|
@parameterized.expand(no_more)
|
|
def test_no_more(self, username):
|
|
self.open_nitter(username)
|
|
self.assert_text('No more items', Timeline.end)
|
|
self.assert_element_present(Timeline.newest)
|
|
self.assert_element_absent(Timeline.older)
|
|
|
|
@parameterized.expand(empty)
|
|
def test_empty(self, username):
|
|
self.open_nitter(username)
|
|
self.assert_text('No items found', Timeline.none)
|
|
self.assert_element_absent(Timeline.newest)
|
|
self.assert_element_absent(Timeline.older)
|
|
self.assert_element_absent(Timeline.end)
|
|
|
|
@parameterized.expand(protected)
|
|
def test_protected(self, username):
|
|
self.open_nitter(username)
|
|
self.assert_text('This account\'s tweets are protected.', Timeline.protected)
|
|
self.assert_element_absent(Timeline.newest)
|
|
self.assert_element_absent(Timeline.older)
|
|
self.assert_element_absent(Timeline.end)
|
|
|
|
def test_media_view_tabs(self):
|
|
self.open_nitter('mobile_test/media')
|
|
self.assert_element_present(Timeline.media_view_tabs)
|
|
self.assert_text('Timeline', Timeline.media_view_timeline)
|
|
self.assert_text('Grid', Timeline.media_view_grid)
|
|
self.assert_text('Gallery', Timeline.media_view_gallery)
|
|
self.assert_text('Timeline', Timeline.media_view_active)
|
|
|
|
def test_media_view_grid_tab(self):
|
|
self.open_nitter('mobile_test/media?view=grid')
|
|
self.assert_element_present(Timeline.grid_view)
|
|
self.assert_text('Grid', Timeline.media_view_active)
|
|
|
|
def test_media_view_gallery_tab(self):
|
|
self.open_nitter('mobile_test/media?view=gallery')
|
|
self.assert_element_present(Timeline.gallery_view)
|
|
self.assert_text('Gallery', Timeline.media_view_active)
|
|
|
|
def test_media_view_tabs_not_on_posts(self):
|
|
self.open_nitter('mobile_test')
|
|
self.assert_element_absent(Timeline.media_view_tabs)
|
|
|
|
#@parameterized.expand(photo_rail)
|
|
#def test_photo_rail(self, username, images):
|
|
#self.open_nitter(username)
|
|
#self.assert_element_visible(Timeline.photo_rail)
|
|
#for i, url in enumerate(images):
|
|
#img = self.get_attribute(Timeline.photo_rail + f' a:nth-child({i + 1}) img', 'src')
|
|
#self.assertIn(url, img)
|
|
|
|
|
|
class ArticlesTabTest(BaseTestCase):
|
|
def test_articles_tab_on_profile(self):
|
|
self.open_nitter('satyanadella')
|
|
self.assert_element_present('.tab .tab-item a[href="/satyanadella/articles"]')
|
|
|
|
def test_articles_timeline(self):
|
|
self.open_nitter('satyanadella/articles')
|
|
self.assert_text('Articles', '.tab .tab-item.active a')
|
|
self.assert_element_present('.timeline .article-card')
|
|
self.assert_element_present('.timeline .article-card a[href^="/i/article/"]')
|
|
|
|
def test_articles_card_cover_and_no_raw_link(self):
|
|
self.open_nitter('jack/articles')
|
|
self.assert_element_present('.timeline .article-card .card-image img')
|
|
# the article link tweet text is redundant with the card and is stripped
|
|
self.assert_element_absent('.timeline .tweet-content a[href*="x.com/i/article"]')
|
|
|
|
def test_articles_empty(self):
|
|
self.open_nitter('mobile_test/articles')
|
|
self.assert_text('No items found', Timeline.none)
|
|
|
|
def test_articles_multi_user_unsupported(self):
|
|
self.open_nitter('jack,satyanadella')
|
|
self.assert_element_absent('.tab .tab-item a[href$="/articles"]')
|
|
self.open_nitter('jack,satyanadella/articles')
|
|
self.assert_text('Page not found')
|