- Timestamp:
- 01/15/2025 12:44:43 PM (5 months ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
-
trunk/tests/phpunit/tests/rest-api/wpRestTemplateAutosavesController.php
r59073 r59605 23 23 * @var string 24 24 */ 25 const PARENT_POST_TYPE = 'wp_template'; 25 const TEMPLATE_PART_NAME = 'my_template_part'; 26 27 /** 28 * @var string 29 */ 30 const TEMPLATE_POST_TYPE = 'wp_template'; 31 32 /** 33 * @var string 34 */ 35 const TEMPLATE_PART_POST_TYPE = 'wp_template_part'; 26 36 27 37 /** … … 53 63 54 64 /** 55 * Create fake data before our tests run. 65 * Template part post. 66 * 67 * @since 6.7.0 68 * 69 * @var WP_Post 70 */ 71 private static $template_part_post; 72 73 /** 74 * Create fake data before the tests run. 56 75 * 57 76 * @param WP_UnitTest_Factory $factory Helper that lets us create fake data. … … 74 93 self::$template_post = $factory->post->create_and_get( 75 94 array( 76 'post_type' => self:: PARENT_POST_TYPE,95 'post_type' => self::TEMPLATE_POST_TYPE, 77 96 'post_name' => self::TEMPLATE_NAME, 78 'post_title' => 'My Template',97 'post_title' => 'My template', 79 98 'post_content' => 'Content', 80 99 'post_excerpt' => 'Description of my template', … … 87 106 ); 88 107 wp_set_post_terms( self::$template_post->ID, self::TEST_THEME, 'wp_theme' ); 108 109 // Set up template part post. 110 self::$template_part_post = $factory->post->create_and_get( 111 array( 112 'post_type' => self::TEMPLATE_PART_POST_TYPE, 113 'post_name' => self::TEMPLATE_PART_NAME, 114 'post_title' => 'My template part', 115 'post_content' => 'Content', 116 'post_excerpt' => 'Description of my template part', 117 'tax_input' => array( 118 'wp_theme' => array( 119 self::TEST_THEME, 120 ), 121 'wp_template_part_area' => array( 122 WP_TEMPLATE_PART_AREA_HEADER, 123 ), 124 ), 125 ) 126 ); 127 wp_set_post_terms( self::$template_part_post->ID, self::TEST_THEME, 'wp_theme' ); 128 wp_set_post_terms( self::$template_part_post->ID, WP_TEMPLATE_PART_AREA_HEADER, 'wp_template_part_area' ); 89 129 } 90 130 … … 118 158 119 159 /** 160 * @coversNothing 161 * @ticket 56922 162 */ 163 public function test_context_param() { 164 // A proper data provider cannot be used because this method's signature must match the parent method. 165 // Therefore, actual tests are performed in the test_context_param_with_data_provider method. 166 $this->assertTrue( true ); 167 } 168 169 /** 170 * @dataProvider data_context_param_with_data_provider 120 171 * @covers WP_REST_Template_Autosaves_Controller::get_context_param 121 172 * @ticket 56922 122 */ 123 public function test_context_param() { 173 * 174 * @param string $rest_base Base part of the REST API endpoint to test. 175 * @param string $template_id Template ID to use in the test. 176 */ 177 public function test_context_param_with_data_provider( $rest_base, $template_id ) { 124 178 // Collection. 125 $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/ templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME. '/autosaves' );179 $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves' ); 126 180 $response = rest_get_server()->dispatch( $request ); 127 181 $data = $response->get_data(); … … 145 199 146 200 // Single. 147 $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/ templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME. '/autosaves/1' );201 $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves/1' ); 148 202 $response = rest_get_server()->dispatch( $request ); 149 203 $data = $response->get_data(); … … 166 220 167 221 /** 222 * Data provider for test_context_param_with_data_provider. 223 * 224 * @return array 225 */ 226 public function data_context_param_with_data_provider() { 227 return array( 228 'templates' => array( 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), 229 'template parts' => array( 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), 230 ); 231 } 232 233 /** 234 * @coversNothing 235 * @ticket 56922 236 */ 237 public function test_get_items() { 238 // A proper data provider cannot be used because this method's signature must match the parent method. 239 // Therefore, actual tests are performed in the test_get_items_with_data_provider method. 240 $this->assertTrue( true ); 241 } 242 243 /** 244 * @dataProvider data_get_items_with_data_provider 168 245 * @covers WP_REST_Template_Autosaves_Controller::get_items 169 246 * @ticket 56922 170 */ 171 public function test_get_items() { 247 * 248 * @param string $parent_post_property_name A class property name that contains the parent post object. 249 * @param string $rest_base Base part of the REST API endpoint to test. 250 * @param string $template_id Template ID to use in the test. 251 */ 252 public function test_get_items_with_data_provider( $parent_post_property_name, $rest_base, $template_id ) { 172 253 wp_set_current_user( self::$admin_id ); 254 // Cannot access this property in the data provider because it is not initialized at the time of execution. 255 $parent_post = self::$$parent_post_property_name; 173 256 $autosave_post_id = wp_create_post_autosave( 174 257 array( 175 258 'post_content' => 'Autosave content.', 176 'post_ID' => self::$template_post->ID,177 'post_type' => self::PARENT_POST_TYPE,259 'post_ID' => $parent_post->ID, 260 'post_type' => $parent_post->post_type, 178 261 ) 179 262 ); … … 181 264 $request = new WP_REST_Request( 182 265 'GET', 183 '/wp/v2/ templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME. '/autosaves'266 '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves' 184 267 ); 185 268 $response = rest_get_server()->dispatch( $request ); 186 269 $autosaves = $response->get_data(); 270 $this->assertSame( WP_Http::OK, $response->get_status(), 'Response is expected to have a status code of 200.' ); 187 271 188 272 $this->assertCount( … … 198 282 ); 199 283 $this->assertSame( 200 self::$template_post->ID,284 $parent_post->ID, 201 285 $autosaves[0]['parent'], 202 286 'Failed asserting that the parent ID of the autosave matches the template post ID.' … … 210 294 211 295 /** 296 * Data provider for test_get_items_with_data_provider. 297 * 298 * @return array 299 */ 300 public function data_get_items_with_data_provider() { 301 return array( 302 'templates' => array( 'template_post', 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), 303 'template parts' => array( 'template_part_post', 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), 304 ); 305 } 306 307 /** 308 * @dataProvider data_get_items_for_templates_based_on_theme_files_should_return_bad_response_status 309 * @ticket 61970 310 * 311 * @param string $rest_base Base part of the REST API endpoint to test. 312 * @param string $template_id Template ID to use in the test. 313 */ 314 public function test_get_items_for_templates_based_on_theme_files_should_return_bad_response_status( $rest_base, $template_id ) { 315 wp_set_current_user( self::$admin_id ); 316 switch_theme( 'block-theme' ); 317 318 $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves' ); 319 320 $response = rest_get_server()->dispatch( $request ); 321 $this->assertErrorResponse( 322 'rest_invalid_template', 323 $response, 324 WP_Http::BAD_REQUEST, 325 sprintf( 'Response is expected to have a status code of %d.', WP_Http::BAD_REQUEST ) 326 ); 327 } 328 329 /** 330 * Data provider for test_get_items_for_templates_based_on_theme_files_should_return_bad_response_status. 331 * 332 * @return array 333 */ 334 public function data_get_items_for_templates_based_on_theme_files_should_return_bad_response_status() { 335 return array( 336 'templates' => array( 'templates', self::TEST_THEME . '//page-home' ), 337 'template parts' => array( 'template-parts', self::TEST_THEME . '//small-header' ), 338 ); 339 } 340 341 /** 342 * @dataProvider data_get_item_for_templates_based_on_theme_files_should_return_bad_response_status 343 * @ticket 56922 344 * 345 * @param string $rest_base Base part of the REST API endpoint to test. 346 * @param string $template_id Template ID to use in the test. 347 */ 348 public function test_get_item_for_templates_based_on_theme_files_should_return_bad_response_status( $rest_base, $template_id ) { 349 wp_set_current_user( self::$admin_id ); 350 switch_theme( 'block-theme' ); 351 352 $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves/1' ); 353 354 $response = rest_get_server()->dispatch( $request ); 355 $this->assertErrorResponse( 356 'rest_invalid_template', 357 $response, 358 WP_Http::BAD_REQUEST, 359 sprintf( 'Response is expected to have a status code of %d.', WP_Http::BAD_REQUEST ) 360 ); 361 } 362 363 /** 364 * Data provider for test_get_item_for_templates_based_on_theme_files_should_return_bad_response_status. 365 * 366 * @return array 367 */ 368 public function data_get_item_for_templates_based_on_theme_files_should_return_bad_response_status() { 369 return array( 370 'templates' => array( 'templates', self::TEST_THEME . '//page-home' ), 371 'template parts' => array( 'template-parts', self::TEST_THEME . '//small-header' ), 372 ); 373 } 374 375 /** 376 * @coversNothing 377 * @ticket 56922 378 */ 379 public function test_get_item() { 380 // A proper data provider cannot be used because this method's signature must match the parent method. 381 // Therefore, actual tests are performed in the test_get_item_with_data_provider method. 382 $this->assertTrue( true ); 383 } 384 385 /** 386 * @dataProvider data_get_item_with_data_provider 212 387 * @covers WP_REST_Template_Autosaves_Controller::get_item 213 388 * @ticket 56922 214 */ 215 public function test_get_item() { 389 * 390 * @param string $parent_post_property_name A class property name that contains the parent post object. 391 * @param string $rest_base Base part of the REST API endpoint to test. 392 * @param string $template_id Template ID to use in the test. 393 */ 394 public function test_get_item_with_data_provider( $parent_post_property_name, $rest_base, $template_id ) { 216 395 wp_set_current_user( self::$admin_id ); 396 397 $parent_post = self::$$parent_post_property_name; 217 398 218 399 $autosave_post_id = wp_create_post_autosave( 219 400 array( 220 401 'post_content' => 'Autosave content.', 221 'post_ID' => self::$template_post->ID, 222 'post_type' => self::PARENT_POST_TYPE, 223 ) 224 ); 225 226 $request = new WP_REST_Request( 'GET', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/autosaves/' . $autosave_post_id ); 227 $response = rest_get_server()->dispatch( $request ); 402 'post_ID' => $parent_post->ID, 403 'post_type' => $parent_post->post_type, 404 ) 405 ); 406 407 $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves/' . $autosave_post_id ); 408 $response = rest_get_server()->dispatch( $request ); 409 410 $this->assertSame( WP_Http::OK, $response->get_status(), 'Response is expected to have a status code of 200.' ); 228 411 $autosave = $response->get_data(); 229 412 … … 235 418 ); 236 419 $this->assertSame( 237 self::$template_post->ID,420 $parent_post->ID, 238 421 $autosave['parent'], 239 422 sprintf( 240 423 'Failed asserting that the parent id of the autosave is the same as %s.', 241 self::$template_post->ID 242 ) 243 ); 244 } 245 246 /** 424 $parent_post->ID 425 ) 426 ); 427 } 428 429 /** 430 * Data provider for test_get_item_with_data_provider. 431 * 432 * @return array 433 */ 434 public function data_get_item_with_data_provider() { 435 return array( 436 'templates' => array( 'template_post', 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), 437 'template parts' => array( 'template_part_post', 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), 438 ); 439 } 440 441 /** 442 * @coversNothing 443 * @ticket 56922 444 */ 445 public function test_prepare_item() { 446 // A proper data provider cannot be used because this method's signature must match the parent method. 447 // Therefore, actual tests are performed in the test_prepare_item_with_data_provider method. 448 $this->assertTrue( true ); 449 } 450 451 /** 452 * @dataProvider data_prepare_item_with_data_provider 247 453 * @covers WP_REST_Template_Autosaves_Controller::prepare_item_for_response 248 454 * @ticket 56922 249 */ 250 public function test_prepare_item() { 455 * 456 * @param string $parent_post_property_name A class property name that contains the parent post object. 457 * @param string $rest_base Base part of the REST API endpoint to test. 458 * @param string $template_id Template ID to use in the test. 459 */ 460 public function test_prepare_item_with_data_provider( $parent_post_property_name, $rest_base, $template_id ) { 251 461 wp_set_current_user( self::$admin_id ); 462 $parent_post = self::$$parent_post_property_name; 252 463 $autosave_post_id = wp_create_post_autosave( 253 464 array( 254 465 'post_content' => 'Autosave content.', 255 'post_ID' => self::$template_post->ID,256 'post_type' => self::PARENT_POST_TYPE,466 'post_ID' => $parent_post->ID, 467 'post_type' => $parent_post->post_type, 257 468 ) 258 469 ); 259 470 $autosave_db_post = get_post( $autosave_post_id ); 260 $template_id = self::TEST_THEME . '//' . self::TEMPLATE_NAME; 261 $request = new WP_REST_Request( 'GET', '/wp/v2/templates/' . $template_id . '/autosaves/' . $autosave_db_post->ID ); 262 $controller = new WP_REST_Template_Autosaves_Controller( self::PARENT_POST_TYPE ); 471 $request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves/' . $autosave_db_post->ID ); 472 $controller = new WP_REST_Template_Autosaves_Controller( $parent_post->post_type ); 263 473 $response = $controller->prepare_item_for_response( $autosave_db_post, $request ); 264 474 $this->assertInstanceOf( … … 276 486 ); 277 487 $this->assertSame( 278 self::$template_post->ID,488 $parent_post->ID, 279 489 $autosave['parent'], 280 490 sprintf( 281 491 'Failed asserting that the parent id of the autosave is the same as %s.', 282 self::$template_post->ID492 $parent_post->ID 283 493 ) 284 494 ); … … 301 511 302 512 /** 513 * Data provider for test_prepare_item_with_data_provider. 514 * 515 * @return array 516 */ 517 public function data_prepare_item_with_data_provider() { 518 return array( 519 'templates' => array( 'template_post', 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), 520 'template parts' => array( 'template_part_post', 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), 521 ); 522 } 523 524 /** 525 * @coversNothing 526 * @ticket 56922 527 */ 528 public function test_get_item_schema() { 529 // A proper data provider cannot be used because this method's signature must match the parent method. 530 // Therefore, actual tests are performed in the test_prepare_item_with_data_provider method. 531 $this->assertTrue( true ); 532 } 533 534 /** 535 * @dataProvider data_get_item_schema_with_data_provider 303 536 * @covers WP_REST_Template_Autosaves_Controller::get_item_schema 304 537 * @ticket 56922 305 */ 306 public function test_get_item_schema() { 307 $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/templates/' . self::TEST_THEME . '/' . self::TEMPLATE_NAME . '/autosaves' ); 538 * 539 * @param string $rest_base Base part of the REST API endpoint to test. 540 * @param string $template_id Template ID to use in the test. 541 * @param int $properties_count Number of properties to check for in the schema. 542 * @param array $additional_properties Additional properties to check for in the schema. 543 */ 544 public function test_get_item_schema_with_data_provider( $rest_base, $template_id, $properties_count, $additional_properties = array() ) { 545 $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves' ); 308 546 $response = rest_get_server()->dispatch( $request ); 309 547 $data = $response->get_data(); … … 311 549 $properties = $data['schema']['properties']; 312 550 313 $this->assertCount( 19, $properties );551 $this->assertCount( $properties_count, $properties ); 314 552 $this->assertArrayHasKey( 'id', $properties, 'ID key should exist in properties.' ); 315 553 $this->assertArrayHasKey( 'slug', $properties, 'Slug key should exist in properties.' ); … … 325 563 $this->assertArrayHasKey( 'author', $properties, 'author key should exist in properties.' ); 326 564 $this->assertArrayHasKey( 'modified', $properties, 'modified key should exist in properties.' ); 327 $this->assertArrayHasKey( 'is_custom', $properties, 'is_custom key should exist in properties.' );328 565 $this->assertArrayHasKey( 'parent', $properties, 'Parent key should exist in properties.' ); 329 566 $this->assertArrayHasKey( 'author_text', $properties, 'author_text key should exist in properties.' ); 330 567 $this->assertArrayHasKey( 'original_source', $properties, 'original_source key should exist in properties.' ); 331 $this->assertArrayHasKey( 'plugin', $properties, 'plugin key should exist in properties.' ); 332 } 333 334 /** 568 foreach ( $additional_properties as $additional_property ) { 569 $this->assertArrayHasKey( $additional_property, $properties, $additional_property . ' key should exist in properties.' ); 570 } 571 } 572 573 /** 574 * Data provider for test_get_item_schema_with_data_provider. 575 * 576 * @return array 577 */ 578 public function data_get_item_schema_with_data_provider() { 579 return array( 580 'templates' => array( 581 'templates', 582 self::TEST_THEME . '//' . self::TEMPLATE_NAME, 583 19, 584 array( 'is_custom', 'plugin' ), 585 ), 586 'template parts' => array( 587 'template-parts', 588 self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME, 589 18, 590 array( 'area' ), 591 ), 592 ); 593 } 594 595 /** 596 * @coversNothing 597 * @ticket 56922 598 */ 599 public function test_create_item() { 600 // A proper data provider cannot be used because this method's signature must match the parent method. 601 // Therefore, actual tests are performed in the test_create_item_with_data_provider method. 602 $this->assertTrue( true ); 603 } 604 605 /** 606 * @dataProvider data_create_item_with_data_provider 335 607 * @covers WP_REST_Template_Autosaves_Controller::create_item 336 608 * @ticket 56922 337 */ 338 public function test_create_item() { 609 * 610 * @param string $rest_base Base part of the REST API endpoint to test. 611 * @param string $template_id Template ID to use in the test. 612 */ 613 public function test_create_item_with_data_provider( $rest_base, $template_id ) { 339 614 wp_set_current_user( self::$admin_id ); 340 615 341 $template_id = self::TEST_THEME . '/' . self::TEMPLATE_NAME; 342 $request = new WP_REST_Request( 'POST', '/wp/v2/templates/' . $template_id . '/autosaves' ); 616 $request = new WP_REST_Request( 'POST', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves' ); 343 617 $request->add_header( 'Content-Type', 'application/x-www-form-urlencoded' ); 344 618 … … 354 628 $response = rest_get_server()->dispatch( $request ); 355 629 356 $this->assertNotWPError( $response, 'The response from this request should not return a WP_Error object ' );630 $this->assertNotWPError( $response, 'The response from this request should not return a WP_Error object.' ); 357 631 $response = rest_ensure_response( $response ); 358 632 $data = $response->get_data(); 359 633 360 $this->assertArrayHasKey( 'content', $data, 'Response should contain a key called content' ); 361 $this->assertSame( $request_parameters['content'], $data['content']['raw'], 'Response data should match for field content' ); 362 363 $this->assertArrayHasKey( 'title', $data, 'Response should contain a key called title' ); 364 $this->assertSame( $request_parameters['title'], $data['title']['raw'], 'Response data should match for field title' ); 365 } 366 367 /** 368 * @covers WP_REST_Template_Autosaves_Controller::delete_item 369 * @ticket 56922 370 */ 371 public function test_create_item_incorrect_permission() { 634 $this->assertArrayHasKey( 'content', $data, 'Response should contain a key called content.' ); 635 $this->assertSame( $request_parameters['content'], $data['content']['raw'], 'Response data should match for field content.' ); 636 637 $this->assertArrayHasKey( 'title', $data, 'Response should contain a key called title.' ); 638 $this->assertSame( $request_parameters['title'], $data['title']['raw'], 'Response data should match for field title.' ); 639 } 640 641 /** 642 * Data provider for test_create_item_with_data_provider. 643 * 644 * @return array 645 */ 646 public function data_create_item_with_data_provider() { 647 return array( 648 'templates' => array( 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), 649 'template part' => array( 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), 650 ); 651 } 652 653 /** 654 * @dataProvider data_create_item_incorrect_permission 655 * @covers WP_REST_Template_Autosaves_Controller::create_item_permissions_check 656 * @ticket 56922 657 * 658 * @param string $rest_base Base part of the REST API endpoint to test. 659 * @param string $template_id Template ID to use in the test. 660 */ 661 public function test_create_item_incorrect_permission( $rest_base, $template_id ) { 372 662 wp_set_current_user( self::$contributor_id ); 373 $template_id = self::TEST_THEME . '/' . self::TEMPLATE_NAME; 374 $request = new WP_REST_Request( 'POST', '/wp/v2/templates/' . $template_id . '/autosaves' ); 375 $response = rest_get_server()->dispatch( $request ); 663 $request = new WP_REST_Request( 'POST', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves' ); 664 $response = rest_get_server()->dispatch( $request ); 376 665 $this->assertErrorResponse( 'rest_cannot_manage_templates', $response, WP_Http::FORBIDDEN ); 377 666 } 378 667 379 668 /** 380 * @covers WP_REST_Template_Autosaves_Controller::delete_item 381 * @ticket 56922 382 */ 383 public function test_create_item_no_permission() { 669 * Data provider for test_create_item_incorrect_permission. 670 * 671 * @return array 672 */ 673 public function data_create_item_incorrect_permission() { 674 return array( 675 'template' => array( 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), 676 'template part' => array( 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), 677 ); 678 } 679 680 /** 681 * @dataProvider data_create_item_no_permission 682 * @covers WP_REST_Template_Autosaves_Controller::create_item_permissions_check 683 * @ticket 56922 684 * 685 * @param string $rest_base Base part of the REST API endpoint to test. 686 * @param string $template_id Template ID to use in the test. 687 */ 688 public function test_create_item_no_permission( $rest_base, $template_id ) { 384 689 wp_set_current_user( 0 ); 385 $template_id = self::TEST_THEME . '/' . self::TEMPLATE_NAME; 386 $request = new WP_REST_Request( 'POST', '/wp/v2/templates/' . $template_id . '/autosaves' ); 387 $response = rest_get_server()->dispatch( $request ); 690 $request = new WP_REST_Request( 'POST', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves' ); 691 $response = rest_get_server()->dispatch( $request ); 388 692 $this->assertErrorResponse( 'rest_cannot_manage_templates', $response, WP_Http::UNAUTHORIZED ); 693 } 694 695 /** 696 * Data provider for test_create_item_no_permission. 697 * 698 * @return array 699 */ 700 public function data_create_item_no_permission() { 701 return array( 702 'template' => array( 'templates', self::TEST_THEME . '//' . self::TEMPLATE_NAME ), 703 'template part' => array( 'template-parts', self::TEST_THEME . '//' . self::TEMPLATE_PART_NAME ), 704 ); 389 705 } 390 706
Note: See TracChangeset
for help on using the changeset viewer.