wordpress-develop/tests/phpunit/tests/post/wpGetAttachmentLink.php
Jb Audras 67662cbe1b Media: Introduce wp_get_attachment_link_attributes filter.
This changeset introduces the `wp_get_attachment_link_attributes` hook to allow developers to filter the link attributes when getting the attachment link.

Props NathanAtmoz, aaroncampbell, antpb, costdev.
Fixes #41574.


git-svn-id: https://develop.svn.wordpress.org/trunk@55262 602fd350-edb4-49c9-b593-d223f7449a82
2023-02-07 14:33:44 +00:00

107 lines
3.1 KiB
PHP

<?php
/**
* @group post
* @group media
* @group upload
*
* @covers ::wp_get_attachment_link
*/
class Tests_Post_WpGetAttachmentLink extends WP_UnitTestCase {
/**
* The ID of an attachment for testing.
*
* @var int $attachment
*/
private static $attachment;
/**
* Creates an attachment for testing before any tests run.
*/
public static function set_up_before_class() {
parent::set_up_before_class();
self::$attachment = self::factory()->attachment->create();
}
/**
* Tests that wp_get_attachment_link() applies the
* wp_get_attachment_link_attributes filter.
*
* @ticket 41574
*
* @dataProvider data_should_apply_attributes_filter
*
* @param array $attributes Attributes to return from the callback.
* @param string $expected The substring expected to be in the attachment link.
*/
public function test_should_apply_attributes_filter( $attributes, $expected ) {
$expected = str_replace( 'ATTACHMENT_ID', self::$attachment, $expected );
add_filter(
'wp_get_attachment_link_attributes',
static function( $attr ) use ( $attributes ) {
return array_merge( $attr, $attributes );
}
);
$this->assertStringContainsString(
$expected,
wp_get_attachment_link( self::$attachment )
);
}
/**
* Data provider for test_should_apply_attributes_filter().
*
* @return array[]
*/
public function data_should_apply_attributes_filter() {
return array(
'no new attributes' => array(
'attributes' => array(),
'expected' => "<a href='http://example.org/?attachment_id=ATTACHMENT_ID'>",
),
'one new attribute' => array(
'attributes' => array(
'class' => 'test-attribute-filter',
),
'expected' => " class='test-attribute-filter'",
),
'two new attributes' => array(
'attributes' => array(
'class' => 'test-attribute-filter',
'id' => 'test-attribute-filter-1',
),
'expected' => " class='test-attribute-filter' id='test-attribute-filter-1'",
),
'an existing attribute' => array(
'attributes' => array(
'href' => 'http://test-attribute-filter.org',
),
'expected' => " href='http://test-attribute-filter.org'",
),
'an existing attribute and a new attribute' => array(
'attributes' => array(
'href' => 'http://test-attribute-filter.org',
'class' => 'test-attribute-filter',
),
'expected' => " href='http://test-attribute-filter.org' class='test-attribute-filter'",
),
'an attribute name with unsafe characters' => array(
'attributes' => array(
"> <script>alert('Howdy, admin!')</script> <a href=''></a" => '',
),
'expected' => " &gt; &lt;script&gt;alert(&#039;Howdy, admin!&#039;)&lt;/script&gt; &lt;a href=&#039;&#039;&gt;&lt;/a=''",
),
'an attribute value with unsafe characters' => array(
'attributes' => array(
'class' => "'> <script>alert('Howdy, admin!')</script> <a href=''></a",
),
'expected' => '&#039;&gt; &lt;script&gt;alert(&#039;Howdy, admin!&#039;)&lt;/script&gt; &lt;a href=&#039;&#039;&gt;&lt;/a',
),
);
}
}