From cf7865a91f5e12b8f9901e51b41be8e5d28ae184 Mon Sep 17 00:00:00 2001 From: Andrew Ozz Date: Wed, 18 Apr 2018 22:54:23 +0000 Subject: [PATCH] Privacy: fix docs, formatting, white space, add tests for the personal data from comments exporter. Props birgire. See #43440. git-svn-id: https://develop.svn.wordpress.org/trunk@42987 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/comment.php | 31 +++++---- tests/phpunit/tests/comment.php | 119 ++++++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+), 14 deletions(-) diff --git a/src/wp-includes/comment.php b/src/wp-includes/comment.php index 595f8257b3..d3f8cc6658 100644 --- a/src/wp-includes/comment.php +++ b/src/wp-includes/comment.php @@ -3276,10 +3276,12 @@ function wp_handle_comment_submission( $comment_data ) { } /** - * Registers the personal data exporter for comments + * Registers the personal data exporter for comments. * - * @param array $exporters An array of personal data exporters. - * @return array An array of personal data exporters. + * @since 4.9.6 + * + * @param array $exporters An array of personal data exporters. + * @return array $exporters An array of personal data exporters. */ function wp_register_comment_personal_data_exporter( $exporters ) { $exporters[] = array( @@ -3293,19 +3295,17 @@ function wp_register_comment_personal_data_exporter( $exporters ) { /** * Finds and exports personal data associated with an email address from the comments table. * - * @param string $email_address The comment author email address. - * @param int $page Comment page. - * @return array An array of personal data. + * @since 4.9.6 + * + * @param string $email_address The comment author email address. + * @param int $page Comment page. + * @return array $return An array of personal data. */ function wp_comments_personal_data_exporter( $email_address, $page = 1 ) { - // Technically, strtolower isn't necessary since get_comments will match email insensitive - // But it is a good example for plugin developers whose targets might not be as generous - $email_address = trim( strtolower( $email_address ) ); - - // Limit us to 500 comments at a time to avoid timing out + // Limit us to 500 comments at a time to avoid timing out. $number = 500; - $page = (int) $page; + $page = (int) $page; $data_to_export = array(); @@ -3336,7 +3336,7 @@ function wp_comments_personal_data_exporter( $email_address, $page = 1 ) { foreach ( $comment_prop_to_export as $key => $name ) { $value = ''; - switch( $key ) { + switch ( $key ) { case 'comment_author': case 'comment_author_email': case 'comment_author_url': @@ -3356,7 +3356,10 @@ function wp_comments_personal_data_exporter( $email_address, $page = 1 ) { } if ( ! empty( $value ) ) { - $comment_data_to_export[] = array( 'name' => $name, 'value' => $value ); + $comment_data_to_export[] = array( + 'name' => $name, + 'value' => $value, + ); } } diff --git a/tests/phpunit/tests/comment.php b/tests/phpunit/tests/comment.php index 43dacdb231..4193473b16 100644 --- a/tests/phpunit/tests/comment.php +++ b/tests/phpunit/tests/comment.php @@ -891,4 +891,123 @@ class Tests_Comment extends WP_UnitTestCase { $this->assertSame( '1', $comment->comment_approved ); } + + /** + * Testing the `wp_comments_personal_data_exporter()` function. + * + * @ticket 43440 + */ + public function test_wp_comments_personal_data_exporter() { + $args = array( + 'comment_post_ID' => self::$post_id, + 'comment_author' => 'Comment Author', + 'comment_author_email' => 'personal@local.host', + 'comment_author_url' => 'https://local.host/', + 'comment_author_IP' => '192.168.0.1', + 'comment_agent' => 'SOME_AGENT', + 'comment_date' => '2018-03-28 20:05:00', + 'comment_content' => 'Comment', + ); + + $c = self::factory()->comment->create( $args ); + + $actual = wp_comments_personal_data_exporter( $args['comment_author_email'] ); + $expected = $args; + + $this->assertTrue( $actual['done'] ); + + // Number of exported comments. + $this->assertSame( 1, count( $actual['data'] ) ); + + // Number of exported comment properties. + $this->assertSame( 8, count( $actual['data'][0]['data'] ) ); + + // Exported group. + $this->assertSame( 'comments', $actual['data'][0]['group_id'] ); + $this->assertSame( 'Comments', $actual['data'][0]['group_label'] ); + + // Exported comment properties. + $this->assertSame( $expected['comment_author'], $actual['data'][0]['data'][0]['value'] ); + $this->assertSame( $expected['comment_author_email'], $actual['data'][0]['data'][1]['value'] ); + $this->assertSame( $expected['comment_author_url'], $actual['data'][0]['data'][2]['value'] ); + $this->assertSame( $expected['comment_author_IP'], $actual['data'][0]['data'][3]['value'] ); + $this->assertSame( $expected['comment_agent'], $actual['data'][0]['data'][4]['value'] ); + $this->assertSame( $expected['comment_date'], $actual['data'][0]['data'][5]['value'] ); + $this->assertSame( $expected['comment_content'], $actual['data'][0]['data'][6]['value'] ); + $this->assertSame( get_comment_link( $c ), $actual['data'][0]['data'][7]['value'] ); + } + + /** + * Testing the `wp_comments_personal_data_exporter()` function for no comments found. + * + * @ticket 43440 + */ + public function test_wp_comments_personal_data_exporter_no_comments_found() { + + $actual = wp_comments_personal_data_exporter( 'nocommentsfound@local.host' ); + + $expected = array( + 'data' => array(), + 'done' => true, + ); + + $this->assertSame( $expected, $actual ); + } + + /** + * Testing the `wp_comments_personal_data_exporter()` function for an empty comment property. + * + * @ticket 43440 + */ + public function test_wp_comments_personal_data_exporter_empty_comment_prop() { + $args = array( + 'comment_post_ID' => self::$post_id, + 'comment_author' => 'Comment Author', + 'comment_author_email' => 'personal@local.host', + 'comment_author_url' => 'https://local.host/', + 'comment_author_IP' => '192.168.0.1', + 'comment_date' => '2018-03-28 20:05:00', + 'comment_agent' => '', + 'comment_content' => 'Comment', + ); + + $c = self::factory()->comment->create( $args ); + + $actual = wp_comments_personal_data_exporter( $args['comment_author_email'] ); + + $this->assertTrue( $actual['done'] ); + + // Number of exported comments. + $this->assertSame( 1, count( $actual['data'] ) ); + + // Number of exported comment properties. + $this->assertSame( 7, count( $actual['data'][0]['data'] ) ); + } + + /** + * Testing the `wp_comments_personal_data_exporter()` function with an empty second page. + * + * @ticket 43440 + */ + public function test_wp_comments_personal_data_exporter_empty_second_page() { + $args = array( + 'comment_post_ID' => self::$post_id, + 'comment_author' => 'Comment Author', + 'comment_author_email' => 'personal@local.host', + 'comment_author_url' => 'https://local.host/', + 'comment_author_IP' => '192.168.0.1', + 'comment_date' => '2018-03-28 20:05:00', + 'comment_agent' => 'SOME_AGENT', + 'comment_content' => 'Comment', + ); + + $c = self::factory()->comment->create( $args ); + + $actual = wp_comments_personal_data_exporter( $args['comment_author_email'], 2 ); + + $this->assertTrue( $actual['done'] ); + + // Number of exported comments. + $this->assertSame( 0, count( $actual['data'] ) ); + } }