@@ -86,6 +86,47 @@ def test_requests_can_be_paginated(self, mock_request):
8686 users = users + page ["members" ]
8787 self .assertTrue (len (users ) == 4 )
8888
89+ def test_response_can_be_paginated_multiple_times (self , mock_request ):
90+ # This test suite verifies the changes in #521 work as expected
91+ page1 = {
92+ "data" : {
93+ "ok" : True ,
94+ "channels" : [{"id" : "C1" }],
95+ "response_metadata" : {"next_cursor" : "has_page2" },
96+ },
97+ "status_code" : 200 ,
98+ "headers" : {},
99+ }
100+ page2 = {
101+ "data" : {
102+ "ok" : True ,
103+ "channels" : [{"id" : "C2" }],
104+ "response_metadata" : {"next_cursor" : "has_page3" },
105+ },
106+ "status_code" : 200 ,
107+ "headers" : {},
108+ }
109+ page3 = {
110+ "data" : {"ok" : True , "channels" : [{"id" : "C3" }]},
111+ "status_code" : 200 ,
112+ "headers" : {},
113+ }
114+ # The initial pagination
115+ mock_request .response .side_effect = [page1 , page2 , page3 ]
116+ response = self .client .channels_list (limit = 1 )
117+ ids = []
118+ for page in response :
119+ ids .append (page ["channels" ][0 ]["id" ])
120+ self .assertEqual (ids , ["C1" , "C2" , "C3" ])
121+
122+ # The second iteration starting with page 2
123+ # (page1 is already cached in `response`)
124+ mock_request .response .side_effect = [page2 , page3 ]
125+ ids = []
126+ for page in response :
127+ ids .append (page ["channels" ][0 ]["id" ])
128+ self .assertEqual (ids , ["C1" , "C2" , "C3" ])
129+
89130 def test_request_pagination_stops_when_next_cursor_is_missing (self , mock_request ):
90131 mock_request .response .side_effect = [
91132 {
0 commit comments