diff --git a/tests/phpunit/tests/blocks/wpBlockPatternsRegistry.php b/tests/phpunit/tests/blocks/wpBlockPatternsRegistry.php new file mode 100644 index 0000000000..8eb4fce78b --- /dev/null +++ b/tests/phpunit/tests/blocks/wpBlockPatternsRegistry.php @@ -0,0 +1,439 @@ +registry = new WP_Block_Patterns_Registry(); + } + + /** + * Tear down each test method. + * + * @since 6.4.0 + */ + public function tear_down() { + $this->registry = null; + + $registry = WP_Block_Type_Registry::get_instance(); + + if ( $registry->is_registered( 'tests/my-block' ) ) { + $registry->unregister( 'tests/my-block' ); + } + + parent::tear_down(); + } + + /** + * Should reject missing pattern name. + * + * @ticket 59476 + * + * @covers WP_Block_Patterns_Registry::register + * + * @expectedIncorrectUsage WP_Block_Patterns_Registry::register + */ + public function test_missing_name() { + $name = null; + $settings = array( + 'title' => 'Test Pattern', + 'content' => '
Two
', + ); + $this->registry->register( 'test/two', $pattern_two ); + + $pattern_three = array( + 'title' => 'Pattern Three', + 'content' => 'Three
', + ); + $this->registry->register( 'test/three', $pattern_three ); + + $pattern_one['name'] = 'test/one'; + $pattern_two['name'] = 'test/two'; + $pattern_three['name'] = 'test/three'; + + $expected = array( + $pattern_one, + $pattern_two, + $pattern_three, + ); + + $registered = $this->registry->get_all_registered(); + $this->assertSame( $expected, $registered ); + } + + /** + * Should not find pattern that's not registered. + * + * @ticket 59476 + * + * @covers WP_Block_Patterns_Registry::register + * @covers WP_Block_Patterns_Registry::get_registered + */ + public function test_get_registered_rejects_unknown_pattern_name() { + $pattern_one = array( + 'title' => 'Pattern One', + 'content' => 'Two
', + ); + $this->registry->register( 'test/two', $pattern_two ); + + $pattern = $this->registry->get_registered( 'test/three' ); + $this->assertNull( $pattern ); + } + + /** + * Should find registered pattern by name. + * + * @ticket 59476 + * + * @covers WP_Block_Patterns_Registry::register + * @covers WP_Block_Patterns_Registry::get_registered + */ + public function test_get_registered() { + $pattern_one = array( + 'title' => 'Pattern One', + 'content' => 'Two
', + ); + $this->registry->register( 'test/two', $pattern_two ); + + $pattern_three = array( + 'title' => 'Pattern Three', + 'content' => 'Three
', + ); + $this->registry->register( 'test/three', $pattern_three ); + + $pattern_two['name'] = 'test/two'; + + $pattern = $this->registry->get_registered( 'test/two' ); + $this->assertSame( $pattern_two, $pattern ); + } + + /** + * Should insert hooked blocks into registered patterns. + * + * @ticket 59476 + * + * @covers WP_Block_Patterns_Registry::register + * @covers WP_Block_Patterns_Registry::get_all_registered + */ + public function test_get_all_registered_includes_hooked_blocks() { + register_block_type( + 'tests/my-block', + array( + 'block_hooks' => array( + 'core/paragraph' => 'after', + ), + ) + ); + + $pattern_one = array( + 'title' => 'Pattern One', + 'content' => 'Two
', + ); + $this->registry->register( 'test/two', $pattern_two ); + + $pattern_three = array( + 'title' => 'Pattern Three', + 'content' => 'Three
', + ); + $this->registry->register( 'test/three', $pattern_three ); + + $pattern_one['name'] = 'test/one'; + $pattern_two['name'] = 'test/two'; + $pattern_two['content'] .= ''; + $pattern_three['name'] = 'test/three'; + $pattern_three['content'] .= ''; + + $expected = array( + $pattern_one, + $pattern_two, + $pattern_three, + ); + + $registered = $this->registry->get_all_registered(); + $this->assertSame( $expected, $registered ); + } + + /** + * Should insert hooked blocks into registered patterns. + * + * @ticket 59476 + * + * @covers WP_Block_Patterns_Registry::register + * @covers WP_Block_Patterns_Registry::get_registered + */ + public function test_get_registered_includes_hooked_blocks() { + register_block_type( + 'tests/my-block', + array( + 'block_hooks' => array( + 'core/heading' => 'before', + ), + ) + ); + + $pattern_one = array( + 'title' => 'Pattern One', + 'content' => 'Two
', + ); + $this->registry->register( 'test/two', $pattern_two ); + + $pattern_one['name'] = 'test/one'; + $pattern_one['content'] = '' . $pattern_one['content']; + + $pattern = $this->registry->get_registered( 'test/one' ); + $this->assertSame( $pattern_one, $pattern ); + } + + /** + * Should return false for pattern that's not registered. + * + * @ticket 59476 + * + * @covers WP_Block_Patterns_Registry::register + * @covers WP_Block_Patterns_Registry::is_registered + */ + public function test_is_registered_for_unknown_pattern() { + $pattern = $this->registry->is_registered( 'test/one' ); + $this->assertFalse( $pattern ); + } + + /** + * Should return true if pattern is registered. + * + * @ticket 59476 + * + * @covers WP_Block_Patterns_Registry::register + * @covers WP_Block_Patterns_Registry::is_registered + */ + public function test_is_registered_for_known_pattern() { + $pattern_one = array( + 'title' => 'Pattern One', + 'content' => '