wordpress-develop/tests/phpunit/tests/widgets/media-audio-widget.php
Sergey Biryukov 8be943d06e Tests: Introduce assertSameSets() and assertSameSetsWithIndex(), and use them where appropriate.
This ensures that not only the array values being compared are equal, but also that their type is the same.

These new methods replace most of the existing instances of `assertEqualSets()` and `assertEqualSetsWithIndex()`.

Going forward, stricter type checking by using `assertSameSets()` or `assertSameSetsWithIndex()` should generally be preferred, to make the tests more reliable.

Follow-up to [48937].

See #38266.

git-svn-id: https://develop.svn.wordpress.org/trunk@48939 602fd350-edb4-49c9-b593-d223f7449a82
2020-09-04 07:01:00 +00:00

328 lines
7.9 KiB
PHP

<?php
/**
* Unit tests covering WP_Widget_Media_Audio functionality.
*
* @package WordPress
* @subpackage widgets
*/
/**
* Test wp-includes/widgets/class-wp-widget-audio.php
*
* @group widgets
*/
class Test_WP_Widget_Media_Audio extends WP_UnitTestCase {
/**
* Clean up global scope.
*
* @global WP_Scripts $wp_scripts
* @global WP_Styles $wp_styles
*/
function clean_up_global_scope() {
global $wp_scripts, $wp_styles;
parent::clean_up_global_scope();
$wp_scripts = null;
$wp_styles = null;
}
/**
* Test get_instance_schema method.
*
* @covers WP_Widget_Media_Audio::get_instance_schema
*/
function test_get_instance_schema() {
$wp_widget_audio = new WP_Widget_Media_Audio();
$schema = $wp_widget_audio->get_instance_schema();
$this->assertSameSets(
array_merge(
array(
'attachment_id',
'preload',
'loop',
'title',
'url',
),
wp_get_audio_extensions()
),
array_keys( $schema )
);
}
/**
* Test get_instance_schema filtering.
*
* @covers WP_Widget_Media_Audio::get_instance_schema
*
* @ticket 45029
*/
function test_get_instance_schema_filtering() {
$wp_widget_audio = new WP_Widget_Media_Audio();
$schema = $wp_widget_audio->get_instance_schema();
add_filter( 'widget_media_audio_instance_schema', array( $this, 'filter_instance_schema' ), 10, 2 );
$schema = $wp_widget_audio->get_instance_schema();
$this->assertTrue( $schema['loop']['default'] );
}
/**
* Filters instance schema.
*
* @since 5.2.0
*
* @param array $schema Schema.
* @param WP_Widget_Media_Audio $widget Widget.
* @return array
*/
public function filter_instance_schema( $schema, $widget ) {
// Override the default loop value (false).
$schema['loop']['default'] = true;
return $schema;
}
/**
* Test constructor.
*
* @covers WP_Widget_Media_Audio::__construct
*/
function test_constructor() {
$widget = new WP_Widget_Media_Audio();
$this->assertArrayHasKey( 'mime_type', $widget->widget_options );
$this->assertArrayHasKey( 'customize_selective_refresh', $widget->widget_options );
$this->assertArrayHasKey( 'description', $widget->widget_options );
$this->assertTrue( $widget->widget_options['customize_selective_refresh'] );
$this->assertSame( 'audio', $widget->widget_options['mime_type'] );
$this->assertSameSets(
array(
'add_to_widget',
'replace_media',
'edit_media',
'media_library_state_multi',
'media_library_state_single',
'missing_attachment',
'no_media_selected',
'add_media',
'unsupported_file_type',
),
array_keys( $widget->l10n )
);
}
/**
* Test get_instance_schema method.
*
* @covers WP_Widget_Media_Audio::update
*/
function test_update() {
$widget = new WP_Widget_Media_Audio();
$instance = array();
// Should return valid attachment ID.
$expected = array(
'attachment_id' => 1,
);
$result = $widget->update( $expected, $instance );
$this->assertSame( $result, $expected );
// Should filter invalid attachment ID.
$result = $widget->update(
array(
'attachment_id' => 'media',
),
$instance
);
$this->assertSame( $result, $instance );
// Should return valid attachment url.
$expected = array(
'url' => 'https://chickenandribs.org',
);
$result = $widget->update( $expected, $instance );
$this->assertSame( $result, $expected );
// Should filter invalid attachment url.
$result = $widget->update(
array(
'url' => 'not_a_url',
),
$instance
);
$this->assertNotSame( $result, $instance );
$this->assertStringStartsWith( 'http://', $result['url'] );
// Should return loop setting.
$expected = array(
'loop' => true,
);
$result = $widget->update( $expected, $instance );
$this->assertSame( $result, $expected );
// Should filter invalid loop setting.
$result = $widget->update(
array(
'loop' => 'not-boolean',
),
$instance
);
$this->assertSame( $result, $instance );
// Should return valid attachment title.
$expected = array(
'title' => 'An audio sample of parrots',
);
$result = $widget->update( $expected, $instance );
$this->assertSame( $result, $expected );
// Should filter invalid attachment title.
$result = $widget->update(
array(
'title' => '<h1>Cute Baby Goats</h1>',
),
$instance
);
$this->assertNotSame( $result, $instance );
// Should return valid preload setting.
$expected = array(
'preload' => 'none',
);
$result = $widget->update( $expected, $instance );
$this->assertSame( $result, $expected );
// Should filter invalid preload setting.
$result = $widget->update(
array(
'preload' => 'nope',
),
$instance
);
$this->assertSame( $result, $instance );
// Should filter invalid key.
$result = $widget->update(
array(
'h4x' => 'value',
),
$instance
);
$this->assertSame( $result, $instance );
}
/**
* Test render_media method.
*
* @covers WP_Widget_Media_Audio::render_media
*/
function test_render_media() {
$test_audio_file = __FILE__ . '../../data/uploads/small-audio.mp3';
$widget = new WP_Widget_Media_Audio();
$attachment_id = self::factory()->attachment->create_object(
array(
'file' => $test_audio_file,
'post_parent' => 0,
'post_mime_type' => 'audio/mp3',
'post_title' => 'Test Audio',
)
);
wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $test_audio_file ) );
// Should be empty when there is no attachment_id.
ob_start();
$widget->render_media( array() );
$output = ob_get_clean();
$this->assertEmpty( $output );
// Should be empty when there is an invalid attachment_id.
ob_start();
$widget->render_media(
array(
'attachment_id' => 777,
)
);
$output = ob_get_clean();
$this->assertEmpty( $output );
// Tests with audio from library.
ob_start();
$widget->render_media(
array(
'attachment_id' => $attachment_id,
)
);
$output = ob_get_clean();
// Check default outputs.
$this->assertContains( 'preload="none"', $output );
$this->assertContains( 'class="wp-audio-shortcode"', $output );
$this->assertContains( 'small-audio.mp3', $output );
ob_start();
$widget->render_media(
array(
'attachment_id' => $attachment_id,
'title' => 'Funny',
'preload' => 'auto',
'loop' => true,
)
);
$output = ob_get_clean();
// Custom attributes.
$this->assertContains( 'preload="auto"', $output );
$this->assertContains( 'loop="1"', $output );
}
/**
* Test enqueue_preview_scripts method.
*
* @global WP_Scripts $wp_scripts
* @global WP_Styles $wp_styles
* @covers WP_Widget_Media_Audio::enqueue_preview_scripts
*/
function test_enqueue_preview_scripts() {
global $wp_scripts, $wp_styles;
$wp_scripts = null;
$wp_styles = null;
$widget = new WP_Widget_Media_Audio();
$this->assertFalse( wp_script_is( 'wp-mediaelement' ) );
$this->assertFalse( wp_style_is( 'wp-mediaelement' ) );
$widget->enqueue_preview_scripts();
$this->assertTrue( wp_script_is( 'wp-mediaelement' ) );
$this->assertTrue( wp_style_is( 'wp-mediaelement' ) );
}
/**
* Test enqueue_admin_scripts method.
*
* @covers WP_Widget_Media_Audio::enqueue_admin_scripts
*/
function test_enqueue_admin_scripts() {
set_current_screen( 'widgets.php' );
$widget = new WP_Widget_Media_Audio();
$widget->enqueue_admin_scripts();
$this->assertTrue( wp_script_is( 'media-audio-widget' ) );
}
/**
* Test render_control_template_scripts method.
*
* @covers WP_Widget_Media_Audio::render_control_template_scripts
*/
function test_render_control_template_scripts() {
$widget = new WP_Widget_Media_Audio();
ob_start();
$widget->render_control_template_scripts();
$output = ob_get_clean();
$this->assertContains( '<script type="text/html" id="tmpl-wp-media-widget-audio-preview">', $output );
}
}