These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | /** |
||
4 | * Unit tests covering WP_REST_Posts_Controller functionality. |
||
5 | * |
||
6 | * @package WordPress |
||
7 | * @subpackage JSON API |
||
8 | */ |
||
9 | class WP_Test_REST_Posts_Controller extends WP_Test_REST_Post_Type_Controller_Testcase { |
||
10 | |||
11 | public function setUp() { |
||
12 | parent::setUp(); |
||
13 | |||
14 | $this->post_id = $this->factory->post->create(); |
||
15 | |||
16 | $this->editor_id = $this->factory->user->create( array( |
||
17 | 'role' => 'editor', |
||
18 | ) ); |
||
19 | $this->author_id = $this->factory->user->create( array( |
||
20 | 'role' => 'author', |
||
21 | ) ); |
||
22 | $this->contributor_id = $this->factory->user->create( array( |
||
23 | 'role' => 'contributor', |
||
24 | ) ); |
||
25 | |||
26 | register_post_type( 'youseeme', array( 'supports' => array(), 'show_in_rest' => true ) ); |
||
27 | } |
||
28 | |||
29 | View Code Duplication | public function test_register_routes() { |
|
30 | $routes = $this->server->get_routes(); |
||
31 | |||
32 | $this->assertArrayHasKey( '/wp/v2/posts', $routes ); |
||
33 | $this->assertCount( 2, $routes['/wp/v2/posts'] ); |
||
34 | $this->assertArrayHasKey( '/wp/v2/posts/(?P<id>[\d]+)', $routes ); |
||
35 | $this->assertCount( 3, $routes['/wp/v2/posts/(?P<id>[\d]+)'] ); |
||
36 | } |
||
37 | |||
38 | View Code Duplication | public function test_context_param() { |
|
39 | // Collection |
||
40 | $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts' ); |
||
41 | $response = $this->server->dispatch( $request ); |
||
42 | $data = $response->get_data(); |
||
43 | $this->assertEquals( 'view', $data['endpoints'][0]['args']['context']['default'] ); |
||
44 | $this->assertEquals( array( 'view', 'embed', 'edit' ), $data['endpoints'][0]['args']['context']['enum'] ); |
||
45 | // Single |
||
46 | $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts/' . $this->post_id ); |
||
47 | $response = $this->server->dispatch( $request ); |
||
48 | $data = $response->get_data(); |
||
49 | $this->assertEquals( 'view', $data['endpoints'][0]['args']['context']['default'] ); |
||
50 | $this->assertEquals( array( 'view', 'embed', 'edit' ), $data['endpoints'][0]['args']['context']['enum'] ); |
||
51 | } |
||
52 | |||
53 | public function test_registered_query_params() { |
||
54 | $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts' ); |
||
55 | $response = $this->server->dispatch( $request ); |
||
56 | $data = $response->get_data(); |
||
57 | $keys = array_keys( $data['endpoints'][0]['args'] ); |
||
58 | sort( $keys ); |
||
59 | $this->assertEquals( array( |
||
60 | 'after', |
||
61 | 'author', |
||
62 | 'author_exclude', |
||
63 | 'before', |
||
64 | 'categories', |
||
65 | 'context', |
||
66 | 'exclude', |
||
67 | 'filter', |
||
68 | 'include', |
||
69 | 'offset', |
||
70 | 'order', |
||
71 | 'orderby', |
||
72 | 'page', |
||
73 | 'per_page', |
||
74 | 'search', |
||
75 | 'slug', |
||
76 | 'status', |
||
77 | 'sticky', |
||
78 | 'tags', |
||
79 | ), $keys ); |
||
80 | } |
||
81 | |||
82 | public function test_get_items() { |
||
83 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
84 | $response = $this->server->dispatch( $request ); |
||
85 | |||
86 | $this->check_get_posts_response( $response ); |
||
87 | } |
||
88 | |||
89 | /** |
||
90 | * A valid query that returns 0 results should return an empty JSON list. |
||
91 | * |
||
92 | * @issue 862 |
||
93 | */ |
||
94 | public function test_get_items_empty_query() { |
||
95 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
96 | $request->set_query_params( array( |
||
97 | 'filter' => array( 'year' => 2008 ), |
||
98 | ) ); |
||
99 | $response = $this->server->dispatch( $request ); |
||
100 | $this->assertEquals( array(), $response->get_data() ); |
||
101 | $this->assertEquals( 200, $response->get_status() ); |
||
102 | } |
||
103 | |||
104 | public function test_get_items_author_query() { |
||
105 | $this->factory->post->create( array( 'post_author' => $this->editor_id ) ); |
||
106 | $this->factory->post->create( array( 'post_author' => $this->author_id ) ); |
||
107 | // All 3 posts |
||
108 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
109 | $response = $this->server->dispatch( $request ); |
||
110 | $this->assertEquals( 200, $response->get_status() ); |
||
111 | $this->assertEquals( 3, count( $response->get_data() ) ); |
||
112 | // 2 of 3 posts |
||
113 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
114 | $request->set_param( 'author', array( $this->editor_id, $this->author_id ) ); |
||
115 | $response = $this->server->dispatch( $request ); |
||
116 | $this->assertEquals( 200, $response->get_status() ); |
||
117 | $data = $response->get_data(); |
||
118 | $this->assertEquals( 2, count( $data ) ); |
||
119 | $this->assertEqualSets( array( $this->editor_id, $this->author_id ), wp_list_pluck( $data, 'author' ) ); |
||
120 | // 1 of 3 posts |
||
121 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
122 | $request->set_param( 'author', $this->editor_id ); |
||
123 | $response = $this->server->dispatch( $request ); |
||
124 | $this->assertEquals( 200, $response->get_status() ); |
||
125 | $data = $response->get_data(); |
||
126 | $this->assertEquals( 1, count( $data ) ); |
||
127 | $this->assertEquals( $this->editor_id, $data[0]['author'] ); |
||
128 | } |
||
129 | |||
130 | public function test_get_items_author_exclude_query() { |
||
131 | $this->factory->post->create( array( 'post_author' => $this->editor_id ) ); |
||
132 | $this->factory->post->create( array( 'post_author' => $this->author_id ) ); |
||
133 | // All 3 posts |
||
134 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
135 | $response = $this->server->dispatch( $request ); |
||
136 | $this->assertEquals( 200, $response->get_status() ); |
||
137 | $this->assertEquals( 3, count( $response->get_data() ) ); |
||
138 | // 1 of 3 posts |
||
139 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
140 | $request->set_param( 'author_exclude', array( $this->editor_id, $this->author_id ) ); |
||
141 | $response = $this->server->dispatch( $request ); |
||
142 | $this->assertEquals( 200, $response->get_status() ); |
||
143 | $data = $response->get_data(); |
||
144 | $this->assertEquals( 1, count( $data ) ); |
||
145 | $this->assertNotEquals( $this->editor_id, $data[0]['author'] ); |
||
146 | $this->assertNotEquals( $this->author_id, $data[0]['author'] ); |
||
147 | // 2 of 3 posts |
||
148 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
149 | $request->set_param( 'author_exclude', $this->editor_id ); |
||
150 | $response = $this->server->dispatch( $request ); |
||
151 | $this->assertEquals( 200, $response->get_status() ); |
||
152 | $data = $response->get_data(); |
||
153 | $this->assertEquals( 2, count( $data ) ); |
||
154 | $this->assertNotEquals( $this->editor_id, $data[0]['author'] ); |
||
155 | $this->assertNotEquals( $this->editor_id, $data[1]['author'] ); |
||
156 | } |
||
157 | |||
158 | public function test_get_items_include_query() { |
||
159 | $id1 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
160 | $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
161 | $id3 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
162 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
163 | // Orderby=>desc |
||
164 | $request->set_param( 'include', array( $id1, $id3 ) ); |
||
165 | $response = $this->server->dispatch( $request ); |
||
166 | $data = $response->get_data(); |
||
167 | $this->assertEquals( 2, count( $data ) ); |
||
168 | $this->assertEquals( $id3, $data[0]['id'] ); |
||
169 | // Orderby=>include |
||
170 | $request->set_param( 'orderby', 'include' ); |
||
171 | $response = $this->server->dispatch( $request ); |
||
172 | $data = $response->get_data(); |
||
173 | $this->assertEquals( 2, count( $data ) ); |
||
174 | $this->assertEquals( $id1, $data[0]['id'] ); |
||
175 | } |
||
176 | |||
177 | public function test_get_items_exclude_query() { |
||
178 | $id1 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
179 | $id2 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
180 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
181 | $response = $this->server->dispatch( $request ); |
||
182 | $data = $response->get_data(); |
||
183 | $this->assertTrue( in_array( $id1, wp_list_pluck( $data, 'id' ) ) ); |
||
184 | $this->assertTrue( in_array( $id2, wp_list_pluck( $data, 'id' ) ) ); |
||
185 | $request->set_param( 'exclude', array( $id2 ) ); |
||
186 | $response = $this->server->dispatch( $request ); |
||
187 | $data = $response->get_data(); |
||
188 | $this->assertTrue( in_array( $id1, wp_list_pluck( $data, 'id' ) ) ); |
||
189 | $this->assertFalse( in_array( $id2, wp_list_pluck( $data, 'id' ) ) ); |
||
190 | } |
||
191 | |||
192 | public function test_get_items_search_query() { |
||
193 | View Code Duplication | for ( $i = 0; $i < 5; $i++ ) { |
|
194 | $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
195 | } |
||
196 | $this->factory->post->create( array( 'post_title' => 'Search Result', 'post_status' => 'publish' ) ); |
||
197 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
198 | $response = $this->server->dispatch( $request ); |
||
199 | $this->assertEquals( 7, count( $response->get_data() ) ); |
||
200 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
201 | $request->set_param( 'search', 'Search Result' ); |
||
202 | $response = $this->server->dispatch( $request ); |
||
203 | $data = $response->get_data(); |
||
204 | $this->assertEquals( 1, count( $data ) ); |
||
205 | $this->assertEquals( 'Search Result', $data[0]['title']['rendered'] ); |
||
206 | } |
||
207 | |||
208 | public function test_get_items_slug_query() { |
||
209 | $this->factory->post->create( array( 'post_title' => 'Apple', 'post_status' => 'publish' ) ); |
||
210 | $this->factory->post->create( array( 'post_title' => 'Banana', 'post_status' => 'publish' ) ); |
||
211 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
212 | $request->set_param( 'slug', 'apple' ); |
||
213 | $response = $this->server->dispatch( $request ); |
||
214 | $this->assertEquals( 200, $response->get_status() ); |
||
215 | $data = $response->get_data(); |
||
216 | $this->assertEquals( 1, count( $data ) ); |
||
217 | $this->assertEquals( 'Apple', $data[0]['title']['rendered'] ); |
||
218 | } |
||
219 | |||
220 | public function test_get_items_status_query() { |
||
221 | wp_set_current_user( 0 ); |
||
222 | $this->factory->post->create( array( 'post_status' => 'draft' ) ); |
||
223 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
224 | $request->set_param( 'status', 'publish' ); |
||
225 | $response = $this->server->dispatch( $request ); |
||
226 | $this->assertEquals( 200, $response->get_status() ); |
||
227 | $this->assertEquals( 1, count( $response->get_data() ) ); |
||
228 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
229 | $request->set_param( 'status', 'draft' ); |
||
230 | $response = $this->server->dispatch( $request ); |
||
231 | $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); |
||
232 | wp_set_current_user( $this->editor_id ); |
||
233 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
234 | $request->set_param( 'status', 'draft' ); |
||
235 | $response = $this->server->dispatch( $request ); |
||
236 | $this->assertEquals( 200, $response->get_status() ); |
||
237 | $this->assertEquals( 1, count( $response->get_data() ) ); |
||
238 | } |
||
239 | |||
240 | View Code Duplication | public function test_get_items_status_without_permissions() { |
|
241 | $draft_id = $this->factory->post->create( array( |
||
242 | 'post_status' => 'draft', |
||
243 | ) ); |
||
244 | wp_set_current_user( 0 ); |
||
245 | |||
246 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
247 | $response = $this->server->dispatch( $request ); |
||
248 | |||
249 | $this->assertEquals( 200, $response->get_status() ); |
||
250 | |||
251 | $all_data = $response->get_data(); |
||
252 | foreach ( $all_data as $post ) { |
||
253 | $this->assertNotEquals( $draft_id, $post['id'] ); |
||
254 | } |
||
255 | } |
||
256 | |||
257 | public function test_get_items_order_and_orderby() { |
||
258 | $this->factory->post->create( array( 'post_title' => 'Apple Pie', 'post_status' => 'publish' ) ); |
||
259 | $this->factory->post->create( array( 'post_title' => 'Apple Sauce', 'post_status' => 'publish' ) ); |
||
260 | $this->factory->post->create( array( 'post_title' => 'Apple Cobbler', 'post_status' => 'publish' ) ); |
||
261 | $this->factory->post->create( array( 'post_title' => 'Apple Coffee Cake', 'post_status' => 'publish' ) ); |
||
262 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
263 | $request->set_param( 'search', 'Apple' ); |
||
264 | // order defaults to 'desc' |
||
265 | $request->set_param( 'orderby', 'title' ); |
||
266 | $response = $this->server->dispatch( $request ); |
||
267 | $data = $response->get_data(); |
||
268 | $this->assertEquals( 'Apple Sauce', $data[0]['title']['rendered'] ); |
||
269 | // order=>asc |
||
270 | $request->set_param( 'order', 'asc' ); |
||
271 | $response = $this->server->dispatch( $request ); |
||
272 | $data = $response->get_data(); |
||
273 | $this->assertEquals( 'Apple Cobbler', $data[0]['title']['rendered'] ); |
||
274 | } |
||
275 | |||
276 | public function test_get_items_with_orderby_relevance() { |
||
277 | $this->factory->post->create( array( 'post_title' => 'Title is more relevant', 'post_content' => 'Content is', 'post_status' => 'publish' ) ); |
||
278 | $this->factory->post->create( array( 'post_title' => 'Title is', 'post_content' => 'Content is less relevant', 'post_status' => 'publish' ) ); |
||
279 | |||
280 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
281 | $request->set_param( 'orderby', 'relevance' ); |
||
282 | $response = $this->server->dispatch( $request ); |
||
283 | $this->assertErrorResponse( 'rest_no_search_term_defined', $response, 400 ); |
||
284 | } |
||
285 | |||
286 | public function test_get_items_ignore_sticky_posts_by_default() { |
||
287 | $this->markTestSkipped( 'Broken, see https://github.com/WP-API/WP-API/issues/2210' ); |
||
288 | $post_id1 = $this->factory->post->create( array( 'post_status' => 'publish', 'post_date' => '2015-01-01 12:00:00', 'post_date_gmt' => '2015-01-01 12:00:00' ) ); |
||
289 | $post_id2 = $this->factory->post->create( array( 'post_status' => 'publish', 'post_date' => '2015-01-02 12:00:00', 'post_date_gmt' => '2015-01-02 12:00:00' ) ); |
||
290 | $post_id3 = $this->factory->post->create( array( 'post_status' => 'publish', 'post_date' => '2015-01-03 12:00:00', 'post_date_gmt' => '2015-01-03 12:00:00' ) ); |
||
291 | stick_post( $post_id2 ); |
||
292 | |||
293 | // No stickies by default |
||
294 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
295 | $response = $this->server->dispatch( $request ); |
||
296 | $data = $response->get_data(); |
||
297 | $this->assertEquals( array( $this->post_id, $post_id3, $post_id2, $post_id1 ), wp_list_pluck( $data, 'id' ) ); |
||
298 | |||
299 | // Permit stickies |
||
300 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
301 | $request->set_param( 'filter', array( 'ignore_sticky_posts' => false ) ); |
||
302 | $response = $this->server->dispatch( $request ); |
||
303 | $data = $response->get_data(); |
||
304 | $this->assertEquals( array( $post_id2, $this->post_id, $post_id3, $post_id1 ), wp_list_pluck( $data, 'id' ) ); |
||
305 | } |
||
306 | |||
307 | public function test_get_items_offset_query() { |
||
308 | $id1 = $this->post_id; |
||
309 | $id2 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
310 | $id3 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
311 | $id4 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
312 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
313 | $request->set_param( 'offset', 1 ); |
||
314 | $response = $this->server->dispatch( $request ); |
||
315 | $this->assertCount( 3, $response->get_data() ); |
||
316 | // 'offset' works with 'per_page' |
||
317 | $request->set_param( 'per_page', 2 ); |
||
318 | $response = $this->server->dispatch( $request ); |
||
319 | $this->assertCount( 2, $response->get_data() ); |
||
320 | // 'offset' takes priority over 'page' |
||
321 | $request->set_param( 'page', 3 ); |
||
322 | $response = $this->server->dispatch( $request ); |
||
323 | $this->assertCount( 2, $response->get_data() ); |
||
324 | } |
||
325 | |||
326 | public function test_get_items_tags_query() { |
||
327 | $id1 = $this->post_id; |
||
328 | $id2 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
329 | $id3 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
330 | $id4 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
331 | $tag = wp_insert_term( 'My Tag', 'post_tag' ); |
||
332 | |||
333 | wp_set_object_terms( $id1, array( $tag['term_id'] ), 'post_tag' ); |
||
334 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
335 | $request->set_param( 'tags', array( $tag['term_id'] ) ); |
||
336 | |||
337 | $response = $this->server->dispatch( $request ); |
||
338 | $this->assertCount( 1, $response->get_data() ); |
||
339 | } |
||
340 | |||
341 | public function test_get_items_tags_and_categories_query() { |
||
342 | $id1 = $this->post_id; |
||
343 | $id2 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
344 | $id3 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
345 | $id4 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
346 | $tag = wp_insert_term( 'My Tag', 'post_tag' ); |
||
347 | $category = wp_insert_term( 'My Category', 'category' ); |
||
348 | |||
349 | wp_set_object_terms( $id1, array( $tag['term_id'] ), 'post_tag' ); |
||
350 | wp_set_object_terms( $id2, array( $tag['term_id'] ), 'post_tag' ); |
||
351 | wp_set_object_terms( $id1, array( $category['term_id'] ), 'category' ); |
||
352 | |||
353 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
354 | $request->set_param( 'tags', array( $tag['term_id'] ) ); |
||
355 | $request->set_param( 'categories', array( $category['term_id'] ) ); |
||
356 | |||
357 | $response = $this->server->dispatch( $request ); |
||
358 | $this->assertCount( 1, $response->get_data() ); |
||
359 | } |
||
360 | |||
361 | View Code Duplication | public function test_get_items_sticky_query() { |
|
362 | $id1 = $this->post_id; |
||
363 | $id2 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
364 | |||
365 | update_option( 'sticky_posts', array( $id2 ) ); |
||
366 | |||
367 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
368 | $request->set_param( 'sticky', true ); |
||
369 | |||
370 | $response = $this->server->dispatch( $request ); |
||
371 | $this->assertCount( 1, $response->get_data() ); |
||
372 | |||
373 | $posts = $response->get_data(); |
||
374 | $post = $posts[0]; |
||
375 | $this->assertEquals( $id2, $post['id'] ); |
||
376 | } |
||
377 | |||
378 | public function test_get_items_sticky_with_post__in_query() { |
||
379 | $id1 = $this->post_id; |
||
380 | $id2 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
381 | $id3 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
382 | |||
383 | update_option( 'sticky_posts', array( $id2 ) ); |
||
384 | |||
385 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
386 | $request->set_param( 'sticky', true ); |
||
387 | $request->set_param( 'include', array( $id1 ) ); |
||
388 | |||
389 | $response = $this->server->dispatch( $request ); |
||
390 | $this->assertCount( 0, $response->get_data() ); |
||
391 | |||
392 | update_option( 'sticky_posts', array( $id1, $id2 ) ); |
||
393 | |||
394 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
395 | $request->set_param( 'sticky', true ); |
||
396 | $request->set_param( 'include', array( $id1 ) ); |
||
397 | |||
398 | $response = $this->server->dispatch( $request ); |
||
399 | |||
400 | $this->assertCount( 1, $response->get_data() ); |
||
401 | |||
402 | $posts = $response->get_data(); |
||
403 | $post = $posts[0]; |
||
404 | $this->assertEquals( $id1, $post['id'] ); |
||
405 | } |
||
406 | |||
407 | View Code Duplication | public function test_get_items_not_sticky_query() { |
|
408 | $id1 = $this->post_id; |
||
409 | $id2 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
410 | |||
411 | update_option( 'sticky_posts', array( $id2 ) ); |
||
412 | |||
413 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
414 | $request->set_param( 'sticky', false ); |
||
415 | |||
416 | $response = $this->server->dispatch( $request ); |
||
417 | $this->assertCount( 1, $response->get_data() ); |
||
418 | |||
419 | $posts = $response->get_data(); |
||
420 | $post = $posts[0]; |
||
421 | $this->assertEquals( $id1, $post['id'] ); |
||
422 | } |
||
423 | |||
424 | public function test_get_items_sticky_with_post__not_in_query() { |
||
425 | $id1 = $this->post_id; |
||
426 | $id2 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
427 | $id3 = $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
428 | |||
429 | update_option( 'sticky_posts', array( $id2 ) ); |
||
430 | |||
431 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
432 | $request->set_param( 'sticky', false ); |
||
433 | $request->set_param( 'exclude', array( $id3 ) ); |
||
434 | |||
435 | $response = $this->server->dispatch( $request ); |
||
436 | $this->assertCount( 1, $response->get_data() ); |
||
437 | |||
438 | $posts = $response->get_data(); |
||
439 | $post = $posts[0]; |
||
440 | $this->assertEquals( $id1, $post['id'] ); |
||
441 | } |
||
442 | |||
443 | /** |
||
444 | * @group test |
||
445 | */ |
||
446 | public function test_get_items_pagination_headers() { |
||
447 | // Start of the index |
||
448 | for ( $i = 0; $i < 49; $i++ ) { |
||
449 | $this->factory->post->create( array( |
||
450 | 'post_title' => "Post {$i}", |
||
451 | ) ); |
||
452 | } |
||
453 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
454 | $response = $this->server->dispatch( $request ); |
||
455 | $headers = $response->get_headers(); |
||
456 | $this->assertEquals( 50, $headers['X-WP-Total'] ); |
||
457 | $this->assertEquals( 5, $headers['X-WP-TotalPages'] ); |
||
458 | $next_link = add_query_arg( array( |
||
459 | 'page' => 2, |
||
460 | ), rest_url( '/wp/v2/posts' ) ); |
||
461 | $this->assertFalse( stripos( $headers['Link'], 'rel="prev"' ) ); |
||
462 | $this->assertContains( '<' . $next_link . '>; rel="next"', $headers['Link'] ); |
||
463 | // 3rd page |
||
464 | $this->factory->post->create( array( |
||
465 | 'post_title' => 'Post 51', |
||
466 | ) ); |
||
467 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
468 | $request->set_param( 'page', 3 ); |
||
469 | $response = $this->server->dispatch( $request ); |
||
470 | $headers = $response->get_headers(); |
||
471 | $this->assertEquals( 51, $headers['X-WP-Total'] ); |
||
472 | $this->assertEquals( 6, $headers['X-WP-TotalPages'] ); |
||
473 | $prev_link = add_query_arg( array( |
||
474 | 'page' => 2, |
||
475 | ), rest_url( '/wp/v2/posts' ) ); |
||
476 | $this->assertContains( '<' . $prev_link . '>; rel="prev"', $headers['Link'] ); |
||
477 | $next_link = add_query_arg( array( |
||
478 | 'page' => 4, |
||
479 | ), rest_url( '/wp/v2/posts' ) ); |
||
480 | $this->assertContains( '<' . $next_link . '>; rel="next"', $headers['Link'] ); |
||
481 | // Last page |
||
482 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
483 | $request->set_param( 'page', 6 ); |
||
484 | $response = $this->server->dispatch( $request ); |
||
485 | $headers = $response->get_headers(); |
||
486 | $this->assertEquals( 51, $headers['X-WP-Total'] ); |
||
487 | $this->assertEquals( 6, $headers['X-WP-TotalPages'] ); |
||
488 | $prev_link = add_query_arg( array( |
||
489 | 'page' => 5, |
||
490 | ), rest_url( '/wp/v2/posts' ) ); |
||
491 | $this->assertContains( '<' . $prev_link . '>; rel="prev"', $headers['Link'] ); |
||
492 | $this->assertFalse( stripos( $headers['Link'], 'rel="next"' ) ); |
||
493 | // Out of bounds |
||
494 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
495 | $request->set_param( 'page', 8 ); |
||
496 | $response = $this->server->dispatch( $request ); |
||
497 | $headers = $response->get_headers(); |
||
498 | $this->assertEquals( 51, $headers['X-WP-Total'] ); |
||
499 | $this->assertEquals( 6, $headers['X-WP-TotalPages'] ); |
||
500 | $prev_link = add_query_arg( array( |
||
501 | 'page' => 6, |
||
502 | ), rest_url( '/wp/v2/posts' ) ); |
||
503 | $this->assertContains( '<' . $prev_link . '>; rel="prev"', $headers['Link'] ); |
||
504 | $this->assertFalse( stripos( $headers['Link'], 'rel="next"' ) ); |
||
505 | |||
506 | // With query params. |
||
507 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
508 | $request->set_query_params( array( 'per_page' => 5, 'page' => 2 ) ); |
||
509 | $response = $this->server->dispatch( $request ); |
||
510 | $headers = $response->get_headers(); |
||
511 | $this->assertEquals( 51, $headers['X-WP-Total'] ); |
||
512 | $this->assertEquals( 11, $headers['X-WP-TotalPages'] ); |
||
513 | $prev_link = add_query_arg( array( |
||
514 | 'per_page' => 5, |
||
515 | 'page' => 1, |
||
516 | ), rest_url( '/wp/v2/posts' ) ); |
||
517 | $this->assertContains( '<' . $prev_link . '>; rel="prev"', $headers['Link'] ); |
||
518 | $next_link = add_query_arg( array( |
||
519 | 'per_page' => 5, |
||
520 | 'page' => 3, |
||
521 | ), rest_url( '/wp/v2/posts' ) ); |
||
522 | $this->assertContains( '<' . $next_link . '>; rel="next"', $headers['Link'] ); |
||
523 | } |
||
524 | |||
525 | View Code Duplication | public function test_get_items_private_filter_query_var() { |
|
526 | // Private query vars inaccessible to unauthorized users |
||
527 | wp_set_current_user( 0 ); |
||
528 | $draft_id = $this->factory->post->create( array( 'post_status' => 'draft' ) ); |
||
529 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
530 | $request->set_param( 'filter', array( 'post_status' => 'draft' ) ); |
||
531 | $response = $this->server->dispatch( $request ); |
||
532 | $data = $response->get_data(); |
||
533 | $this->assertCount( 1, $data ); |
||
534 | $this->assertEquals( $this->post_id, $data[0]['id'] ); |
||
535 | // But they are accessible to authorized users |
||
536 | wp_set_current_user( $this->editor_id ); |
||
537 | $response = $this->server->dispatch( $request ); |
||
538 | $data = $response->get_data(); |
||
539 | $this->assertCount( 1, $data ); |
||
540 | $this->assertEquals( $draft_id, $data[0]['id'] ); |
||
541 | } |
||
542 | |||
543 | View Code Duplication | public function test_get_items_invalid_per_page() { |
|
544 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
545 | $request->set_query_params( array( 'per_page' => -1 ) ); |
||
546 | $response = $this->server->dispatch( $request ); |
||
547 | $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); |
||
548 | } |
||
549 | |||
550 | public function test_get_items_invalid_posts_per_page_ignored() { |
||
551 | // This test ensures that filter[posts_per_page] is ignored, and that -1 |
||
552 | // cannot be used to sidestep per_page's valid range to retrieve all posts |
||
553 | View Code Duplication | for ( $i = 0; $i < 20; $i++ ) { |
|
554 | $this->factory->post->create( array( 'post_status' => 'publish' ) ); |
||
555 | } |
||
556 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
557 | $request->set_query_params( array( 'filter' => array( 'posts_per_page' => -1 ) ) ); |
||
558 | $response = $this->server->dispatch( $request ); |
||
559 | $this->assertCount( 10, $response->get_data() ); |
||
560 | } |
||
561 | |||
562 | View Code Duplication | public function test_get_items_invalid_context() { |
|
563 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
564 | $request->set_param( 'context', 'banana' ); |
||
565 | $response = $this->server->dispatch( $request ); |
||
566 | $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); |
||
567 | } |
||
568 | |||
569 | View Code Duplication | public function test_get_items_invalid_date() { |
|
570 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
571 | $request->set_param( 'after', rand_str() ); |
||
572 | $request->set_param( 'before', rand_str() ); |
||
573 | $response = $this->server->dispatch( $request ); |
||
574 | $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); |
||
575 | } |
||
576 | |||
577 | public function test_get_items_valid_date() { |
||
578 | $post1 = $this->factory->post->create( array( 'post_date' => '2016-01-15T00:00:00Z' ) ); |
||
579 | $post2 = $this->factory->post->create( array( 'post_date' => '2016-01-16T00:00:00Z' ) ); |
||
580 | $post3 = $this->factory->post->create( array( 'post_date' => '2016-01-17T00:00:00Z' ) ); |
||
581 | |||
582 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
583 | $request->set_param( 'after', '2016-01-15T00:00:00Z' ); |
||
584 | $request->set_param( 'before', '2016-01-17T00:00:00Z' ); |
||
585 | $response = $this->server->dispatch( $request ); |
||
586 | $data = $response->get_data(); |
||
587 | $this->assertCount( 1, $data ); |
||
588 | $this->assertEquals( $post2, $data[0]['id'] ); |
||
589 | } |
||
590 | |||
591 | public function test_get_item() { |
||
592 | $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
593 | $response = $this->server->dispatch( $request ); |
||
594 | |||
595 | $this->check_get_post_response( $response, 'view' ); |
||
596 | } |
||
597 | |||
598 | public function test_get_item_links() { |
||
599 | $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
600 | $response = $this->server->dispatch( $request ); |
||
601 | |||
602 | $links = $response->get_links(); |
||
603 | |||
604 | $this->assertEquals( rest_url( '/wp/v2/posts/' . $this->post_id ), $links['self'][0]['href'] ); |
||
605 | $this->assertEquals( rest_url( '/wp/v2/posts' ), $links['collection'][0]['href'] ); |
||
606 | |||
607 | $this->assertEquals( rest_url( '/wp/v2/types/' . get_post_type( $this->post_id ) ), $links['about'][0]['href'] ); |
||
608 | |||
609 | $replies_url = rest_url( '/wp/v2/comments' ); |
||
610 | $replies_url = add_query_arg( 'post', $this->post_id, $replies_url ); |
||
611 | $this->assertEquals( $replies_url, $links['replies'][0]['href'] ); |
||
612 | |||
613 | $this->assertEquals( rest_url( '/wp/v2/posts/' . $this->post_id . '/revisions' ), $links['version-history'][0]['href'] ); |
||
614 | |||
615 | $attachments_url = rest_url( '/wp/v2/media' ); |
||
616 | $attachments_url = add_query_arg( 'parent', $this->post_id, $attachments_url ); |
||
617 | $this->assertEquals( $attachments_url, $links['https://api.w.org/attachment'][0]['href'] ); |
||
618 | |||
619 | $term_links = $links['https://api.w.org/term']; |
||
620 | $tag_link = $cat_link = $format_link = null; |
||
621 | foreach ( $term_links as $link ) { |
||
622 | if ( 'post_tag' === $link['attributes']['taxonomy'] ) { |
||
623 | $tag_link = $link; |
||
624 | } elseif ( 'category' === $link['attributes']['taxonomy'] ) { |
||
625 | $cat_link = $link; |
||
626 | } else if ( 'post_format' === $link['attributes']['taxonomy'] ) { |
||
627 | $format_link = $link; |
||
628 | } |
||
629 | } |
||
630 | $this->assertNotEmpty( $tag_link ); |
||
631 | $this->assertNotEmpty( $cat_link ); |
||
632 | $this->assertNull( $format_link ); |
||
633 | |||
634 | $tags_url = add_query_arg( 'post', $this->post_id, rest_url( '/wp/v2/tags' ) ); |
||
635 | $this->assertEquals( $tags_url, $tag_link['href'] ); |
||
636 | |||
637 | $category_url = add_query_arg( 'post', $this->post_id, rest_url( '/wp/v2/categories' ) ); |
||
638 | $this->assertEquals( $category_url, $cat_link['href'] ); |
||
639 | } |
||
640 | |||
641 | public function test_get_item_links_no_author() { |
||
642 | $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
643 | $response = $this->server->dispatch( $request ); |
||
644 | $links = $response->get_links(); |
||
645 | $this->assertFalse( isset( $links['author'] ) ); |
||
646 | wp_update_post( array( 'ID' => $this->post_id, 'post_author' => $this->author_id ) ); |
||
647 | $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
648 | $response = $this->server->dispatch( $request ); |
||
649 | $links = $response->get_links(); |
||
650 | $this->assertEquals( rest_url( '/wp/v2/users/' . $this->author_id ), $links['author'][0]['href'] ); |
||
651 | } |
||
652 | |||
653 | public function test_get_post_without_permission() { |
||
654 | $draft_id = $this->factory->post->create( array( |
||
655 | 'post_status' => 'draft', |
||
656 | ) ); |
||
657 | wp_set_current_user( 0 ); |
||
658 | |||
659 | $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $draft_id ) ); |
||
660 | $response = $this->server->dispatch( $request ); |
||
661 | |||
662 | $this->assertErrorResponse( 'rest_forbidden', $response, 403 ); |
||
663 | } |
||
664 | |||
665 | public function test_get_post_invalid_id() { |
||
666 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . REST_TESTS_IMPOSSIBLY_HIGH_NUMBER ); |
||
667 | $response = $this->server->dispatch( $request ); |
||
668 | |||
669 | $this->assertErrorResponse( 'rest_post_invalid_id', $response, 404 ); |
||
670 | } |
||
671 | |||
672 | public function test_get_post_list_context_with_permission() { |
||
673 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
674 | $request->set_query_params( array( |
||
675 | 'context' => 'edit', |
||
676 | ) ); |
||
677 | |||
678 | wp_set_current_user( $this->editor_id ); |
||
679 | |||
680 | $response = $this->server->dispatch( $request ); |
||
681 | |||
682 | $this->check_get_posts_response( $response, 'edit' ); |
||
683 | } |
||
684 | |||
685 | View Code Duplication | public function test_get_post_list_context_without_permission() { |
|
686 | wp_set_current_user( 0 ); |
||
687 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
||
688 | $request->set_query_params( array( |
||
689 | 'context' => 'edit', |
||
690 | ) ); |
||
691 | $response = $this->server->dispatch( $request ); |
||
692 | |||
693 | $this->assertErrorResponse( 'rest_forbidden_context', $response, 401 ); |
||
694 | } |
||
695 | |||
696 | View Code Duplication | public function test_get_post_context_without_permission() { |
|
697 | wp_set_current_user( 0 ); |
||
698 | $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
699 | $request->set_query_params( array( |
||
700 | 'context' => 'edit', |
||
701 | ) ); |
||
702 | $response = $this->server->dispatch( $request ); |
||
703 | |||
704 | $this->assertErrorResponse( 'rest_forbidden_context', $response, 401 ); |
||
705 | } |
||
706 | |||
707 | View Code Duplication | public function test_get_post_with_password() { |
|
708 | $post_id = $this->factory->post->create( array( |
||
709 | 'post_password' => '$inthebananastand', |
||
710 | ) ); |
||
711 | |||
712 | $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $post_id ) ); |
||
713 | $response = $this->server->dispatch( $request ); |
||
714 | |||
715 | $this->check_get_post_response( $response, 'view' ); |
||
716 | |||
717 | $data = $response->get_data(); |
||
718 | $this->assertTrue( $data['content']['protected'] ); |
||
719 | $this->assertTrue( $data['excerpt']['protected'] ); |
||
720 | } |
||
721 | |||
722 | public function test_get_post_with_password_using_password() { |
||
723 | global $wp_version; |
||
724 | if ( version_compare( $wp_version, '4.7-alpha', '<' ) ) { |
||
725 | return $this->markTestSkipped( 'WordPress < 4.6 does not support filtering passwords for posts.' ); |
||
726 | } |
||
727 | |||
728 | $post_id = $this->factory->post->create( array( |
||
729 | 'post_password' => '$inthebananastand', |
||
730 | 'post_content' => 'Some secret content.', |
||
731 | 'post_excerpt' => 'Some secret excerpt.', |
||
732 | ) ); |
||
733 | |||
734 | $post = get_post( $post_id ); |
||
735 | $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $post_id ) ); |
||
736 | $request->set_param( 'password', '$inthebananastand' ); |
||
737 | $response = $this->server->dispatch( $request ); |
||
738 | |||
739 | $this->check_get_post_response( $response, 'view' ); |
||
740 | |||
741 | $data = $response->get_data(); |
||
742 | $this->assertEquals( wpautop( $post->post_content ), $data['content']['rendered'] ); |
||
743 | $this->assertEquals( wpautop( $post->post_excerpt ), $data['excerpt']['rendered'] ); |
||
744 | } |
||
745 | |||
746 | View Code Duplication | public function test_get_post_with_password_using_incorrect_password() { |
|
747 | $post_id = $this->factory->post->create( array( |
||
748 | 'post_password' => '$inthebananastand', |
||
749 | ) ); |
||
750 | |||
751 | $post = get_post( $post_id ); |
||
0 ignored issues
–
show
|
|||
752 | $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $post_id ) ); |
||
753 | $request->set_param( 'password', 'wrongpassword' ); |
||
754 | $response = $this->server->dispatch( $request ); |
||
755 | |||
756 | $this->assertErrorResponse( 'rest_post_incorrect_password', $response, 403 ); |
||
757 | } |
||
758 | |||
759 | public function test_get_post_with_password_without_permission() { |
||
760 | $post_id = $this->factory->post->create( array( |
||
761 | 'post_password' => '$inthebananastand', |
||
762 | 'post_content' => 'Some secret content.', |
||
763 | 'post_excerpt' => 'Some secret excerpt.', |
||
764 | ) ); |
||
765 | $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $post_id ) ); |
||
766 | $response = $this->server->dispatch( $request ); |
||
767 | $data = $response->get_data(); |
||
768 | $this->check_get_post_response( $response, 'view' ); |
||
769 | $this->assertEquals( '', $data['content']['rendered'] ); |
||
770 | $this->assertEquals( '', $data['excerpt']['rendered'] ); |
||
771 | |||
772 | } |
||
773 | |||
774 | public function test_get_item_read_permission_custom_post_status() { |
||
775 | register_post_status( 'testpubstatus', array( 'public' => true ) ); |
||
776 | register_post_status( 'testprivtatus', array( 'public' => false ) ); |
||
777 | // Public status |
||
778 | wp_update_post( array( 'ID' => $this->post_id, 'post_status' => 'testpubstatus' ) ); |
||
779 | $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
780 | $response = $this->server->dispatch( $request ); |
||
781 | $this->assertEquals( 200, $response->get_status() ); |
||
782 | // Private status |
||
783 | wp_update_post( array( 'ID' => $this->post_id, 'post_status' => 'testprivtatus' ) ); |
||
784 | $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
785 | $response = $this->server->dispatch( $request ); |
||
786 | $this->assertEquals( 403, $response->get_status() ); |
||
787 | } |
||
788 | |||
789 | public function test_prepare_item() { |
||
790 | wp_set_current_user( $this->editor_id ); |
||
791 | |||
792 | $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
793 | $request->set_query_params( array( 'context' => 'edit' ) ); |
||
794 | $response = $this->server->dispatch( $request ); |
||
795 | |||
796 | $this->check_get_post_response( $response, 'edit' ); |
||
797 | } |
||
798 | |||
799 | public function test_create_item() { |
||
800 | wp_set_current_user( $this->editor_id ); |
||
801 | |||
802 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
803 | $request->add_header( 'content-type', 'application/x-www-form-urlencoded' ); |
||
804 | $params = $this->set_post_data(); |
||
805 | $request->set_body_params( $params ); |
||
806 | $response = $this->server->dispatch( $request ); |
||
807 | |||
808 | $this->check_create_post_response( $response ); |
||
809 | } |
||
810 | |||
811 | public function test_rest_create_item() { |
||
812 | wp_set_current_user( $this->editor_id ); |
||
813 | |||
814 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
815 | $request->add_header( 'content-type', 'application/json' ); |
||
816 | $params = $this->set_post_data(); |
||
817 | $request->set_body( wp_json_encode( $params ) ); |
||
818 | $response = $this->server->dispatch( $request ); |
||
819 | |||
820 | $this->check_create_post_response( $response ); |
||
821 | } |
||
822 | |||
823 | public function test_create_post_invalid_id() { |
||
824 | wp_set_current_user( $this->editor_id ); |
||
825 | |||
826 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
827 | $params = $this->set_post_data( array( |
||
828 | 'id' => '3', |
||
829 | ) ); |
||
830 | $request->set_body_params( $params ); |
||
831 | $response = $this->server->dispatch( $request ); |
||
832 | |||
833 | $this->assertErrorResponse( 'rest_post_exists', $response, 400 ); |
||
834 | } |
||
835 | |||
836 | public function test_create_post_as_contributor() { |
||
837 | wp_set_current_user( $this->contributor_id ); |
||
838 | |||
839 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
840 | $params = $this->set_post_data(array( |
||
841 | 'status' => 'pending', |
||
842 | )); |
||
843 | |||
844 | $request->set_body_params( $params ); |
||
845 | $response = $this->server->dispatch( $request ); |
||
846 | $this->check_create_post_response( $response ); |
||
847 | } |
||
848 | |||
849 | public function test_create_post_sticky() { |
||
850 | wp_set_current_user( $this->editor_id ); |
||
851 | |||
852 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
853 | $params = $this->set_post_data( array( |
||
854 | 'sticky' => true, |
||
855 | ) ); |
||
856 | $request->set_body_params( $params ); |
||
857 | $response = $this->server->dispatch( $request ); |
||
858 | |||
859 | $new_data = $response->get_data(); |
||
860 | $this->assertEquals( true, $new_data['sticky'] ); |
||
861 | $post = get_post( $new_data['id'] ); |
||
862 | $this->assertEquals( true, is_sticky( $post->ID ) ); |
||
863 | } |
||
864 | |||
865 | public function test_create_post_sticky_as_contributor() { |
||
866 | wp_set_current_user( $this->contributor_id ); |
||
867 | |||
868 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
869 | $params = $this->set_post_data( array( |
||
870 | 'sticky' => true, |
||
871 | 'status' => 'pending', |
||
872 | ) ); |
||
873 | $request->set_body_params( $params ); |
||
874 | $response = $this->server->dispatch( $request ); |
||
875 | |||
876 | $this->assertErrorResponse( 'rest_cannot_assign_sticky', $response, 403 ); |
||
877 | } |
||
878 | |||
879 | public function test_create_post_other_author_without_permission() { |
||
880 | wp_set_current_user( $this->author_id ); |
||
881 | |||
882 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
883 | $params = $this->set_post_data(array( |
||
884 | 'author' => $this->editor_id, |
||
885 | )); |
||
886 | $request->set_body_params( $params ); |
||
887 | $response = $this->server->dispatch( $request ); |
||
888 | |||
889 | $this->assertErrorResponse( 'rest_cannot_edit_others', $response, 403 ); |
||
890 | } |
||
891 | |||
892 | public function test_create_post_without_permission() { |
||
893 | wp_set_current_user( 0 ); |
||
894 | |||
895 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
896 | $params = $this->set_post_data( array( |
||
897 | 'status' => 'draft', |
||
898 | ) ); |
||
899 | $request->set_body_params( $params ); |
||
900 | $response = $this->server->dispatch( $request ); |
||
901 | |||
902 | $this->assertErrorResponse( 'rest_cannot_create', $response, 401 ); |
||
903 | } |
||
904 | |||
905 | View Code Duplication | public function test_create_post_draft() { |
|
906 | wp_set_current_user( $this->editor_id ); |
||
907 | |||
908 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
909 | $params = $this->set_post_data( array( |
||
910 | 'status' => 'draft', |
||
911 | ) ); |
||
912 | $request->set_body_params( $params ); |
||
913 | $response = $this->server->dispatch( $request ); |
||
914 | |||
915 | $data = $response->get_data(); |
||
916 | $new_post = get_post( $data['id'] ); |
||
917 | $this->assertEquals( 'draft', $data['status'] ); |
||
918 | $this->assertEquals( 'draft', $new_post->post_status ); |
||
919 | // Confirm dates are null |
||
920 | $this->assertNull( $data['date_gmt'] ); |
||
921 | $this->assertNull( $data['modified_gmt'] ); |
||
922 | } |
||
923 | |||
924 | View Code Duplication | public function test_create_post_private() { |
|
925 | wp_set_current_user( $this->editor_id ); |
||
926 | |||
927 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
928 | $params = $this->set_post_data( array( |
||
929 | 'status' => 'private', |
||
930 | ) ); |
||
931 | $request->set_body_params( $params ); |
||
932 | $response = $this->server->dispatch( $request ); |
||
933 | |||
934 | $data = $response->get_data(); |
||
935 | $new_post = get_post( $data['id'] ); |
||
936 | $this->assertEquals( 'private', $data['status'] ); |
||
937 | $this->assertEquals( 'private', $new_post->post_status ); |
||
938 | } |
||
939 | |||
940 | public function test_create_post_private_without_permission() { |
||
941 | wp_set_current_user( $this->author_id ); |
||
942 | $user = wp_get_current_user(); |
||
943 | $user->add_cap( 'publish_posts', false ); |
||
944 | // Flush capabilities, https://core.trac.wordpress.org/ticket/28374 |
||
945 | $user->get_role_caps(); |
||
946 | $user->update_user_level_from_caps(); |
||
947 | |||
948 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
949 | $params = $this->set_post_data( array( |
||
950 | 'status' => 'private', |
||
951 | 'author' => $this->author_id, |
||
952 | ) ); |
||
953 | $request->set_body_params( $params ); |
||
954 | $response = $this->server->dispatch( $request ); |
||
955 | |||
956 | $this->assertErrorResponse( 'rest_cannot_publish', $response, 403 ); |
||
957 | } |
||
958 | |||
959 | public function test_create_post_publish_without_permission() { |
||
960 | wp_set_current_user( $this->author_id ); |
||
961 | $user = wp_get_current_user(); |
||
962 | $user->add_cap( 'publish_posts', false ); |
||
963 | // Flush capabilities, https://core.trac.wordpress.org/ticket/28374 |
||
964 | $user->get_role_caps(); |
||
965 | $user->update_user_level_from_caps(); |
||
966 | |||
967 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
968 | $params = $this->set_post_data( array( |
||
969 | 'status' => 'publish', |
||
970 | ) ); |
||
971 | $request->set_body_params( $params ); |
||
972 | $response = $this->server->dispatch( $request ); |
||
973 | |||
974 | $this->assertErrorResponse( 'rest_cannot_publish', $response, 403 ); |
||
975 | } |
||
976 | |||
977 | public function test_create_post_invalid_status() { |
||
978 | wp_set_current_user( $this->editor_id ); |
||
979 | |||
980 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
981 | $params = $this->set_post_data( array( |
||
982 | 'status' => 'teststatus', |
||
983 | ) ); |
||
984 | $request->set_body_params( $params ); |
||
985 | $response = $this->server->dispatch( $request ); |
||
986 | |||
987 | $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); |
||
988 | } |
||
989 | |||
990 | View Code Duplication | public function test_create_post_with_format() { |
|
991 | wp_set_current_user( $this->editor_id ); |
||
992 | |||
993 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
994 | $params = $this->set_post_data( array( |
||
995 | 'format' => 'gallery', |
||
996 | ) ); |
||
997 | $request->set_body_params( $params ); |
||
998 | $response = $this->server->dispatch( $request ); |
||
999 | |||
1000 | $data = $response->get_data(); |
||
1001 | $new_post = get_post( $data['id'] ); |
||
1002 | $this->assertEquals( 'gallery', $data['format'] ); |
||
1003 | $this->assertEquals( 'gallery', get_post_format( $new_post->ID ) ); |
||
1004 | } |
||
1005 | |||
1006 | public function test_create_post_with_invalid_format() { |
||
1007 | wp_set_current_user( $this->editor_id ); |
||
1008 | |||
1009 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1010 | $params = $this->set_post_data( array( |
||
1011 | 'format' => 'testformat', |
||
1012 | ) ); |
||
1013 | $request->set_body_params( $params ); |
||
1014 | $response = $this->server->dispatch( $request ); |
||
1015 | |||
1016 | $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); |
||
1017 | } |
||
1018 | |||
1019 | public function test_create_update_post_with_featured_media() { |
||
1020 | |||
1021 | $file = DIR_TESTDATA . '/images/canola.jpg'; |
||
1022 | $this->attachment_id = $this->factory->attachment->create_object( $file, 0, array( |
||
1023 | 'post_mime_type' => 'image/jpeg', |
||
1024 | 'menu_order' => rand( 1, 100 ), |
||
1025 | ) ); |
||
1026 | |||
1027 | wp_set_current_user( $this->editor_id ); |
||
1028 | |||
1029 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1030 | $params = $this->set_post_data( array( |
||
1031 | 'featured_media' => $this->attachment_id, |
||
1032 | ) ); |
||
1033 | $request->set_body_params( $params ); |
||
1034 | $response = $this->server->dispatch( $request ); |
||
1035 | $data = $response->get_data(); |
||
1036 | $new_post = get_post( $data['id'] ); |
||
1037 | $this->assertEquals( $this->attachment_id, $data['featured_media'] ); |
||
1038 | $this->assertEquals( $this->attachment_id, (int) get_post_thumbnail_id( $new_post->ID ) ); |
||
1039 | |||
1040 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts/' . $new_post->ID ); |
||
1041 | $params = $this->set_post_data( array( |
||
1042 | 'featured_media' => 0, |
||
1043 | ) ); |
||
1044 | $request->set_body_params( $params ); |
||
1045 | $response = $this->server->dispatch( $request ); |
||
1046 | $data = $response->get_data(); |
||
1047 | $this->assertEquals( 0, $data['featured_media'] ); |
||
1048 | $this->assertEquals( 0, (int) get_post_thumbnail_id( $new_post->ID ) ); |
||
1049 | } |
||
1050 | |||
1051 | public function test_create_post_invalid_author() { |
||
1052 | wp_set_current_user( $this->editor_id ); |
||
1053 | |||
1054 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1055 | $params = $this->set_post_data( array( |
||
1056 | 'author' => -1, |
||
1057 | ) ); |
||
1058 | $request->set_body_params( $params ); |
||
1059 | $response = $this->server->dispatch( $request ); |
||
1060 | |||
1061 | $this->assertErrorResponse( 'rest_invalid_author', $response, 400 ); |
||
1062 | } |
||
1063 | |||
1064 | public function test_create_post_invalid_author_without_permission() { |
||
1065 | wp_set_current_user( $this->author_id ); |
||
1066 | |||
1067 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1068 | $params = $this->set_post_data( array( |
||
1069 | 'author' => $this->editor_id, |
||
1070 | ) ); |
||
1071 | $request->set_body_params( $params ); |
||
1072 | $response = $this->server->dispatch( $request ); |
||
1073 | |||
1074 | $this->assertErrorResponse( 'rest_cannot_edit_others', $response, 403 ); |
||
1075 | } |
||
1076 | |||
1077 | public function test_create_post_with_password() { |
||
1078 | wp_set_current_user( $this->editor_id ); |
||
1079 | |||
1080 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1081 | $params = $this->set_post_data( array( |
||
1082 | 'password' => 'testing', |
||
1083 | ) ); |
||
1084 | $request->set_body_params( $params ); |
||
1085 | $response = $this->server->dispatch( $request ); |
||
1086 | |||
1087 | $data = $response->get_data(); |
||
1088 | $this->assertEquals( 'testing', $data['password'] ); |
||
1089 | } |
||
1090 | |||
1091 | public function test_create_post_with_falsy_password() { |
||
1092 | wp_set_current_user( $this->editor_id ); |
||
1093 | |||
1094 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1095 | $params = $this->set_post_data( array( |
||
1096 | 'password' => '0', |
||
1097 | ) ); |
||
1098 | $request->set_body_params( $params ); |
||
1099 | $response = $this->server->dispatch( $request ); |
||
1100 | |||
1101 | $data = $response->get_data(); |
||
1102 | |||
1103 | $this->assertEquals( '0', $data['password'] ); |
||
1104 | } |
||
1105 | |||
1106 | View Code Duplication | public function test_create_post_with_empty_string_password_and_sticky() { |
|
1107 | wp_set_current_user( $this->editor_id ); |
||
1108 | |||
1109 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1110 | $params = $this->set_post_data( array( |
||
1111 | 'password' => '', |
||
1112 | 'sticky' => true, |
||
1113 | ) ); |
||
1114 | $request->set_body_params( $params ); |
||
1115 | $response = $this->server->dispatch( $request ); |
||
1116 | |||
1117 | $this->assertEquals( 201, $response->get_status() ); |
||
1118 | $data = $response->get_data(); |
||
1119 | $this->assertEquals( '', $data['password'] ); |
||
1120 | } |
||
1121 | |||
1122 | public function test_create_post_with_password_and_sticky_fails() { |
||
1123 | wp_set_current_user( $this->editor_id ); |
||
1124 | |||
1125 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1126 | $params = $this->set_post_data( array( |
||
1127 | 'password' => '123', |
||
1128 | 'sticky' => true, |
||
1129 | ) ); |
||
1130 | $request->set_body_params( $params ); |
||
1131 | $response = $this->server->dispatch( $request ); |
||
1132 | |||
1133 | $this->assertErrorResponse( 'rest_invalid_field', $response, 400 ); |
||
1134 | } |
||
1135 | |||
1136 | public function test_create_post_custom_date() { |
||
1137 | wp_set_current_user( $this->editor_id ); |
||
1138 | |||
1139 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1140 | $params = $this->set_post_data( array( |
||
1141 | 'date' => '2010-01-01T02:00:00Z', |
||
1142 | ) ); |
||
1143 | $request->set_body_params( $params ); |
||
1144 | $response = $this->server->dispatch( $request ); |
||
1145 | |||
1146 | $data = $response->get_data(); |
||
1147 | $new_post = get_post( $data['id'] ); |
||
1148 | $time = gmmktime( 2, 0, 0, 1, 1, 2010 ); |
||
1149 | $this->assertEquals( '2010-01-01T02:00:00', $data['date'] ); |
||
1150 | $this->assertEquals( $time, strtotime( $new_post->post_date ) ); |
||
1151 | } |
||
1152 | |||
1153 | public function test_create_post_custom_date_with_timezone() { |
||
1154 | wp_set_current_user( $this->editor_id ); |
||
1155 | |||
1156 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1157 | $params = $this->set_post_data( array( |
||
1158 | 'date' => '2010-01-01T02:00:00-10:00', |
||
1159 | ) ); |
||
1160 | $request->set_body_params( $params ); |
||
1161 | $response = $this->server->dispatch( $request ); |
||
1162 | |||
1163 | $data = $response->get_data(); |
||
1164 | $new_post = get_post( $data['id'] ); |
||
1165 | $time = gmmktime( 12, 0, 0, 1, 1, 2010 ); |
||
1166 | |||
1167 | $this->assertEquals( '2010-01-01T12:00:00', $data['date'] ); |
||
1168 | $this->assertEquals( '2010-01-01T12:00:00', $data['modified'] ); |
||
1169 | |||
1170 | $this->assertEquals( $time, strtotime( $new_post->post_date ) ); |
||
1171 | $this->assertEquals( $time, strtotime( $new_post->post_modified ) ); |
||
1172 | } |
||
1173 | |||
1174 | public function test_create_post_with_db_error() { |
||
1175 | wp_set_current_user( $this->editor_id ); |
||
1176 | |||
1177 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1178 | $params = $this->set_post_data( array() ); |
||
1179 | $request->set_body_params( $params ); |
||
1180 | |||
1181 | /** |
||
1182 | * Disable showing error as the below is going to intentionally |
||
1183 | * trigger a DB error. |
||
1184 | */ |
||
1185 | global $wpdb; |
||
1186 | $wpdb->suppress_errors = true; |
||
1187 | add_filter( 'query', array( $this, 'error_insert_query' ) ); |
||
1188 | |||
1189 | $response = $this->server->dispatch( $request ); |
||
1190 | remove_filter( 'query', array( $this, 'error_insert_query' ) ); |
||
1191 | $wpdb->show_errors = true; |
||
1192 | |||
1193 | $this->assertErrorResponse( 'db_insert_error', $response, 500 ); |
||
1194 | } |
||
1195 | |||
1196 | public function test_create_post_with_invalid_date() { |
||
1197 | wp_set_current_user( $this->editor_id ); |
||
1198 | |||
1199 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1200 | $params = $this->set_post_data( array( |
||
1201 | 'date' => '2010-60-01T02:00:00Z', |
||
1202 | ) ); |
||
1203 | $request->set_body_params( $params ); |
||
1204 | $response = $this->server->dispatch( $request ); |
||
1205 | |||
1206 | $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); |
||
1207 | } |
||
1208 | |||
1209 | public function test_create_post_with_invalid_date_gmt() { |
||
1210 | wp_set_current_user( $this->editor_id ); |
||
1211 | |||
1212 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1213 | $params = $this->set_post_data( array( |
||
1214 | 'date_gmt' => '2010-60-01T02:00:00', |
||
1215 | ) ); |
||
1216 | $request->set_body_params( $params ); |
||
1217 | $response = $this->server->dispatch( $request ); |
||
1218 | |||
1219 | $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); |
||
1220 | } |
||
1221 | |||
1222 | View Code Duplication | public function test_create_post_with_quotes_in_title() { |
|
1223 | wp_set_current_user( $this->editor_id ); |
||
1224 | |||
1225 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1226 | $params = $this->set_post_data( array( |
||
1227 | 'title' => "Rob O'Rourke's Diary", |
||
1228 | ) ); |
||
1229 | $request->set_body_params( $params ); |
||
1230 | $response = $this->server->dispatch( $request ); |
||
1231 | $new_data = $response->get_data(); |
||
1232 | $this->assertEquals( "Rob O'Rourke's Diary", $new_data['title']['raw'] ); |
||
1233 | } |
||
1234 | |||
1235 | public function test_create_post_with_categories() { |
||
1236 | wp_set_current_user( $this->editor_id ); |
||
1237 | $category = wp_insert_term( 'Test Category', 'category' ); |
||
1238 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1239 | $params = $this->set_post_data( array( |
||
1240 | 'password' => 'testing', |
||
1241 | 'categories' => array( |
||
1242 | $category['term_id'] |
||
1243 | ), |
||
1244 | ) ); |
||
1245 | $request->set_body_params( $params ); |
||
1246 | $response = $this->server->dispatch( $request ); |
||
1247 | |||
1248 | $data = $response->get_data(); |
||
1249 | $this->assertEquals( array( $category['term_id'] ), $data['categories'] ); |
||
1250 | } |
||
1251 | |||
1252 | public function test_create_post_with_invalid_categories() { |
||
1253 | wp_set_current_user( $this->editor_id ); |
||
1254 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1255 | $params = $this->set_post_data( array( |
||
1256 | 'password' => 'testing', |
||
1257 | 'categories' => array( |
||
1258 | REST_TESTS_IMPOSSIBLY_HIGH_NUMBER |
||
1259 | ), |
||
1260 | ) ); |
||
1261 | $request->set_body_params( $params ); |
||
1262 | $response = $this->server->dispatch( $request ); |
||
1263 | |||
1264 | $data = $response->get_data(); |
||
1265 | $this->assertEquals( array(), $data['categories'] ); |
||
1266 | } |
||
1267 | |||
1268 | View Code Duplication | public function test_update_item() { |
|
1269 | wp_set_current_user( $this->editor_id ); |
||
1270 | |||
1271 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1272 | $request->add_header( 'content-type', 'application/x-www-form-urlencoded' ); |
||
1273 | $params = $this->set_post_data(); |
||
1274 | $request->set_body_params( $params ); |
||
1275 | $response = $this->server->dispatch( $request ); |
||
1276 | |||
1277 | $this->check_update_post_response( $response ); |
||
1278 | $new_data = $response->get_data(); |
||
1279 | $this->assertEquals( $this->post_id, $new_data['id'] ); |
||
1280 | $this->assertEquals( $params['title'], $new_data['title']['raw'] ); |
||
1281 | $this->assertEquals( $params['content'], $new_data['content']['raw'] ); |
||
1282 | $this->assertEquals( $params['excerpt'], $new_data['excerpt']['raw'] ); |
||
1283 | $post = get_post( $this->post_id ); |
||
1284 | $this->assertEquals( $params['title'], $post->post_title ); |
||
1285 | $this->assertEquals( $params['content'], $post->post_content ); |
||
1286 | $this->assertEquals( $params['excerpt'], $post->post_excerpt ); |
||
1287 | } |
||
1288 | |||
1289 | View Code Duplication | public function test_rest_update_post() { |
|
1290 | wp_set_current_user( $this->editor_id ); |
||
1291 | |||
1292 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1293 | $request->add_header( 'content-type', 'application/json' ); |
||
1294 | $params = $this->set_post_data(); |
||
1295 | $request->set_body( wp_json_encode( $params ) ); |
||
1296 | $response = $this->server->dispatch( $request ); |
||
1297 | |||
1298 | $this->check_update_post_response( $response ); |
||
1299 | $new_data = $response->get_data(); |
||
1300 | $this->assertEquals( $this->post_id, $new_data['id'] ); |
||
1301 | $this->assertEquals( $params['title'], $new_data['title']['raw'] ); |
||
1302 | $this->assertEquals( $params['content'], $new_data['content']['raw'] ); |
||
1303 | $this->assertEquals( $params['excerpt'], $new_data['excerpt']['raw'] ); |
||
1304 | $post = get_post( $this->post_id ); |
||
1305 | $this->assertEquals( $params['title'], $post->post_title ); |
||
1306 | $this->assertEquals( $params['content'], $post->post_content ); |
||
1307 | $this->assertEquals( $params['excerpt'], $post->post_excerpt ); |
||
1308 | } |
||
1309 | |||
1310 | public function test_rest_update_post_raw() { |
||
1311 | wp_set_current_user( $this->editor_id ); |
||
1312 | |||
1313 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1314 | $request->add_header( 'content-type', 'application/json' ); |
||
1315 | $params = $this->set_raw_post_data(); |
||
1316 | $request->set_body( wp_json_encode( $params ) ); |
||
1317 | $response = $this->server->dispatch( $request ); |
||
1318 | |||
1319 | $this->check_update_post_response( $response ); |
||
1320 | $new_data = $response->get_data(); |
||
1321 | $this->assertEquals( $this->post_id, $new_data['id'] ); |
||
1322 | $this->assertEquals( $params['title']['raw'], $new_data['title']['raw'] ); |
||
1323 | $this->assertEquals( $params['content']['raw'], $new_data['content']['raw'] ); |
||
1324 | $this->assertEquals( $params['excerpt']['raw'], $new_data['excerpt']['raw'] ); |
||
1325 | $post = get_post( $this->post_id ); |
||
1326 | $this->assertEquals( $params['title']['raw'], $post->post_title ); |
||
1327 | $this->assertEquals( $params['content']['raw'], $post->post_content ); |
||
1328 | $this->assertEquals( $params['excerpt']['raw'], $post->post_excerpt ); |
||
1329 | } |
||
1330 | |||
1331 | public function test_update_post_without_extra_params() { |
||
1332 | wp_set_current_user( $this->editor_id ); |
||
1333 | |||
1334 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1335 | $params = $this->set_post_data(); |
||
1336 | unset( $params['type'] ); |
||
1337 | unset( $params['name'] ); |
||
1338 | unset( $params['author'] ); |
||
1339 | unset( $params['status'] ); |
||
1340 | $request->set_body_params( $params ); |
||
1341 | $response = $this->server->dispatch( $request ); |
||
1342 | |||
1343 | $this->check_update_post_response( $response ); |
||
1344 | } |
||
1345 | |||
1346 | public function test_update_post_without_permission() { |
||
1347 | wp_set_current_user( $this->editor_id ); |
||
1348 | $user = wp_get_current_user(); |
||
1349 | $user->add_cap( 'edit_published_posts', false ); |
||
1350 | // Flush capabilities, https://core.trac.wordpress.org/ticket/28374 |
||
1351 | $user->get_role_caps(); |
||
1352 | $user->update_user_level_from_caps(); |
||
1353 | |||
1354 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1355 | $params = $this->set_post_data(); |
||
1356 | $request->set_body_params( $params ); |
||
1357 | $response = $this->server->dispatch( $request ); |
||
1358 | |||
1359 | $this->assertErrorResponse( 'rest_cannot_edit', $response, 403 ); |
||
1360 | } |
||
1361 | |||
1362 | View Code Duplication | public function test_update_post_sticky_as_contributor() { |
|
1363 | wp_set_current_user( $this->contributor_id ); |
||
1364 | |||
1365 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1366 | $params = $this->set_post_data( array( |
||
1367 | 'sticky' => true, |
||
1368 | 'status' => 'pending', |
||
1369 | ) ); |
||
1370 | $request->set_body_params( $params ); |
||
1371 | $response = $this->server->dispatch( $request ); |
||
1372 | |||
1373 | $this->assertErrorResponse( 'rest_cannot_edit', $response, 403 ); |
||
1374 | } |
||
1375 | |||
1376 | public function test_update_post_invalid_id() { |
||
1377 | wp_set_current_user( $this->editor_id ); |
||
1378 | |||
1379 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', REST_TESTS_IMPOSSIBLY_HIGH_NUMBER ) ); |
||
1380 | $response = $this->server->dispatch( $request ); |
||
1381 | |||
1382 | $this->assertErrorResponse( 'rest_post_invalid_id', $response, 404 ); |
||
1383 | } |
||
1384 | |||
1385 | public function test_update_post_invalid_route() { |
||
1386 | wp_set_current_user( $this->editor_id ); |
||
1387 | |||
1388 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/pages/%d', $this->post_id ) ); |
||
1389 | $response = $this->server->dispatch( $request ); |
||
1390 | |||
1391 | $this->assertErrorResponse( 'rest_post_invalid_id', $response, 404 ); |
||
1392 | } |
||
1393 | |||
1394 | View Code Duplication | public function test_update_post_with_format() { |
|
1395 | wp_set_current_user( $this->editor_id ); |
||
1396 | |||
1397 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1398 | $params = $this->set_post_data( array( |
||
1399 | 'format' => 'gallery', |
||
1400 | ) ); |
||
1401 | $request->set_body_params( $params ); |
||
1402 | $response = $this->server->dispatch( $request ); |
||
1403 | |||
1404 | $data = $response->get_data(); |
||
1405 | $new_post = get_post( $data['id'] ); |
||
1406 | $this->assertEquals( 'gallery', $data['format'] ); |
||
1407 | $this->assertEquals( 'gallery', get_post_format( $new_post->ID ) ); |
||
1408 | } |
||
1409 | |||
1410 | public function test_update_post_with_invalid_format() { |
||
1411 | wp_set_current_user( $this->editor_id ); |
||
1412 | |||
1413 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1414 | $params = $this->set_post_data( array( |
||
1415 | 'format' => 'testformat', |
||
1416 | ) ); |
||
1417 | $request->set_body_params( $params ); |
||
1418 | $response = $this->server->dispatch( $request ); |
||
1419 | |||
1420 | $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); |
||
1421 | } |
||
1422 | |||
1423 | public function test_update_post_ignore_readonly() { |
||
1424 | wp_set_current_user( $this->editor_id ); |
||
1425 | |||
1426 | $new_content = rand_str(); |
||
1427 | $expected_modified = current_time( 'mysql' ); |
||
1428 | |||
1429 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1430 | $params = $this->set_post_data( array( |
||
1431 | 'modified' => '2010-06-01T02:00:00Z', |
||
1432 | 'content' => $new_content, |
||
1433 | ) ); |
||
1434 | $request->set_body_params( $params ); |
||
1435 | $response = $this->server->dispatch( $request ); |
||
1436 | |||
1437 | // The readonly modified param should be ignored, request should be a success. |
||
1438 | $data = $response->get_data(); |
||
1439 | $new_post = get_post( $data['id'] ); |
||
1440 | |||
1441 | $this->assertEquals( $new_content, $data['content']['raw'] ); |
||
1442 | $this->assertEquals( $new_content, $new_post->post_content ); |
||
1443 | |||
1444 | // The modified date should equal the current time. |
||
1445 | $this->assertEquals( date( 'Y-m-d', strtotime( mysql_to_rfc3339( $expected_modified ) ) ), date( 'Y-m-d', strtotime( $data['modified'] ) ) ); |
||
1446 | $this->assertEquals( date( 'Y-m-d', strtotime( $expected_modified ) ), date( 'Y-m-d', strtotime( $new_post->post_modified ) ) ); |
||
1447 | } |
||
1448 | |||
1449 | View Code Duplication | public function test_update_post_with_invalid_date() { |
|
1450 | wp_set_current_user( $this->editor_id ); |
||
1451 | |||
1452 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1453 | $params = $this->set_post_data( array( |
||
1454 | 'date' => rand_str(), |
||
1455 | ) ); |
||
1456 | $request->set_body_params( $params ); |
||
1457 | $response = $this->server->dispatch( $request ); |
||
1458 | |||
1459 | $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); |
||
1460 | } |
||
1461 | |||
1462 | View Code Duplication | public function test_update_post_with_invalid_date_gmt() { |
|
1463 | wp_set_current_user( $this->editor_id ); |
||
1464 | |||
1465 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1466 | $params = $this->set_post_data( array( |
||
1467 | 'date_gmt' => rand_str(), |
||
1468 | ) ); |
||
1469 | $request->set_body_params( $params ); |
||
1470 | $response = $this->server->dispatch( $request ); |
||
1471 | |||
1472 | $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); |
||
1473 | } |
||
1474 | |||
1475 | View Code Duplication | public function test_update_post_slug() { |
|
1476 | wp_set_current_user( $this->editor_id ); |
||
1477 | |||
1478 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1479 | $params = $this->set_post_data( array( |
||
1480 | 'slug' => 'sample-slug', |
||
1481 | ) ); |
||
1482 | $request->set_body_params( $params ); |
||
1483 | $response = $this->server->dispatch( $request ); |
||
1484 | |||
1485 | $new_data = $response->get_data(); |
||
1486 | $this->assertEquals( 'sample-slug', $new_data['slug'] ); |
||
1487 | $post = get_post( $new_data['id'] ); |
||
1488 | $this->assertEquals( 'sample-slug', $post->post_name ); |
||
1489 | } |
||
1490 | |||
1491 | View Code Duplication | public function test_update_post_slug_accented_chars() { |
|
1492 | wp_set_current_user( $this->editor_id ); |
||
1493 | |||
1494 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1495 | $params = $this->set_post_data( array( |
||
1496 | 'slug' => 'tęst-acceńted-chäræcters', |
||
1497 | ) ); |
||
1498 | $request->set_body_params( $params ); |
||
1499 | $response = $this->server->dispatch( $request ); |
||
1500 | |||
1501 | $new_data = $response->get_data(); |
||
1502 | $this->assertEquals( 'test-accented-charaecters', $new_data['slug'] ); |
||
1503 | $post = get_post( $new_data['id'] ); |
||
1504 | $this->assertEquals( 'test-accented-charaecters', $post->post_name ); |
||
1505 | } |
||
1506 | |||
1507 | public function test_update_post_sticky() { |
||
1508 | wp_set_current_user( $this->editor_id ); |
||
1509 | |||
1510 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1511 | $params = $this->set_post_data( array( |
||
1512 | 'sticky' => true, |
||
1513 | ) ); |
||
1514 | $request->set_body_params( $params ); |
||
1515 | $response = $this->server->dispatch( $request ); |
||
1516 | |||
1517 | $new_data = $response->get_data(); |
||
1518 | $this->assertEquals( true, $new_data['sticky'] ); |
||
1519 | $post = get_post( $new_data['id'] ); |
||
1520 | $this->assertEquals( true, is_sticky( $post->ID ) ); |
||
1521 | |||
1522 | // Updating another field shouldn't change sticky status |
||
1523 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1524 | $params = $this->set_post_data( array( |
||
1525 | 'title' => 'This should not reset sticky', |
||
1526 | ) ); |
||
1527 | $request->set_body_params( $params ); |
||
1528 | $response = $this->server->dispatch( $request ); |
||
1529 | |||
1530 | $new_data = $response->get_data(); |
||
1531 | $this->assertEquals( true, $new_data['sticky'] ); |
||
1532 | $post = get_post( $new_data['id'] ); |
||
1533 | $this->assertEquals( true, is_sticky( $post->ID ) ); |
||
1534 | } |
||
1535 | |||
1536 | public function test_update_post_excerpt() { |
||
1537 | wp_set_current_user( $this->editor_id ); |
||
1538 | |||
1539 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1540 | $request->set_body_params( array( |
||
1541 | 'excerpt' => 'An Excerpt', |
||
1542 | ) ); |
||
1543 | |||
1544 | $response = $this->server->dispatch( $request ); |
||
1545 | $new_data = $response->get_data(); |
||
1546 | $this->assertEquals( 'An Excerpt', $new_data['excerpt']['raw'] ); |
||
1547 | } |
||
1548 | |||
1549 | public function test_update_post_empty_excerpt() { |
||
1550 | wp_set_current_user( $this->editor_id ); |
||
1551 | |||
1552 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1553 | $request->set_body_params( array( |
||
1554 | 'excerpt' => '', |
||
1555 | ) ); |
||
1556 | |||
1557 | $response = $this->server->dispatch( $request ); |
||
1558 | $new_data = $response->get_data(); |
||
1559 | $this->assertEquals( '', $new_data['excerpt']['raw'] ); |
||
1560 | } |
||
1561 | |||
1562 | public function test_update_post_content() { |
||
1563 | wp_set_current_user( $this->editor_id ); |
||
1564 | |||
1565 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1566 | $request->set_body_params( array( |
||
1567 | 'content' => 'Some Content', |
||
1568 | ) ); |
||
1569 | |||
1570 | $response = $this->server->dispatch( $request ); |
||
1571 | $new_data = $response->get_data(); |
||
1572 | $this->assertEquals( 'Some Content', $new_data['content']['raw'] ); |
||
1573 | } |
||
1574 | |||
1575 | public function test_update_post_empty_content() { |
||
1576 | wp_set_current_user( $this->editor_id ); |
||
1577 | |||
1578 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1579 | $request->set_body_params( array( |
||
1580 | 'content' => '', |
||
1581 | ) ); |
||
1582 | |||
1583 | $response = $this->server->dispatch( $request ); |
||
1584 | $new_data = $response->get_data(); |
||
1585 | $this->assertEquals( '', $new_data['content']['raw'] ); |
||
1586 | } |
||
1587 | |||
1588 | View Code Duplication | public function test_update_post_with_password_and_sticky_fails() { |
|
1589 | wp_set_current_user( $this->editor_id ); |
||
1590 | |||
1591 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1592 | $params = $this->set_post_data( array( |
||
1593 | 'password' => '123', |
||
1594 | 'sticky' => true, |
||
1595 | ) ); |
||
1596 | $request->set_body_params( $params ); |
||
1597 | $response = $this->server->dispatch( $request ); |
||
1598 | |||
1599 | $this->assertErrorResponse( 'rest_invalid_field', $response, 400 ); |
||
1600 | } |
||
1601 | |||
1602 | public function test_update_stick_post_with_password_fails() { |
||
1603 | wp_set_current_user( $this->editor_id ); |
||
1604 | |||
1605 | stick_post( $this->post_id ); |
||
1606 | |||
1607 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1608 | $params = $this->set_post_data( array( |
||
1609 | 'password' => '123', |
||
1610 | ) ); |
||
1611 | $request->set_body_params( $params ); |
||
1612 | $response = $this->server->dispatch( $request ); |
||
1613 | |||
1614 | $this->assertErrorResponse( 'rest_invalid_field', $response, 400 ); |
||
1615 | } |
||
1616 | |||
1617 | View Code Duplication | public function test_update_password_protected_post_with_sticky_fails() { |
|
1618 | wp_set_current_user( $this->editor_id ); |
||
1619 | |||
1620 | wp_update_post( array( 'ID' => $this->post_id, 'post_password' => '123' ) ); |
||
1621 | |||
1622 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1623 | $params = $this->set_post_data( array( |
||
1624 | 'sticky' => true, |
||
1625 | ) ); |
||
1626 | $request->set_body_params( $params ); |
||
1627 | $response = $this->server->dispatch( $request ); |
||
1628 | |||
1629 | $this->assertErrorResponse( 'rest_invalid_field', $response, 400 ); |
||
1630 | } |
||
1631 | |||
1632 | public function test_update_post_with_quotes_in_title() { |
||
1633 | wp_set_current_user( $this->editor_id ); |
||
1634 | |||
1635 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1636 | $params = $this->set_post_data( array( |
||
1637 | 'title' => "Rob O'Rourke's Diary", |
||
1638 | ) ); |
||
1639 | $request->set_body_params( $params ); |
||
1640 | $response = $this->server->dispatch( $request ); |
||
1641 | $new_data = $response->get_data(); |
||
1642 | $this->assertEquals( "Rob O'Rourke's Diary", $new_data['title']['raw'] ); |
||
1643 | } |
||
1644 | |||
1645 | public function test_update_post_with_categories() { |
||
1646 | |||
1647 | wp_set_current_user( $this->editor_id ); |
||
1648 | $category = wp_insert_term( 'Test Category', 'category' ); |
||
1649 | |||
1650 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1651 | $params = $this->set_post_data( array( |
||
1652 | 'title' => 'Tester', |
||
1653 | 'categories' => array( |
||
1654 | $category['term_id'], |
||
1655 | ), |
||
1656 | ) ); |
||
1657 | $request->set_body_params( $params ); |
||
1658 | $response = $this->server->dispatch( $request ); |
||
1659 | $new_data = $response->get_data(); |
||
1660 | $this->assertEquals( array( $category['term_id'] ), $new_data['categories'] ); |
||
1661 | $categories_path = ''; |
||
1662 | $links = $response->get_links(); |
||
1663 | foreach ( $links['https://api.w.org/term'] as $link ) { |
||
1664 | if ( 'category' === $link['attributes']['taxonomy'] ) { |
||
1665 | $categories_path = $link['href']; |
||
1666 | } |
||
1667 | } |
||
1668 | $query = parse_url( $categories_path, PHP_URL_QUERY ); |
||
1669 | parse_str( $query, $args ); |
||
1670 | $request = new WP_REST_Request( 'GET', $args['rest_route'] ); |
||
1671 | unset( $args['rest_route'] ); |
||
1672 | $request->set_query_params( $args ); |
||
1673 | $response = $this->server->dispatch( $request ); |
||
1674 | $data = $response->get_data(); |
||
1675 | $this->assertCount( 1, $data ); |
||
1676 | $this->assertEquals( 'Test Category', $data[0]['name'] ); |
||
1677 | } |
||
1678 | |||
1679 | public function test_update_post_with_empty_categories() { |
||
1680 | |||
1681 | wp_set_current_user( $this->editor_id ); |
||
1682 | $category = wp_insert_term( 'Test Category', 'category' ); |
||
1683 | wp_set_object_terms( $this->post_id, $category['term_id'], 'category' ); |
||
1684 | |||
1685 | $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1686 | $params = $this->set_post_data( array( |
||
1687 | 'title' => 'Tester', |
||
1688 | 'categories' => array(), |
||
1689 | ) ); |
||
1690 | $request->set_body_params( $params ); |
||
1691 | $response = $this->server->dispatch( $request ); |
||
1692 | $new_data = $response->get_data(); |
||
1693 | $this->assertEquals( array(), $new_data['categories'] ); |
||
1694 | } |
||
1695 | |||
1696 | View Code Duplication | public function test_delete_item() { |
|
1697 | $post_id = $this->factory->post->create( array( 'post_title' => 'Deleted post' ) ); |
||
1698 | wp_set_current_user( $this->editor_id ); |
||
1699 | |||
1700 | $request = new WP_REST_Request( 'DELETE', sprintf( '/wp/v2/posts/%d', $post_id ) ); |
||
1701 | $response = $this->server->dispatch( $request ); |
||
1702 | |||
1703 | $this->assertNotInstanceOf( 'WP_Error', $response ); |
||
1704 | $this->assertEquals( 200, $response->get_status() ); |
||
1705 | $data = $response->get_data(); |
||
1706 | $this->assertEquals( 'Deleted post', $data['title']['raw'] ); |
||
1707 | } |
||
1708 | |||
1709 | View Code Duplication | public function test_delete_item_skip_trash() { |
|
1710 | $post_id = $this->factory->post->create( array( 'post_title' => 'Deleted post' ) ); |
||
1711 | wp_set_current_user( $this->editor_id ); |
||
1712 | |||
1713 | $request = new WP_REST_Request( 'DELETE', sprintf( '/wp/v2/posts/%d', $post_id ) ); |
||
1714 | $request['force'] = true; |
||
1715 | $response = $this->server->dispatch( $request ); |
||
1716 | |||
1717 | $this->assertNotInstanceOf( 'WP_Error', $response ); |
||
1718 | $this->assertEquals( 200, $response->get_status() ); |
||
1719 | $data = $response->get_data(); |
||
1720 | $this->assertEquals( 'Deleted post', $data['title']['raw'] ); |
||
1721 | } |
||
1722 | |||
1723 | View Code Duplication | public function test_delete_item_already_trashed() { |
|
1724 | $post_id = $this->factory->post->create( array( 'post_title' => 'Deleted post' ) ); |
||
1725 | wp_set_current_user( $this->editor_id ); |
||
1726 | $request = new WP_REST_Request( 'DELETE', sprintf( '/wp/v2/posts/%d', $post_id ) ); |
||
1727 | $response = $this->server->dispatch( $request ); |
||
1728 | $this->assertEquals( 200, $response->get_status() ); |
||
1729 | $response = $this->server->dispatch( $request ); |
||
1730 | $this->assertErrorResponse( 'rest_already_trashed', $response, 410 ); |
||
1731 | } |
||
1732 | |||
1733 | View Code Duplication | public function test_delete_post_invalid_id() { |
|
1734 | wp_set_current_user( $this->editor_id ); |
||
1735 | |||
1736 | $request = new WP_REST_Request( 'DELETE', '/wp/v2/posts/' . REST_TESTS_IMPOSSIBLY_HIGH_NUMBER ); |
||
1737 | $response = $this->server->dispatch( $request ); |
||
1738 | |||
1739 | $this->assertErrorResponse( 'rest_post_invalid_id', $response, 404 ); |
||
1740 | } |
||
1741 | |||
1742 | public function test_delete_post_invalid_post_type() { |
||
1743 | $page_id = $this->factory->post->create( array( 'post_type' => 'page' ) ); |
||
1744 | wp_set_current_user( $this->editor_id ); |
||
1745 | |||
1746 | $request = new WP_REST_Request( 'DELETE', '/wp/v2/posts/' . $page_id ); |
||
1747 | $response = $this->server->dispatch( $request ); |
||
1748 | |||
1749 | $this->assertErrorResponse( 'rest_post_invalid_id', $response, 404 ); |
||
1750 | } |
||
1751 | |||
1752 | public function test_delete_post_without_permission() { |
||
1753 | wp_set_current_user( $this->author_id ); |
||
1754 | |||
1755 | $request = new WP_REST_Request( 'DELETE', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1756 | $response = $this->server->dispatch( $request ); |
||
1757 | |||
1758 | $this->assertErrorResponse( 'rest_cannot_delete', $response, 403 ); |
||
1759 | } |
||
1760 | |||
1761 | public function test_register_post_type_invalid_controller() { |
||
1762 | |||
1763 | register_post_type( 'invalid-controller', array( 'show_in_rest' => true, 'rest_controller_class' => 'Fake_Class_Baba' ) ); |
||
1764 | create_initial_rest_routes(); |
||
1765 | $routes = $this->server->get_routes(); |
||
1766 | $this->assertFalse( isset( $routes['/wp/v2/invalid-controller'] ) ); |
||
1767 | _unregister_post_type( 'invalid-controller' ); |
||
1768 | |||
1769 | } |
||
1770 | |||
1771 | public function test_get_item_schema() { |
||
1772 | $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts' ); |
||
1773 | $response = $this->server->dispatch( $request ); |
||
1774 | $data = $response->get_data(); |
||
1775 | $properties = $data['schema']['properties']; |
||
1776 | $this->assertEquals( 22, count( $properties ) ); |
||
1777 | $this->assertArrayHasKey( 'author', $properties ); |
||
1778 | $this->assertArrayHasKey( 'comment_status', $properties ); |
||
1779 | $this->assertArrayHasKey( 'content', $properties ); |
||
1780 | $this->assertArrayHasKey( 'date', $properties ); |
||
1781 | $this->assertArrayHasKey( 'date_gmt', $properties ); |
||
1782 | $this->assertArrayHasKey( 'excerpt', $properties ); |
||
1783 | $this->assertArrayHasKey( 'featured_media', $properties ); |
||
1784 | $this->assertArrayHasKey( 'guid', $properties ); |
||
1785 | $this->assertArrayHasKey( 'format', $properties ); |
||
1786 | $this->assertArrayHasKey( 'id', $properties ); |
||
1787 | $this->assertArrayHasKey( 'link', $properties ); |
||
1788 | $this->assertArrayHasKey( 'modified', $properties ); |
||
1789 | $this->assertArrayHasKey( 'modified_gmt', $properties ); |
||
1790 | $this->assertArrayHasKey( 'password', $properties ); |
||
1791 | $this->assertArrayHasKey( 'ping_status', $properties ); |
||
1792 | $this->assertArrayHasKey( 'slug', $properties ); |
||
1793 | $this->assertArrayHasKey( 'status', $properties ); |
||
1794 | $this->assertArrayHasKey( 'sticky', $properties ); |
||
1795 | $this->assertArrayHasKey( 'title', $properties ); |
||
1796 | $this->assertArrayHasKey( 'type', $properties ); |
||
1797 | $this->assertArrayHasKey( 'tags', $properties ); |
||
1798 | $this->assertArrayHasKey( 'categories', $properties ); |
||
1799 | } |
||
1800 | |||
1801 | public function test_get_additional_field_registration() { |
||
1802 | |||
1803 | $schema = array( |
||
1804 | 'type' => 'integer', |
||
1805 | 'description' => 'Some integer of mine', |
||
1806 | 'enum' => array( 1, 2, 3, 4 ), |
||
1807 | 'context' => array( 'view', 'edit' ), |
||
1808 | ); |
||
1809 | |||
1810 | register_rest_field( 'post', 'my_custom_int', array( |
||
1811 | 'schema' => $schema, |
||
1812 | 'get_callback' => array( $this, 'additional_field_get_callback' ), |
||
1813 | 'update_callback' => array( $this, 'additional_field_update_callback' ), |
||
1814 | ) ); |
||
1815 | |||
1816 | $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts' ); |
||
1817 | |||
1818 | $response = $this->server->dispatch( $request ); |
||
1819 | $data = $response->get_data(); |
||
1820 | |||
1821 | $this->assertArrayHasKey( 'my_custom_int', $data['schema']['properties'] ); |
||
1822 | $this->assertEquals( $schema, $data['schema']['properties']['my_custom_int'] ); |
||
1823 | |||
1824 | wp_set_current_user( 1 ); |
||
1825 | |||
1826 | $post_id = $this->factory->post->create(); |
||
1827 | |||
1828 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . $post_id ); |
||
1829 | |||
1830 | $response = $this->server->dispatch( $request ); |
||
1831 | $this->assertArrayHasKey( 'my_custom_int', $response->data ); |
||
1832 | |||
1833 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts/' . $post_id ); |
||
1834 | $request->set_body_params(array( |
||
1835 | 'my_custom_int' => 123, |
||
1836 | )); |
||
1837 | |||
1838 | $response = $this->server->dispatch( $request ); |
||
1839 | $this->assertEquals( 123, get_post_meta( $post_id, 'my_custom_int', true ) ); |
||
1840 | |||
1841 | $request = new WP_REST_Request( 'POST', '/wp/v2/posts' ); |
||
1842 | $request->set_body_params(array( |
||
1843 | 'my_custom_int' => 123, |
||
1844 | 'title' => 'hello', |
||
1845 | )); |
||
1846 | |||
1847 | $response = $this->server->dispatch( $request ); |
||
1848 | |||
1849 | $this->assertEquals( 123, $response->data['my_custom_int'] ); |
||
1850 | |||
1851 | global $wp_rest_additional_fields; |
||
1852 | $wp_rest_additional_fields = array(); |
||
1853 | } |
||
1854 | |||
1855 | View Code Duplication | public function test_additional_field_update_errors() { |
|
1856 | $schema = array( |
||
1857 | 'type' => 'integer', |
||
1858 | 'description' => 'Some integer of mine', |
||
1859 | 'enum' => array( 1, 2, 3, 4 ), |
||
1860 | 'context' => array( 'view', 'edit' ), |
||
1861 | ); |
||
1862 | |||
1863 | register_rest_field( 'post', 'my_custom_int', array( |
||
1864 | 'schema' => $schema, |
||
1865 | 'get_callback' => array( $this, 'additional_field_get_callback' ), |
||
1866 | 'update_callback' => array( $this, 'additional_field_update_callback' ), |
||
1867 | ) ); |
||
1868 | |||
1869 | wp_set_current_user( $this->editor_id ); |
||
1870 | // Check for error on update. |
||
1871 | $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', $this->post_id ) ); |
||
1872 | $request->set_body_params( array( |
||
1873 | 'my_custom_int' => 'returnError', |
||
1874 | ) ); |
||
1875 | |||
1876 | $response = $this->server->dispatch( $request ); |
||
1877 | |||
1878 | $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); |
||
1879 | |||
1880 | global $wp_rest_additional_fields; |
||
1881 | $wp_rest_additional_fields = array(); |
||
1882 | } |
||
1883 | |||
1884 | public function additional_field_get_callback( $object ) { |
||
1885 | return get_post_meta( $object['id'], 'my_custom_int', true ); |
||
1886 | } |
||
1887 | |||
1888 | public function additional_field_update_callback( $value, $post ) { |
||
1889 | if ( 'returnError' === $value ) { |
||
1890 | return new WP_Error( 'rest_invalid_param', 'Testing an error.', array( 'status' => 400 ) ); |
||
1891 | } |
||
1892 | update_post_meta( $post->ID, 'my_custom_int', $value ); |
||
1893 | } |
||
1894 | |||
1895 | public function tearDown() { |
||
1896 | _unregister_post_type( 'youseeeme' ); |
||
1897 | if ( isset( $this->attachment_id ) ) { |
||
1898 | $this->remove_added_uploads(); |
||
1899 | } |
||
1900 | parent::tearDown(); |
||
1901 | } |
||
1902 | |||
1903 | /** |
||
1904 | * Internal function used to disable an insert query which |
||
1905 | * will trigger a wpdb error for testing purposes. |
||
1906 | */ |
||
1907 | public function error_insert_query( $query ) { |
||
1908 | if ( strpos( $query, 'INSERT' ) === 0 ) { |
||
1909 | $query = '],'; |
||
1910 | } |
||
1911 | return $query; |
||
1912 | } |
||
1913 | |||
1914 | } |
||
1915 |
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.
Both the
$myVar
assignment in line 1 and the$higher
assignment in line 2 are dead. The first because$myVar
is never used and the second because$higher
is always overwritten for every possible time line.