forked from WordPress/wordpress-develop
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwpInsertPost.php
More file actions
305 lines (261 loc) · 7.6 KB
/
wpInsertPost.php
File metadata and controls
305 lines (261 loc) · 7.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
<?php
/**
* @group post
*/
class Tests_WPInsertPost extends WP_UnitTestCase {
protected static $user_ids = array(
'administrator' => null,
'contributor' => null,
);
static function wpSetUpBeforeClass( $factory ) {
self::$user_ids = array(
'administrator' => $factory->user->create(
array(
'role' => 'administrator',
)
),
'contributor' => $factory->user->create(
array(
'role' => 'contributor',
)
),
);
$role = get_role( 'administrator' );
$role->add_cap( 'publish_mapped_meta_caps' );
$role->add_cap( 'publish_unmapped_meta_caps' );
}
static function tearDownAfterClass() {
$role = get_role( 'administrator' );
$role->remove_cap( 'publish_mapped_meta_caps' );
$role->remove_cap( 'publish_unmapped_meta_caps' );
parent::tearDownAfterClass();
}
function setUp() {
parent::setUp();
register_post_type(
'mapped_meta_caps',
array(
'capability_type' => array( 'mapped_meta_cap', 'mapped_meta_caps' ),
'map_meta_cap' => true,
)
);
register_post_type(
'unmapped_meta_caps',
array(
'capability_type' => array( 'unmapped_meta_cap', 'unmapped_meta_caps' ),
'map_meta_cap' => false,
)
);
register_post_type(
'no_admin_caps',
array(
'capability_type' => array( 'no_admin_cap', 'no_admin_caps' ),
'map_meta_cap' => false,
)
);
}
/**
* @ticket 11863
*/
function test_trashing_a_post_should_add_trashed_suffix_to_post_name() {
$trashed_about_page_id = self::factory()->post->create(
array(
'post_type' => 'page',
'post_title' => 'About',
'post_status' => 'publish',
)
);
wp_trash_post( $trashed_about_page_id );
$this->assertEquals( 'about__trashed', get_post( $trashed_about_page_id )->post_name );
}
/**
* @ticket 11863
*/
public function test_trashed_suffix_should_be_added_to_post_with__trashed_in_slug() {
$trashed_about_page_id = self::factory()->post->create(
array(
'post_type' => 'page',
'post_title' => 'About',
'post_status' => 'publish',
'post_name' => 'foo__trashed__foo',
)
);
wp_trash_post( $trashed_about_page_id );
$this->assertEquals( 'foo__trashed__foo__trashed', get_post( $trashed_about_page_id )->post_name );
}
/**
* @ticket 11863
*/
function test_trashed_posts_original_post_name_should_be_reassigned_after_untrashing() {
$about_page_id = self::factory()->post->create(
array(
'post_type' => 'page',
'post_title' => 'About',
'post_status' => 'publish',
)
);
wp_trash_post( $about_page_id );
wp_untrash_post( $about_page_id );
$this->assertEquals( 'about', get_post( $about_page_id )->post_name );
}
/**
* @ticket 11863
*/
function test_creating_a_new_post_should_add_trashed_suffix_to_post_name_of_trashed_posts_with_the_desired_slug() {
$trashed_about_page_id = self::factory()->post->create(
array(
'post_type' => 'page',
'post_title' => 'About',
'post_status' => 'trash',
)
);
$about_page_id = self::factory()->post->create(
array(
'post_type' => 'page',
'post_title' => 'About',
'post_status' => 'publish',
)
);
$this->assertEquals( 'about__trashed', get_post( $trashed_about_page_id )->post_name );
$this->assertEquals( 'about', get_post( $about_page_id )->post_name );
}
/**
* @ticket 11863
*/
function test_untrashing_a_post_with_a_stored_desired_post_name_should_get_its_post_name_suffixed_if_another_post_has_taken_the_desired_post_name() {
$about_page_id = self::factory()->post->create(
array(
'post_type' => 'page',
'post_title' => 'About',
'post_status' => 'publish',
)
);
wp_trash_post( $about_page_id );
$another_about_page_id = self::factory()->post->create(
array(
'post_type' => 'page',
'post_title' => 'About',
'post_status' => 'publish',
)
);
wp_untrash_post( $about_page_id );
$this->assertEquals( 'about', get_post( $another_about_page_id )->post_name );
$this->assertEquals( 'about-2', get_post( $about_page_id )->post_name );
}
/**
* Data for testing the ability for users to set the post slug.
*
* @return array Array of test arguments.
*/
function data_various_post_types() {
return array(
array(
'mapped_meta_caps',
),
array(
'unmapped_meta_caps',
),
array(
'post',
),
);
}
/**
* Test contributor making changes to the pending post slug.
*
* @ticket 42464
* @dataProvider data_various_post_types
*/
function test_contributor_cannot_set_post_slug( $post_type ) {
wp_set_current_user( self::$user_ids['contributor'] );
$post_id = $this->factory()->post->create(
array(
'post_title' => 'Jefferson claim: nice to have Washington on your side.',
'post_content' => "I’m in the cabinet. I am complicit in watching him grabbin’ at power and kiss it.\n\nIf Washington isn’t gon’ listen to disciplined dissidents, this is the difference: this kid is out!",
'post_type' => $post_type,
'post_name' => 'new-washington',
'post_status' => 'pending',
)
);
$expected = '';
$actual = get_post_field( 'post_name', $post_id );
$this->assertSame( $expected, $actual );
// Now update the post.
wp_update_post(
array(
'ID' => $post_id,
'post_title' => 'Hamilton has Washington on side: Jefferson',
'post_name' => 'edited-washington',
)
);
$expected = '';
$actual = get_post_field( 'post_name', $post_id );
$this->assertSame( $expected, $actual );
}
/**
* Test administrator making changes to the pending post slug.
*
* @ticket 42464
* @dataProvider data_various_post_types
*/
function test_administrator_can_set_post_slug( $post_type ) {
wp_set_current_user( self::$user_ids['administrator'] );
$post_id = $this->factory()->post->create(
array(
'post_title' => 'What is the Conner Project?',
'post_content' => 'Evan Hansen’s last link to his friend Conner is a signature on his broken arm.',
'post_type' => $post_type,
'post_name' => 'dear-evan-hansen-explainer',
'post_status' => 'pending',
)
);
$expected = 'dear-evan-hansen-explainer';
$actual = get_post_field( 'post_name', $post_id );
$this->assertSame( $expected, $actual );
// Now update the post.
wp_update_post(
array(
'ID' => $post_id,
'post_title' => 'Conner Project to close',
'post_name' => 'dear-evan-hansen-spoiler',
)
);
$expected = 'dear-evan-hansen-spoiler';
$actual = get_post_field( 'post_name', $post_id );
$this->assertSame( $expected, $actual );
}
/**
* Test administrator making changes to a pending post slug for a post type they don't
* have permission to publish.
*
* These assertions failed prior to ticket #42464.
*
* @ticket 42464
*/
function test_administrator_cannot_set_post_slug_on_post_type_they_cannot_publish() {
wp_set_current_user( self::$user_ids['administrator'] );
$post_id = $this->factory()->post->create(
array(
'post_title' => 'Everything is legal in New Jersey',
'post_content' => 'Shortly before his death, Philip Hamilton was heard to claim everything was legal in the garden state.',
'post_type' => 'no_admin_caps',
'post_name' => 'yet-another-duel',
'post_status' => 'pending',
)
);
$expected = '';
$actual = get_post_field( 'post_name', $post_id );
$this->assertSame( $expected, $actual );
// Now update the post.
wp_update_post(
array(
'ID' => $post_id,
'post_title' => 'Ten things illegal in New Jersey',
'post_name' => 'foreshadowing-in-nj',
)
);
$expected = '';
$actual = get_post_field( 'post_name', $post_id );
$this->assertSame( $expected, $actual );
}
}