Skip to content

Commit

Permalink
Tests: Improve code coverage for _build_block_template_result_from_file
Browse files Browse the repository at this point in the history
Props costdev, bernhard-reiter.
See #54335, #59325.
Follow-up for [56562].



git-svn-id: https://develop.svn.wordpress.org/trunk@56983 602fd350-edb4-49c9-b593-d223f7449a82
  • Loading branch information
gziolo committed Oct 23, 2023
1 parent f597832 commit 482843a
Show file tree
Hide file tree
Showing 3 changed files with 233 additions and 133 deletions.
133 changes: 0 additions & 133 deletions tests/phpunit/tests/block-template-utils.php
Original file line number Diff line number Diff line change
Expand Up @@ -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(
'<!-- wp:template-part {"slug":"header","align":"full","tagName":"header","className":"site-header","theme":"%s"} /-->',
$theme
),
),
'a template with a template part block nested inside another block' => array(
'filename' => 'template-with-nested-template-part.html',
'expected' => sprintf(
'<!-- wp:group -->
<!-- wp:template-part {"slug":"header","align":"full","tagName":"header","className":"site-header","theme":"%s"} /-->
<!-- /wp:group -->',
$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' => '<!-- wp:template-part {"slug":"header","theme":"fake-theme","align":"full","tagName":"header","className":"site-header"} /-->',
),
'a template with no template part block' => array(
'filename' => 'template.html',
'expected' => '<!-- wp:paragraph -->
<p>Just a paragraph</p>
<!-- /wp:paragraph -->',
),
);
}

/**
* @ticket 59338
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
<?php

require_once __DIR__ . '/base.php';

/**
* @group block-templates
* @covers ::_build_block_template_result_from_file
*/
class Tests_Block_Templates_BuildBlockTemplateResultFromFile extends WP_Block_Templates_UnitTestCase {

/**
* @ticket 54335
*/
public function test_should_build_template() {
$template = _build_block_template_result_from_file(
array(
'slug' => '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(
'<!-- wp:template-part {"slug":"header","align":"full","tagName":"header","className":"site-header","theme":"%s"} /-->',
self::TEST_THEME
),
),
'a template with a template part block nested inside another block' => array(
'filename' => 'template-with-nested-template-part.html',
'expected' => sprintf(
'<!-- wp:group -->
<!-- wp:template-part {"slug":"header","align":"full","tagName":"header","className":"site-header","theme":"%s"} /-->
<!-- /wp:group -->',
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' => '<!-- wp:template-part {"slug":"header","theme":"fake-theme","align":"full","tagName":"header","className":"site-header"} /-->',
),
'a template with no template part block' => array(
'filename' => 'template.html',
'expected' => '<!-- wp:paragraph -->
<p>Just a paragraph</p>
<!-- /wp: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 );
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

require_once __DIR__ . '/base.php';

/**
* @group block-templates
* @covers ::_build_block_template_result_from_post
*/
class Tests_Block_Templates_BuildBlockTemplateResultFromPost extends WP_Block_Templates_UnitTestCase {

/**
* @ticket 54335
*/
public function test_should_build_template() {
$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' );
}

/**
* @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' );
}
}

0 comments on commit 482843a

Please sign in to comment.