Skip to content
Snippets Groups Projects
test-class-external-permalinks-redux-block-editor.php 4.02 KiB
Newer Older
Erick Hitter's avatar
Erick Hitter committed
<?php
/**
 * Test block-editor integration.
 *
Erick Hitter's avatar
Erick Hitter committed
 * @package External_Permalinks_Redux
Erick Hitter's avatar
Erick Hitter committed
 */

/**
 * Class TestClassExternalPermalinksReduxBlockEditor.
 *
 * @coversDefaultClass External_Permalinks_Redux_Block_Editor
 */
class TestClassExternalPermalinksReduxBlockEditor extends WP_UnitTestCase {
	/**
Erick Hitter's avatar
Erick Hitter committed
	 * Test meta registration.
	 *
Erick Hitter's avatar
Erick Hitter committed
	 * @covers ::register_meta()
	 */
	public function test_register_meta() {
Erick Hitter's avatar
Erick Hitter committed
		global $wp_meta_keys;

		$wp_meta_keys = null;

		$this->assertFalse(
			registered_meta_key_exists(
				'post',
				external_permalinks_redux::get_instance()->meta_key_target
			),
			'Failed to assert that "target" meta key is not registered.'
		);

		$this->assertFalse(
			registered_meta_key_exists(
				'post',
				external_permalinks_redux::get_instance()->meta_key_type
			),
			'Failed to assert that "type" meta key is not registered.'
		);

		External_Permalinks_Redux_Block_Editor::get_instance()->register_meta();

		$this->assertTrue(
			registered_meta_key_exists(
				'post',
				external_permalinks_redux::get_instance()->meta_key_target
			),
			'Failed to assert that "target" meta key is registered.'
		);

		$this->assertTrue(
			registered_meta_key_exists(
				'post',
				external_permalinks_redux::get_instance()->meta_key_type
			),
			'Failed to assert that "type" meta key is registered.'
		);
Erick Hitter's avatar
Erick Hitter committed
	 * Test overridding private meta editing.
	 *
Erick Hitter's avatar
Erick Hitter committed
	 * @covers ::allow_meta_updates()
	 */
	public function test_allow_meta_updates() {
Erick Hitter's avatar
Erick Hitter committed
		$this->assertTrue(
			External_Permalinks_Redux_Block_Editor::get_instance()->allow_meta_updates(
				true,
				'_a_random_key',
				'term'
			),
			'Failed to assert that a term\'s key is not modified..'
		);

		$this->assertTrue(
			External_Permalinks_Redux_Block_Editor::get_instance()->allow_meta_updates(
				true,
				'_a_random_key',
				'post'
			),
			'Failed to assert that unrelated key\'s protection is not modified.'
		);

		$this->assertFalse(
			External_Permalinks_Redux_Block_Editor::get_instance()->allow_meta_updates(
				true,
				external_permalinks_redux::get_instance()->meta_key_target,
				'post'
			),
			'Failed to assert that "target" key is not protected.'
		);

		$this->assertFalse(
			External_Permalinks_Redux_Block_Editor::get_instance()->allow_meta_updates(
				true,
				external_permalinks_redux::get_instance()->meta_key_type,
				'post'
			),
			'Failed to assert that "type" key is not protected.'
		);
Erick Hitter's avatar
Erick Hitter committed
	 * Test script enqueueing.
	 *
Erick Hitter's avatar
Erick Hitter committed
	 * @covers ::enqueue()
	 */
	public function test_enqueue() {
Erick Hitter's avatar
Erick Hitter committed
		$asset_handle = 'external-permalinks-redux';
Erick Hitter's avatar
Erick Hitter committed

		$this->assertFalse(
			wp_script_is( $asset_handle, 'enqueued' ),
			'Failed to assert that script is not enqueued.'
		);

Erick Hitter's avatar
Erick Hitter committed
		remove_all_actions( 'admin_init' );
		do_action( 'admin_init' );
		external_permalinks_redux::get_instance()->action_admin_init();
Erick Hitter's avatar
Erick Hitter committed
		External_Permalinks_Redux_Block_Editor::get_instance()->enqueue();

		$this->assertTrue(
			wp_script_is( $asset_handle, 'enqueued' ),
			'Failed to assert that script is enqueued.'
		);

		$this->assertStringContainsString(
			'externalPermalinksReduxConfig',
			wp_scripts()->get_data( $asset_handle, 'data' ),
			'Failed to assert that configuration data is added.'
		);
Erick Hitter's avatar
Erick Hitter committed
	}
Erick Hitter's avatar
Erick Hitter committed

	/**
	 * Test conversion of status codes to format expected by Gutenberg's
	 * `SelectControl` component.
	 *
	 * @covers ::_get_status_codes()
	 */
	public function test__get_status_codes() {
		$class      = External_Permalinks_Redux_Block_Editor::get_instance();
		$reflection = new \ReflectionClass( $class );

		$method = $reflection->getMethod( '_get_status_codes' );
		$method->setAccessible( true );

		remove_all_actions( 'admin_init' );
		do_action( 'admin_init' );
		external_permalinks_redux::get_instance()->action_admin_init();

		$this->assertEquals(
			array(
				array(
					'label' => '-- Select --',
					'value' => 0,
				),
				array(
					'label' => 'Temporary (302)',
					'value' => 302,
				),
				array(
					'label' => 'Permanent (301)',
					'value' => 301,
				),
			),
			$method->invoke( $class ),
			'Failed to assert that status codes are transformed as expected.'
		);
	}
Erick Hitter's avatar
Erick Hitter committed
}