diff --git a/tests/phpunit/tests/block-template-utils.php b/tests/phpunit/tests/block-template-utils.php index b06e931529f1e..5aa0b65929c47 100644 --- a/tests/phpunit/tests/block-template-utils.php +++ b/tests/phpunit/tests/block-template-utils.php @@ -86,139 +86,6 @@ public function set_up() { switch_theme( self::TEST_THEME ); } - public function test_build_block_template_result_from_post() { - $template = _build_block_template_result_from_post( - self::$template_post, - 'wp_template' - ); - - $this->assertNotWPError( $template ); - $this->assertSame( get_stylesheet() . '//my_template', $template->id ); - $this->assertSame( get_stylesheet(), $template->theme ); - $this->assertSame( 'my_template', $template->slug ); - $this->assertSame( 'publish', $template->status ); - $this->assertSame( 'custom', $template->source ); - $this->assertSame( 'My Template', $template->title ); - $this->assertSame( 'Description of my template', $template->description ); - $this->assertSame( 'wp_template', $template->type ); - $this->assertSame( self::$template_post->post_modified, $template->modified, 'Template result properties match' ); - - // Test template parts. - $template_part = _build_block_template_result_from_post( - self::$template_part_post, - 'wp_template_part' - ); - $this->assertNotWPError( $template_part ); - $this->assertSame( get_stylesheet() . '//my_template_part', $template_part->id ); - $this->assertSame( get_stylesheet(), $template_part->theme ); - $this->assertSame( 'my_template_part', $template_part->slug ); - $this->assertSame( 'publish', $template_part->status ); - $this->assertSame( 'custom', $template_part->source ); - $this->assertSame( 'My Template Part', $template_part->title ); - $this->assertSame( 'Description of my template part', $template_part->description ); - $this->assertSame( 'wp_template_part', $template_part->type ); - $this->assertSame( WP_TEMPLATE_PART_AREA_HEADER, $template_part->area ); - $this->assertSame( self::$template_part_post->post_modified, $template_part->modified, 'Template part result properties match' ); - } - - public function test_build_block_template_result_from_file() { - $template = _build_block_template_result_from_file( - array( - 'slug' => 'single', - 'path' => __DIR__ . '/../data/templates/template.html', - ), - 'wp_template' - ); - - $this->assertSame( get_stylesheet() . '//single', $template->id ); - $this->assertSame( get_stylesheet(), $template->theme ); - $this->assertSame( 'single', $template->slug ); - $this->assertSame( 'publish', $template->status ); - $this->assertSame( 'theme', $template->source ); - $this->assertSame( 'Single Posts', $template->title ); - $this->assertSame( 'Displays single posts on your website unless a custom template has been applied to that post or a dedicated template exists.', $template->description ); - $this->assertSame( 'wp_template', $template->type ); - $this->assertEmpty( $template->modified ); - - // Test template parts. - $template_part = _build_block_template_result_from_file( - array( - 'slug' => 'header', - 'path' => __DIR__ . '/../data/templates/template.html', - 'area' => WP_TEMPLATE_PART_AREA_HEADER, - ), - 'wp_template_part' - ); - $this->assertSame( get_stylesheet() . '//header', $template_part->id ); - $this->assertSame( get_stylesheet(), $template_part->theme ); - $this->assertSame( 'header', $template_part->slug ); - $this->assertSame( 'publish', $template_part->status ); - $this->assertSame( 'theme', $template_part->source ); - $this->assertSame( 'header', $template_part->title ); - $this->assertSame( '', $template_part->description ); - $this->assertSame( 'wp_template_part', $template_part->type ); - $this->assertSame( WP_TEMPLATE_PART_AREA_HEADER, $template_part->area ); - $this->assertEmpty( $template_part->modified ); - } - - /** - * @ticket 59325 - * - * @covers ::_build_block_template_result_from_file - * - * @dataProvider data_build_block_template_result_from_file_injects_theme_attribute - * - * @param string $filename The template's filename. - * @param string $expected The expected block markup. - */ - public function test_build_block_template_result_from_file_injects_theme_attribute( $filename, $expected ) { - $template = _build_block_template_result_from_file( - array( - 'slug' => 'single', - 'path' => DIR_TESTDATA . "/templates/$filename", - ), - 'wp_template' - ); - $this->assertSame( $expected, $template->content ); - } - - /** - * Data provider. - * - * @return array[] - */ - public function data_build_block_template_result_from_file_injects_theme_attribute() { - $theme = 'block-theme'; - return array( - 'a template with a template part block' => array( - 'filename' => 'template-with-template-part.html', - 'expected' => sprintf( - '', - $theme - ), - ), - 'a template with a template part block nested inside another block' => array( - 'filename' => 'template-with-nested-template-part.html', - 'expected' => sprintf( - ' - -', - $theme - ), - ), - 'a template with a template part block with an existing theme attribute' => array( - 'filename' => 'template-with-template-part-with-existing-theme-attribute.html', - 'expected' => '', - ), - 'a template with no template part block' => array( - 'filename' => 'template.html', - 'expected' => ' -

Just a paragraph

-', - ), - ); - } - /** * @ticket 59338 * diff --git a/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromFile.php b/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromFile.php new file mode 100644 index 0000000000000..efc93d6ac3688 --- /dev/null +++ b/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromFile.php @@ -0,0 +1,181 @@ + 'single', + 'path' => DIR_TESTDATA . '/templates/template.html', + ), + 'wp_template' + ); + + $this->assertSame( get_stylesheet() . '//single', $template->id ); + $this->assertSame( get_stylesheet(), $template->theme ); + $this->assertSame( 'single', $template->slug ); + $this->assertSame( 'publish', $template->status ); + $this->assertSame( 'theme', $template->source ); + $this->assertSame( 'Single Posts', $template->title ); + $this->assertSame( 'Displays single posts on your website unless a custom template has been applied to that post or a dedicated template exists.', $template->description ); + $this->assertSame( 'wp_template', $template->type ); + $this->assertEmpty( $template->modified ); + } + + /** + * @ticket 59325 + */ + public function test_should_build_template_using_custom_properties() { + $template = _build_block_template_result_from_file( + array( + 'slug' => 'custom', + 'title' => 'Custom Title', + 'path' => DIR_TESTDATA . '/templates/template.html', + ), + 'wp_template' + ); + + $this->assertSame( 'custom', $template->slug ); + $this->assertSame( 'Custom Title', $template->title ); + $this->assertTrue( $template->is_custom ); + } + + /** + * @ticket 59325 + */ + public function test_should_enforce_default_properties_when_building_template() { + $template = _build_block_template_result_from_file( + array( + 'slug' => 'single', + 'title' => 'Custom title', + 'path' => DIR_TESTDATA . '/templates/template.html', + ), + 'wp_template' + ); + + $this->assertSame( 'single', $template->slug ); + $this->assertSame( 'Single Posts', $template->title ); + $this->assertSame( 'Displays single posts on your website unless a custom template has been applied to that post or a dedicated template exists.', $template->description ); + $this->assertFalse( $template->is_custom ); + } + + /** + * @ticket 59325 + */ + public function test_should_respect_post_types_property_when_building_template() { + $template = _build_block_template_result_from_file( + array( + 'slug' => 'single', + 'postTypes' => array( 'post' ), + 'path' => DIR_TESTDATA . '/templates/template.html', + ), + 'wp_template' + ); + + $this->assertSameSets( array( 'post' ), $template->post_types ); + } + + /** + * @ticket 59325 + * + * @dataProvider data_build_template_injects_theme_attribute + * + * @param string $filename The template's filename. + * @param string $expected The expected block markup. + */ + public function test_should_build_template_and_inject_theme_attribute( $filename, $expected ) { + $template = _build_block_template_result_from_file( + array( + 'slug' => 'single', + 'path' => DIR_TESTDATA . "/templates/$filename", + ), + 'wp_template' + ); + $this->assertSame( $expected, $template->content ); + } + + /** + * Data provider. + * + * @return array[] + */ + public function data_build_template_injects_theme_attribute() { + return array( + 'a template with a template part block' => array( + 'filename' => 'template-with-template-part.html', + 'expected' => sprintf( + '', + self::TEST_THEME + ), + ), + 'a template with a template part block nested inside another block' => array( + 'filename' => 'template-with-nested-template-part.html', + 'expected' => sprintf( + ' + +', + self::TEST_THEME + ), + ), + 'a template with a template part block with an existing theme attribute' => array( + 'filename' => 'template-with-template-part-with-existing-theme-attribute.html', + 'expected' => '', + ), + 'a template with no template part block' => array( + 'filename' => 'template.html', + 'expected' => ' +

Just a paragraph

+', + ), + ); + } + + /** + * @ticket 54335 + */ + public function test_should_build_template_part() { + $template_part = _build_block_template_result_from_file( + array( + 'slug' => 'header', + 'path' => DIR_TESTDATA . '/templates/template.html', + 'area' => WP_TEMPLATE_PART_AREA_HEADER, + ), + 'wp_template_part' + ); + $this->assertSame( get_stylesheet() . '//header', $template_part->id ); + $this->assertSame( get_stylesheet(), $template_part->theme ); + $this->assertSame( 'header', $template_part->slug ); + $this->assertSame( 'publish', $template_part->status ); + $this->assertSame( 'theme', $template_part->source ); + $this->assertSame( 'header', $template_part->title ); + $this->assertSame( '', $template_part->description ); + $this->assertSame( 'wp_template_part', $template_part->type ); + $this->assertSame( WP_TEMPLATE_PART_AREA_HEADER, $template_part->area ); + $this->assertEmpty( $template_part->modified ); + } + + /** + * @ticket 59325 + */ + public function test_should_ignore_post_types_property_when_building_template_part() { + $template = _build_block_template_result_from_file( + array( + 'slug' => 'header', + 'postTypes' => array( 'post' ), + 'path' => DIR_TESTDATA . '/templates/template.html', + ), + 'wp_template_part' + ); + + $this->assertEmpty( $template->post_types ); + } +} diff --git a/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromPost.php b/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromPost.php new file mode 100644 index 0000000000000..371c50a183533 --- /dev/null +++ b/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromPost.php @@ -0,0 +1,52 @@ +assertNotWPError( $template ); + $this->assertSame( get_stylesheet() . '//my_template', $template->id ); + $this->assertSame( get_stylesheet(), $template->theme ); + $this->assertSame( 'my_template', $template->slug ); + $this->assertSame( 'publish', $template->status ); + $this->assertSame( 'custom', $template->source ); + $this->assertSame( 'My Template', $template->title ); + $this->assertSame( 'Description of my template', $template->description ); + $this->assertSame( 'wp_template', $template->type ); + $this->assertSame( self::$template_post->post_modified, $template->modified, 'Template result properties match' ); + } + + /** + * @ticket 54335 + */ + public function test_should_build_template_part() { + $template_part = _build_block_template_result_from_post( + self::$template_part_post, + 'wp_template_part' + ); + $this->assertNotWPError( $template_part ); + $this->assertSame( get_stylesheet() . '//my_template_part', $template_part->id ); + $this->assertSame( get_stylesheet(), $template_part->theme ); + $this->assertSame( 'my_template_part', $template_part->slug ); + $this->assertSame( 'publish', $template_part->status ); + $this->assertSame( 'custom', $template_part->source ); + $this->assertSame( 'My Template Part', $template_part->title ); + $this->assertSame( 'Description of my template part', $template_part->description ); + $this->assertSame( 'wp_template_part', $template_part->type ); + $this->assertSame( WP_TEMPLATE_PART_AREA_HEADER, $template_part->area ); + $this->assertSame( self::$template_part_post->post_modified, $template_part->modified, 'Template part result properties match' ); + } +}