Skip to content

Commit 933587b

Browse files
committed
test: add live coverage for pagination cleanups
1 parent 8b13149 commit 933587b

3 files changed

Lines changed: 99 additions & 0 deletions

File tree

.github/workflows/live-account-tests.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ on:
1313
- upload
1414
- direct
1515
- timeline
16+
- location
17+
- usertag
1618
- user
1719
- all
1820

@@ -56,6 +58,14 @@ jobs:
5658
if: github.event.inputs.test_target == 'timeline' || github.event.inputs.test_target == 'all'
5759
run: pytest -sv tests/live/test_timeline.py::ClientTimelineLiveTestCase
5860

61+
- name: Run location test
62+
if: github.event.inputs.test_target == 'location' || github.event.inputs.test_target == 'all'
63+
run: pytest -sv tests/live/test_location.py::ClientLocationPaginationLiveTestCase
64+
65+
- name: Run usertag pagination test
66+
if: github.event.inputs.test_target == 'usertag' || github.event.inputs.test_target == 'all'
67+
run: pytest -sv tests/live/test_user.py::ClientUsertagPaginationLiveTestCase
68+
5969
- name: Run user test
6070
if: github.event.inputs.test_target == 'user' || github.event.inputs.test_target == 'all'
6171
run: pytest -sv tests/live/test_user.py::ClientUserTestCase

tests/live/test_location.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import base64
2+
13
from tests import helpers as _helpers
24
from tests.helpers import *
35

@@ -88,3 +90,38 @@ def test_location_medias_recent(self):
8890
medias = self.cl.location_medias_recent(197780767581661, amount=2)
8991
self.assertEqual(len(medias), 2)
9092
self.assertIsInstance(medias[0], Media)
93+
94+
95+
class ClientLocationPaginationLiveTestCase(_helpers.ClientPrivateTestCase):
96+
def __init__(self, *args, **kwargs):
97+
self.cl = None
98+
return unittest.TestCase.__init__(self, *args, **kwargs)
99+
100+
def setup_method(self, *args, **kwargs):
101+
return None
102+
103+
def setUp(self):
104+
if not TEST_ACCOUNTS_URL:
105+
self.skipTest("TEST_ACCOUNTS_URL is required for location pagination live tests")
106+
try:
107+
self.cl = self.fresh_account()
108+
except RuntimeError as exc:
109+
self.skipTest(str(exc))
110+
111+
def test_location_medias_v1_chunk_live_cursor_shape(self):
112+
medias, max_id = self.cl.location_medias_v1_chunk(197780767581661, tab_key="recent")
113+
self.assertIsInstance(medias, list)
114+
if medias:
115+
self.assertIsInstance(medias[0], Media)
116+
if not max_id:
117+
return
118+
119+
next_max_id, page, media_ids = json.loads(base64.b64decode(max_id))
120+
self.assertTrue(next_max_id)
121+
self.assertIsInstance(page, int)
122+
self.assertIsInstance(media_ids, list)
123+
124+
next_medias, _ = self.cl.location_medias_v1_chunk(197780767581661, tab_key="recent", max_id=max_id)
125+
self.assertIsInstance(next_medias, list)
126+
if next_medias:
127+
self.assertIsInstance(next_medias[0], Media)

tests/live/test_user.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,58 @@ def test_user_followers(self):
1010
self.assertIsInstance(list(followers.values())[0], UserShort)
1111

1212

13+
class ClientUsertagPaginationLiveTestCase(_helpers.ClientPrivateTestCase):
14+
def __init__(self, *args, **kwargs):
15+
self.cl = None
16+
return unittest.TestCase.__init__(self, *args, **kwargs)
17+
18+
def setup_method(self, *args, **kwargs):
19+
return None
20+
21+
def setUp(self):
22+
if not TEST_ACCOUNTS_URL:
23+
self.skipTest("TEST_ACCOUNTS_URL is required for usertag pagination live tests")
24+
try:
25+
self.cl = self.fresh_account()
26+
except RuntimeError as exc:
27+
self.skipTest(str(exc))
28+
29+
def assertTaggedMediaPage(self, medias, amount):
30+
self.assertGreater(len(medias), 0)
31+
self.assertLessEqual(len(medias), amount)
32+
media = medias[0]
33+
self.assertIsInstance(media, Media)
34+
for field in REQUIRED_MEDIA_FIELDS:
35+
self.assertTrue(hasattr(media, field))
36+
37+
def assertNoDuplicateMediasAcrossPages(self, first_page, next_page):
38+
first_ids = {media.pk for media in first_page}
39+
next_ids = {media.pk for media in next_page}
40+
self.assertTrue(first_ids.isdisjoint(next_ids), f"Duplicate medias across pages: {first_ids & next_ids}")
41+
42+
def test_usertag_medias_paginated_live(self):
43+
user_id = self.user_id_from_username("instagram")
44+
45+
first_page, end_cursor = self.cl.usertag_medias_paginated(user_id, amount=2)
46+
self.assertTaggedMediaPage(first_page, 2)
47+
self.assertTrue(end_cursor)
48+
49+
next_page, _ = self.cl.usertag_medias_paginated(user_id, amount=2, end_cursor=end_cursor)
50+
self.assertTaggedMediaPage(next_page, 2)
51+
self.assertNoDuplicateMediasAcrossPages(first_page, next_page)
52+
53+
def test_usertag_medias_paginated_v1_live(self):
54+
user_id = self.user_id_from_username("instagram")
55+
56+
first_page, end_cursor = self.cl.usertag_medias_paginated_v1(user_id, amount=2)
57+
self.assertTaggedMediaPage(first_page, 2)
58+
self.assertTrue(end_cursor)
59+
60+
next_page, _ = self.cl.usertag_medias_paginated_v1(user_id, amount=2, end_cursor=end_cursor)
61+
self.assertTaggedMediaPage(next_page, 2)
62+
self.assertNoDuplicateMediasAcrossPages(first_page, next_page)
63+
64+
1365
class ClientUserExtendTestCase(_helpers.ClientPrivateTestCase):
1466
def test_username_from_user_id(self):
1567
self.assertEqual(self.cl.username_from_user_id(25025320), "instagram")

0 commit comments

Comments
 (0)