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
This commit is contained in:
Andrew Ozz 2018-04-18 22:54:23 +00:00
parent cdb3f044c4
commit cf7865a91f
2 changed files with 136 additions and 14 deletions

View File

@ -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,
);
}
}

View File

@ -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'] ) );
}
}