WordPress.org

Make WordPress Core

Ticket #43850: 43850.2.diff

File 43850.2.diff, 10.3 KB (added by iandunn, 22 months ago)

Merge tests, move get_privacy_policy_url() tests to new url folder

  • src/wp-includes/link-template.php

    diff --git src/wp-includes/link-template.php src/wp-includes/link-template.php
    index 9db1065c77..815c539a4a 100644
    function get_parent_theme_file_path( $file = '' ) { 
    42824282 * @return string The URL to the privacy policy page. Empty string if it doesn't exist.
    42834283 */
    42844284function get_privacy_policy_url() {
     4285        $url            = '';
    42854286        $policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
    42864287
    42874288        if ( ! empty( $policy_page_id ) && get_post_status( $policy_page_id ) === 'publish' ) {
    4288                 return get_permalink( $policy_page_id );
     4289                $url = (string) get_permalink( $policy_page_id );
     4290        }
     4291
     4292        /**
     4293         * Filters the URL of the privacy policy page.
     4294         *
     4295         * @since 4.9.6
     4296         *
     4297         * @param string $url            The URL to the privacy policy page. Empty string
     4298         *                               if it doesn't exist.
     4299         * @param int    $policy_page_id The ID of privacy policy page.
     4300         */
     4301        return apply_filters( 'privacy_policy_url', $url, $policy_page_id );
     4302}
     4303
     4304/**
     4305 * Displays the privacy policy link with formatting, when applicable.
     4306 *
     4307 * @since 4.9.6
     4308 *
     4309 * @param string $before Optional. Display before privacy policy link. Default empty.
     4310 * @param string $after  Optional. Display after privacy policy link. Default empty.
     4311 */
     4312function the_privacy_policy_link( $before = '', $after = '' ) {
     4313        echo get_the_privacy_policy_link( $before, $after );
     4314}
     4315
     4316/**
     4317 * Returns the privacy policy link with formatting, when applicable.
     4318 *
     4319 * @since 4.9.6
     4320 *
     4321 * @param string $before Optional. Display before privacy policy link. Default empty.
     4322 * @param string $after  Optional. Display after privacy policy link. Default empty.
     4323 *
     4324 * @return string Markup for the link and surrounding elements. Empty string if it
     4325 *                doesn't exist.
     4326 */
     4327function get_the_privacy_policy_link( $before = '', $after = '' ) {
     4328        $link               = '';
     4329        $privacy_policy_url = get_privacy_policy_url();
     4330
     4331        if ( $privacy_policy_url ) {
     4332                $link = sprintf(
     4333                        '<a class="privacy-policy-link" href="%s">%s</a>',
     4334                        esc_url( $privacy_policy_url ),
     4335                        __( 'Privacy Policy' )
     4336                );
     4337        }
     4338
     4339        /**
     4340         * Filters the privacy policy link.
     4341         *
     4342         * @since 4.9.6
     4343         *
     4344         * @param string $link               The privacy policy link. Empty string if it
     4345         *                                   doesn't exist.
     4346         * @param string $privacy_policy_url The URL of the privacy policy. Empty string
     4347         *                                   if it doesn't exist.
     4348         */
     4349        $link = apply_filters( 'the_privacy_policy_link', $link, $privacy_policy_url );
     4350
     4351        if ( $link ) {
     4352                return $before . $link . $after;
    42894353        }
    42904354
    42914355        return '';
  • new file tests/phpunit/tests/link/getThePrivacyPolicyLink.php

    diff --git tests/phpunit/tests/link/getThePrivacyPolicyLink.php tests/phpunit/tests/link/getThePrivacyPolicyLink.php
    new file mode 100644
    index 0000000000..d85163282c
    - +  
     1<?php
     2/**
     3 * Define a class to test the `get_the_privacy_policy_link()` function.
     4 *
     5 * @package WordPress
     6 * @subpackage UnitTests
     7 * @since 4.9.6
     8 */
     9
     10/**
     11 * Test cases for the `get_the_privacy_policy_link()` function.
     12 *
     13 * @group link
     14 * @group privacy
     15 * @covers get_the_privacy_policy_link
     16 *
     17 * @since 4.9.6
     18 */
     19class Tests_Link_GetThePrivacyPolicyLink extends WP_UnitTestCase {
     20        protected static $privacy_policy_page_id;
     21        protected static $privacy_policy_url;
     22        protected static $before;
     23        protected static $after;
     24
     25        /**
     26         * Create fixtures that are shared by multiple test cases.
     27         *
     28         * @param WP_UnitTest_Factory $factory
     29         */
     30        public static function wpSetUpBeforeClass( $factory ) {
     31                self::$privacy_policy_page_id = $factory->post->create(
     32                        array(
     33                                'post_type'  => 'page',
     34                                'post_title' => WP_TESTS_DOMAIN . ' Privacy Policy',
     35                        )
     36                );
     37
     38                self::$privacy_policy_url = esc_url( get_permalink( self::$privacy_policy_page_id ) );
     39
     40                self::$before = '<span class="privacy-policy-link-wrapper">';
     41                self::$after  = '</span>';
     42        }
     43
     44        /**
     45         * The function should return a valid link if a privacy policy page has been
     46         * created and set as the `wp_page_for_privacy_policy`.
     47         */
     48        public function test_get_the_privacy_policy_link_should_return_valid_link_when_privacy_page_set() {
     49                update_option( 'wp_page_for_privacy_policy', self::$privacy_policy_page_id );
     50
     51                $actual_link = get_the_privacy_policy_link();
     52
     53                $this->assertStringStartsWith( '<a', $actual_link );
     54                $this->assertContains( self::$privacy_policy_url, $actual_link );
     55                $this->assertStringEndsWith( '</a>', $actual_link );
     56        }
     57
     58        /**
     59         * The function should prepend the supplied `$before` markup and append the
     60         * supplied `$after` markup when the `wp_page_for_privacy_policy` is configured.
     61         */
     62        public function test_get_the_privacy_policy_link_should_prepend_and_append_supplied_markup_when_privacy_page_set() {
     63                update_option( 'wp_page_for_privacy_policy', self::$privacy_policy_page_id );
     64
     65                $actual_link = get_the_privacy_policy_link( self::$before, self::$after );
     66
     67                $this->assertStringStartsWith( self::$before . '<a', $actual_link );
     68                $this->assertContains( self::$privacy_policy_url, $actual_link );
     69                $this->assertStringEndsWith( '</a>' . self::$after, $actual_link );
     70        }
     71
     72        /**
     73         * The function should _not_ prepend the supplied `$before` markup and append
     74         * the supplied `$after` markup when the `wp_page_for_privacy_policy` is _not_ configured.
     75         */
     76        public function test_get_the_privacy_policy_link_should_not_prepend_and_append_supplied_markup_when_privacy_page_not_set() {
     77                $actual_link = get_the_privacy_policy_link( self::$before, self::$after );
     78
     79                $this->assertSame( '', $actual_link );
     80        }
     81
     82        /**
     83         * The function should return an empty string when `wp_page_for_privacy_policy` is _not_ configured.
     84         */
     85        public function test_get_the_privacy_policy_link_should_return_empty_string_when_privacy_page_not_set() {
     86                $this->assertSame( '', get_the_privacy_policy_link() );
     87        }
     88
     89        /**
     90         * The output of the get_the_privacy_policy_link() function should be filterable with the 'privacy_policy_link' filter.
     91         */
     92        public function test_get_the_privacy_policy_link_should_be_filterable() {
     93                update_option( 'wp_page_for_privacy_policy', self::$privacy_policy_page_id );
     94                $expected_url = get_privacy_policy_url();
     95
     96                $this->assertNotEmpty( $expected_url );
     97
     98                add_filter( 'the_privacy_policy_link', array( $this, 'modify_link_markup' ), 10, 2 );
     99                $this->assertSame( 'Policy: ' . $expected_url, get_the_privacy_policy_link() );
     100                remove_filter( 'the_privacy_policy_link', array( $this, 'modify_link_markup' ), 10 );
     101        }
     102
     103        /**
     104         * Return modified `the_privacy_policy_link` content in order to test the filter.
     105         *
     106         * @param string $link               The privacy policy link. Empty string if it
     107         *                                   doesn't exist.
     108         * @param string $privacy_policy_url The URL of the privacy policy. Empty string
     109         *                                   if it doesn't exist.
     110         * @return string
     111         */
     112        public static function modify_link_markup( $link, $privacy_policy_url ) {
     113                return 'Policy: ' . $privacy_policy_url;
     114        }
     115}
  • new file tests/phpunit/tests/url/getPrivacyPolicyUrl.php

    diff --git tests/phpunit/tests/url/getPrivacyPolicyUrl.php tests/phpunit/tests/url/getPrivacyPolicyUrl.php
    new file mode 100644
    index 0000000000..3c41fe8da2
    - +  
     1<?php
     2/**
     3 * Define a class to test `get_privacy_policy_url()`.
     4 *
     5 * @package WordPress
     6 * @subpackage UnitTests
     7 * @since 4.9.6
     8 */
     9
     10/**
     11 * Test cases for `get_privacy_policy_url()`.
     12 *
     13 * @group url
     14 * @group privacy
     15 * @covers get_privacy_policy_url
     16 *
     17 * @since 4.9.6
     18 */
     19class Tests_Link_GetPrivacyPolicyUrl extends WP_UnitTestCase {
     20        protected static $privacy_policy_page_id;
     21        protected static $privacy_policy_url;
     22
     23        /**
     24         * Create fixtures that are shared by multiple test cases.
     25         *
     26         * @param WP_UnitTest_Factory $factory
     27         */
     28        public static function wpSetUpBeforeClass( $factory ) {
     29                self::$privacy_policy_page_id = $factory->post->create(
     30                        array(
     31                                'post_type'  => 'page',
     32                                'post_title' => WP_TESTS_DOMAIN . ' Privacy Policy',
     33                        )
     34                );
     35
     36                self::$privacy_policy_url = esc_url( get_permalink( self::$privacy_policy_page_id ) );
     37        }
     38
     39        /**
     40         * The function should return an empty string when `wp_page_for_privacy_policy` is _not_ set.
     41         */
     42        public function test_get_privacy_policy_url_should_return_empty_string_when_policy_page_not_set() {
     43                $this->assertSame( '', get_privacy_policy_url() );
     44        }
     45
     46        /**
     47         * The function should return the privacy policy URL when `wp_page_for_privacy_policy` is set.
     48         */
     49        public function test_get_privacy_policy_url_should_return_valid_url_when_policy_page_set() {
     50                update_option( 'wp_page_for_privacy_policy', self::$privacy_policy_page_id );
     51
     52                $this->assertSame( self::$privacy_policy_url, get_privacy_policy_url() );
     53        }
     54
     55        /**
     56         * The function should return an empty string when `wp_page_for_privacy_policy` is _not_ set.
     57         */
     58        public function test_get_privacy_policy_url_should_return_empty_when_privacy_policy_page_not_set() {
     59                $this->assertSame( '', get_privacy_policy_url() );
     60        }
     61
     62        /**
     63         * The function should return an empty string for an invalid `wp_page_for_privacy_policy` value.
     64         */
     65        public function test_get_privacy_policy_url_should_return_empty_for_non_existing_page() {
     66                update_option( 'wp_page_for_privacy_policy', PHP_INT_MAX );
     67
     68                $this->assertSame( '', get_privacy_policy_url() );
     69        }
     70
     71        /**
     72         * The output of `get_the_privacy_policy_link()` should be filterable with the 'privacy_policy_url' filter.
     73         */
     74        public function test_get_privacy_policy_url_should_be_filterable() {
     75                update_option( 'wp_page_for_privacy_policy', self::$privacy_policy_page_id );
     76
     77                add_filter( 'privacy_policy_url', array( $this, 'modify_policy_url' ), 10, 2 );
     78                $this->assertSame( 'Page ID: ' . self::$privacy_policy_page_id, get_privacy_policy_url() );
     79                remove_filter( 'privacy_policy_url', array( $this, 'modify_policy_url' ), 10 );
     80        }
     81
     82        /**
     83         * Return modified `privacy_policy_url` content in order to test the filter.
     84         *
     85         * @param string $url            The URL to the privacy policy page. Empty string
     86         *                               if it doesn't exist.
     87         * @param int    $policy_page_id The ID of privacy policy page.
     88         * @return string
     89         */
     90        public static function modify_policy_url( $url, $policy_page_id ) {
     91                return 'Page ID: ' . $policy_page_id;
     92        }
     93}