@@ -80,8 +80,8 @@ public function test_prepare_collection_response_collection() {
80
80
$ result = $ this ->instance ->prepare_collection_response ( $ response , $ request );
81
81
82
82
$ this ->assertEquals ( 'Collection ' , $ result ['type ' ] );
83
- $ this ->assertEquals ( 'https://example.org/collection?page=1 ' , $ result ['first ' ] );
84
- $ this ->assertEquals ( 'https://example.org/collection?page=3 ' , $ result ['last ' ] );
83
+ $ this ->assertEquals ( 'https://example.org/collection?per_page=10& page=1 ' , $ result ['first ' ] );
84
+ $ this ->assertEquals ( 'https://example.org/collection?per_page=10& page=3 ' , $ result ['last ' ] );
85
85
$ this ->assertArrayNotHasKey ( 'items ' , $ result );
86
86
$ this ->assertArrayNotHasKey ( 'orderedItems ' , $ result );
87
87
}
@@ -106,12 +106,12 @@ public function test_prepare_collection_response_collection_page() {
106
106
$ result = $ this ->instance ->prepare_collection_response ( $ response , $ request );
107
107
108
108
$ this ->assertEquals ( 'CollectionPage ' , $ result ['type ' ] );
109
- $ this ->assertEquals ( 'https://example.org/collection ' , $ result ['partOf ' ] );
110
- $ this ->assertEquals ( 'https://example.org/collection?page=2 ' , $ result ['id ' ] );
111
- $ this ->assertEquals ( 'https://example.org/collection?page=1 ' , $ result ['first ' ] );
112
- $ this ->assertEquals ( 'https://example.org/collection?page=3 ' , $ result ['last ' ] );
113
- $ this ->assertEquals ( 'https://example.org/collection?page=3 ' , $ result ['next ' ] );
114
- $ this ->assertEquals ( 'https://example.org/collection?page=1 ' , $ result ['prev ' ] );
109
+ $ this ->assertEquals ( 'https://example.org/collection?per_page=10 ' , $ result ['partOf ' ] );
110
+ $ this ->assertEquals ( 'https://example.org/collection?page=2&per_page=10 ' , $ result ['id ' ] );
111
+ $ this ->assertEquals ( 'https://example.org/collection?page=1&per_page=10 ' , $ result ['first ' ] );
112
+ $ this ->assertEquals ( 'https://example.org/collection?page=3&per_page=10 ' , $ result ['last ' ] );
113
+ $ this ->assertEquals ( 'https://example.org/collection?per_page=10& page=3 ' , $ result ['next ' ] );
114
+ $ this ->assertEquals ( 'https://example.org/collection?per_page=10& page=1 ' , $ result ['prev ' ] );
115
115
}
116
116
117
117
/**
@@ -134,8 +134,8 @@ public function test_prepare_collection_response_first_page() {
134
134
$ result = $ this ->instance ->prepare_collection_response ( $ response , $ request );
135
135
136
136
$ this ->assertEquals ( 'OrderedCollectionPage ' , $ result ['type ' ] );
137
- $ this ->assertEquals ( 'https://example.org/collection?page=1 ' , $ result ['id ' ] );
138
- $ this ->assertEquals ( 'https://example.org/collection?page=2 ' , $ result ['next ' ] );
137
+ $ this ->assertEquals ( 'https://example.org/collection?page=1&per_page=10 ' , $ result ['id ' ] );
138
+ $ this ->assertEquals ( 'https://example.org/collection?per_page=10& page=2 ' , $ result ['next ' ] );
139
139
$ this ->assertArrayNotHasKey ( 'prev ' , $ result );
140
140
}
141
141
@@ -159,8 +159,8 @@ public function test_prepare_collection_response_last_page() {
159
159
$ result = $ this ->instance ->prepare_collection_response ( $ response , $ request );
160
160
161
161
$ this ->assertEquals ( 'CollectionPage ' , $ result ['type ' ] );
162
- $ this ->assertEquals ( 'https://example.org/collection?page=3 ' , $ result ['id ' ] );
163
- $ this ->assertEquals ( 'https://example.org/collection?page=2 ' , $ result ['prev ' ] );
162
+ $ this ->assertEquals ( 'https://example.org/collection?page=3&per_page=10 ' , $ result ['id ' ] );
163
+ $ this ->assertEquals ( 'https://example.org/collection?per_page=10& page=2 ' , $ result ['prev ' ] );
164
164
$ this ->assertArrayNotHasKey ( 'next ' , $ result );
165
165
}
166
166
@@ -196,4 +196,87 @@ public function test_prepare_collection_response_invalid_page() {
196
196
$ this ->assertEquals ( 'rest_post_invalid_page_number ' , $ result ->get_error_code () );
197
197
$ this ->assertEquals ( 400 , $ result ->get_error_data ()['status ' ] );
198
198
}
199
+
200
+ /**
201
+ * Test that pagination links preserve query parameters from original request.
202
+ *
203
+ * @covers ::prepare_collection_response
204
+ */
205
+ public function test_prepare_collection_response_preserves_query_args () {
206
+ $ request = new \WP_REST_Request ();
207
+ $ request ->set_param ( 'page ' , 2 );
208
+ $ request ->set_param ( 'per_page ' , 10 );
209
+ $ request ->set_param ( 'context ' , 'full ' );
210
+ $ request ->set_param ( 'order ' , 'asc ' );
211
+
212
+ $ response = array (
213
+ 'type ' => 'OrderedCollection ' ,
214
+ 'id ' => 'https://example.org/collection ' ,
215
+ 'totalItems ' => 35 ,
216
+ 'orderedItems ' => array ( 'item11 ' , 'item12 ' , 'item13 ' ),
217
+ );
218
+
219
+ $ result = $ this ->instance ->prepare_collection_response ( $ response , $ request );
220
+
221
+ $ this ->assertEquals ( 'OrderedCollectionPage ' , $ result ['type ' ] );
222
+ $ this ->assertEquals ( 'https://example.org/collection?per_page=10&context=full&order=asc ' , $ result ['partOf ' ] );
223
+ $ this ->assertEquals ( 'https://example.org/collection?page=2&per_page=10&context=full&order=asc ' , $ result ['id ' ] );
224
+
225
+ // Check that query parameters are preserved in pagination links.
226
+ $ this ->assertStringContainsString ( 'context=full ' , $ result ['first ' ] );
227
+ $ this ->assertStringContainsString ( 'order=asc ' , $ result ['first ' ] );
228
+ $ this ->assertStringContainsString ( 'per_page=10 ' , $ result ['first ' ] );
229
+ $ this ->assertStringContainsString ( 'page=1 ' , $ result ['first ' ] );
230
+
231
+ $ this ->assertStringContainsString ( 'context=full ' , $ result ['last ' ] );
232
+ $ this ->assertStringContainsString ( 'order=asc ' , $ result ['last ' ] );
233
+ $ this ->assertStringContainsString ( 'per_page=10 ' , $ result ['last ' ] );
234
+ $ this ->assertStringContainsString ( 'page=4 ' , $ result ['last ' ] );
235
+
236
+ $ this ->assertStringContainsString ( 'context=full ' , $ result ['next ' ] );
237
+ $ this ->assertStringContainsString ( 'order=asc ' , $ result ['next ' ] );
238
+ $ this ->assertStringContainsString ( 'per_page=10 ' , $ result ['next ' ] );
239
+ $ this ->assertStringContainsString ( 'page=3 ' , $ result ['next ' ] );
240
+
241
+ $ this ->assertStringContainsString ( 'context=full ' , $ result ['prev ' ] );
242
+ $ this ->assertStringContainsString ( 'order=asc ' , $ result ['prev ' ] );
243
+ $ this ->assertStringContainsString ( 'per_page=10 ' , $ result ['prev ' ] );
244
+ $ this ->assertStringContainsString ( 'page=1 ' , $ result ['prev ' ] );
245
+ }
246
+
247
+ /**
248
+ * Test that pagination links preserve query parameters for Collection (non-page) requests.
249
+ *
250
+ * @covers ::prepare_collection_response
251
+ */
252
+ public function test_prepare_collection_response_preserves_query_args_for_collection () {
253
+ $ request = new \WP_REST_Request ();
254
+ $ request ->set_param ( 'per_page ' , 2 );
255
+ $ request ->set_param ( 'context ' , 'full ' );
256
+ $ request ->set_param ( 'order ' , 'desc ' );
257
+
258
+ $ response = array (
259
+ 'type ' => 'OrderedCollection ' ,
260
+ 'id ' => 'https://example.org/collection ' ,
261
+ 'totalItems ' => 5 ,
262
+ 'items ' => array ( 'item1 ' , 'item2 ' , 'item3 ' , 'item4 ' , 'item5 ' ),
263
+ );
264
+
265
+ $ result = $ this ->instance ->prepare_collection_response ( $ response , $ request );
266
+
267
+ $ this ->assertEquals ( 'OrderedCollection ' , $ result ['type ' ] );
268
+ $ this ->assertArrayNotHasKey ( 'items ' , $ result );
269
+ $ this ->assertArrayNotHasKey ( 'orderedItems ' , $ result );
270
+
271
+ // Check that query parameters are preserved in first and last links.
272
+ $ this ->assertStringContainsString ( 'context=full ' , $ result ['first ' ] );
273
+ $ this ->assertStringContainsString ( 'order=desc ' , $ result ['first ' ] );
274
+ $ this ->assertStringContainsString ( 'per_page=2 ' , $ result ['first ' ] );
275
+ $ this ->assertStringContainsString ( 'page=1 ' , $ result ['first ' ] );
276
+
277
+ $ this ->assertStringContainsString ( 'context=full ' , $ result ['last ' ] );
278
+ $ this ->assertStringContainsString ( 'order=desc ' , $ result ['last ' ] );
279
+ $ this ->assertStringContainsString ( 'per_page=2 ' , $ result ['last ' ] );
280
+ $ this ->assertStringContainsString ( 'page=3 ' , $ result ['last ' ] );
281
+ }
199
282
}
0 commit comments