From 263d73a755aee8be0ff901367ac7dc4128aa20af Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 13 Feb 2023 18:56:59 +0000 Subject: [PATCH] Tests: Move `wp_comments_personal_data_eraser()` tests to their own file. This aims to make the tests more discoverable and easier to expand. Follow-up to [42994]. See #56793. git-svn-id: https://develop.svn.wordpress.org/trunk@55319 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/comment.php | 239 ------------------ .../comment/wpCommentsPersonalDataEraser.php | 231 +++++++++++++++++ 2 files changed, 231 insertions(+), 239 deletions(-) create mode 100644 tests/phpunit/tests/comment/wpCommentsPersonalDataEraser.php diff --git a/tests/phpunit/tests/comment.php b/tests/phpunit/tests/comment.php index 3914a94081..e39bb81e1a 100644 --- a/tests/phpunit/tests/comment.php +++ b/tests/phpunit/tests/comment.php @@ -1142,245 +1142,6 @@ class Tests_Comment extends WP_UnitTestCase { } } - /** - * The `wp_comments_personal_data_eraser()` function should erase user's comments. - * - * @group privacy - * @ticket 43442 - * - * @covers ::wp_comments_personal_data_eraser - */ - public function test_wp_comments_personal_data_eraser() { - - $post_id = self::factory()->post->create(); - $user_id = self::factory()->user->create(); - - $args = array( - 'user_id' => $user_id, - 'comment_post_ID' => $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-04-14 17:20:00', - 'comment_agent' => 'COMMENT_AGENT', - 'comment_content' => 'Comment Content', - ); - $comment_id = self::factory()->comment->create( $args ); - - wp_comments_personal_data_eraser( $args['comment_author_email'] ); - - $comment = get_comment( $comment_id ); - - $actual = array( - 'comment_ID' => $comment->comment_ID, - 'user_id' => $comment->user_id, - 'comment_author' => $comment->comment_author, - 'comment_author_email' => $comment->comment_author_email, - 'comment_author_url' => $comment->comment_author_url, - 'comment_author_IP' => $comment->comment_author_IP, - 'comment_date' => $comment->comment_date, - 'comment_date_gmt' => $comment->comment_date_gmt, - 'comment_agent' => $comment->comment_agent, - 'comment_content' => $comment->comment_content, - ); - - $expected = array( - 'comment_ID' => (string) $comment_id, - 'user_id' => '0', // Anonymized. - 'comment_author' => 'Anonymous', // Anonymized. - 'comment_author_email' => '', // Anonymized. - 'comment_author_url' => '', // Anonymized. - 'comment_author_IP' => '192.168.0.0', // Anonymized. - 'comment_date' => '2018-04-14 17:20:00', - 'comment_date_gmt' => '2018-04-14 17:20:00', - 'comment_agent' => '', // Anonymized. - 'comment_content' => 'Comment Content', - ); - - $this->assertSame( $expected, $actual ); - } - - /** - * Testing the `wp_comments_personal_data_eraser()` function's output on an empty first page. - * - * @group privacy - * @ticket 43442 - * - * @covers ::wp_comments_personal_data_eraser - */ - public function test_wp_comments_personal_data_eraser_empty_first_page_output() { - - $actual = wp_comments_personal_data_eraser( 'nocommentsfound@local.host' ); - $expected = array( - 'items_removed' => false, - 'items_retained' => false, - 'messages' => array(), - 'done' => true, - ); - - $this->assertSame( $expected, $actual ); - } - - /** - * Testing the `wp_comments_personal_data_eraser()` function's output, for the non-empty first page. - * - * @group privacy - * @ticket 43442 - * - * @covers ::wp_comments_personal_data_eraser - */ - public function test_wp_comments_personal_data_eraser_non_empty_first_page_output() { - - $post_id = self::factory()->post->create(); - $args = array( - 'comment_post_ID' => $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-04-14 17:20:00', - 'comment_agent' => 'COMMENT_AGENT', - 'comment_content' => 'Comment Content', - ); - self::factory()->comment->create( $args ); - - $actual = wp_comments_personal_data_eraser( $args['comment_author_email'] ); - $expected = array( - 'items_removed' => true, - 'items_retained' => false, - 'messages' => array(), - 'done' => true, - ); - - $this->assertSame( $expected, $actual ); - } - - /** - * Testing the `wp_comments_personal_data_eraser()` function's output, for an empty second page. - * - * @group privacy - * @ticket 43442 - * - * @covers ::wp_comments_personal_data_eraser - */ - public function test_wp_comments_personal_data_eraser_empty_second_page_output() { - - $post_id = self::factory()->post->create(); - $args = array( - 'comment_post_ID' => $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-04-14 17:20:00', - 'comment_agent' => 'COMMENT_AGENT', - 'comment_content' => 'Comment Content', - ); - self::factory()->comment->create( $args ); - - $actual = wp_comments_personal_data_eraser( $args['comment_author_email'], 2 ); - $expected = array( - 'items_removed' => false, - 'items_retained' => false, - 'messages' => array(), - 'done' => true, - ); - - $this->assertSame( $expected, $actual ); - } - - /** - * Testing the `wp_anonymize_comment` filter, to prevent comment anonymization. - * - * @group privacy - * @ticket 43442 - * - * @covers ::wp_comments_personal_data_eraser - */ - public function test_wp_anonymize_comment_filter_to_prevent_comment_anonymization() { - - $post_id = self::factory()->post->create(); - $args = array( - 'comment_post_ID' => $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-04-14 17:20:00', - 'comment_agent' => 'COMMENT_AGENT', - 'comment_content' => 'Comment Content', - ); - $comment_id = self::factory()->comment->create( $args ); - - add_filter( 'wp_anonymize_comment', '__return_false' ); - $actual = wp_comments_personal_data_eraser( $args['comment_author_email'] ); - remove_filter( 'wp_anonymize_comment', '__return_false' ); - - $message = sprintf( 'Comment %d contains personal data but could not be anonymized.', $comment_id ); - - $expected = array( - 'items_removed' => false, - 'items_retained' => true, - 'messages' => array( $message ), - 'done' => true, - ); - - $this->assertSame( $expected, $actual ); - } - - /** - * Testing the `wp_anonymize_comment` filter, to prevent comment anonymization, with a custom message. - * - * @group privacy - * @ticket 43442 - * - * @covers ::wp_comments_personal_data_eraser - */ - public function test_wp_anonymize_comment_filter_to_prevent_comment_anonymization_with_custom_message() { - - $post_id = self::factory()->post->create(); - $args = array( - 'comment_post_ID' => $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-04-14 17:20:00', - 'comment_agent' => 'COMMENT_AGENT', - 'comment_content' => 'Comment Content', - ); - $comment_id = self::factory()->comment->create( $args ); - - add_filter( 'wp_anonymize_comment', array( $this, 'wp_anonymize_comment_custom_message' ), 10, 3 ); - $actual = wp_comments_personal_data_eraser( $args['comment_author_email'] ); - remove_filter( 'wp_anonymize_comment', array( $this, 'wp_anonymize_comment_custom_message' ) ); - - $message = sprintf( 'Some custom message for comment %d.', $comment_id ); - - $expected = array( - 'items_removed' => false, - 'items_retained' => true, - 'messages' => array( $message ), - 'done' => true, - ); - - $this->assertSame( $expected, $actual ); - } - - /** - * Callback for the `wp_anonymize_comment` filter. - * - * @param bool|string $anonymize Whether to apply the comment anonymization (bool). - * Custom prevention message (string). Default true. - * @param WP_Comment $comment WP_Comment object. - * @param array $anonymized_comment Anonymized comment data. - * @return string - */ - public function wp_anonymize_comment_custom_message( $anonymize, $comment, $anonymized_comment ) { - return sprintf( 'Some custom message for comment %d.', $comment->comment_ID ); - } - public function test_update_should_invalidate_comment_cache() { global $wpdb; diff --git a/tests/phpunit/tests/comment/wpCommentsPersonalDataEraser.php b/tests/phpunit/tests/comment/wpCommentsPersonalDataEraser.php new file mode 100644 index 0000000000..c6a03d5102 --- /dev/null +++ b/tests/phpunit/tests/comment/wpCommentsPersonalDataEraser.php @@ -0,0 +1,231 @@ +post->create(); + $user_id = self::factory()->user->create(); + + $args = array( + 'user_id' => $user_id, + 'comment_post_ID' => $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-04-14 17:20:00', + 'comment_agent' => 'COMMENT_AGENT', + 'comment_content' => 'Comment Content', + ); + $comment_id = self::factory()->comment->create( $args ); + + wp_comments_personal_data_eraser( $args['comment_author_email'] ); + + $comment = get_comment( $comment_id ); + + $actual = array( + 'comment_ID' => $comment->comment_ID, + 'user_id' => $comment->user_id, + 'comment_author' => $comment->comment_author, + 'comment_author_email' => $comment->comment_author_email, + 'comment_author_url' => $comment->comment_author_url, + 'comment_author_IP' => $comment->comment_author_IP, + 'comment_date' => $comment->comment_date, + 'comment_date_gmt' => $comment->comment_date_gmt, + 'comment_agent' => $comment->comment_agent, + 'comment_content' => $comment->comment_content, + ); + + $expected = array( + 'comment_ID' => (string) $comment_id, + 'user_id' => '0', // Anonymized. + 'comment_author' => 'Anonymous', // Anonymized. + 'comment_author_email' => '', // Anonymized. + 'comment_author_url' => '', // Anonymized. + 'comment_author_IP' => '192.168.0.0', // Anonymized. + 'comment_date' => '2018-04-14 17:20:00', + 'comment_date_gmt' => '2018-04-14 17:20:00', + 'comment_agent' => '', // Anonymized. + 'comment_content' => 'Comment Content', + ); + + $this->assertSame( $expected, $actual ); + } + + /** + * Testing the `wp_comments_personal_data_eraser()` function's output on an empty first page. + * + * @ticket 43442 + */ + public function test_wp_comments_personal_data_eraser_empty_first_page_output() { + + $actual = wp_comments_personal_data_eraser( 'nocommentsfound@local.host' ); + $expected = array( + 'items_removed' => false, + 'items_retained' => false, + 'messages' => array(), + 'done' => true, + ); + + $this->assertSame( $expected, $actual ); + } + + /** + * Testing the `wp_comments_personal_data_eraser()` function's output, for the non-empty first page. + * + * @ticket 43442 + */ + public function test_wp_comments_personal_data_eraser_non_empty_first_page_output() { + + $post_id = self::factory()->post->create(); + $args = array( + 'comment_post_ID' => $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-04-14 17:20:00', + 'comment_agent' => 'COMMENT_AGENT', + 'comment_content' => 'Comment Content', + ); + self::factory()->comment->create( $args ); + + $actual = wp_comments_personal_data_eraser( $args['comment_author_email'] ); + $expected = array( + 'items_removed' => true, + 'items_retained' => false, + 'messages' => array(), + 'done' => true, + ); + + $this->assertSame( $expected, $actual ); + } + + /** + * Testing the `wp_comments_personal_data_eraser()` function's output, for an empty second page. + * + * @ticket 43442 + */ + public function test_wp_comments_personal_data_eraser_empty_second_page_output() { + + $post_id = self::factory()->post->create(); + $args = array( + 'comment_post_ID' => $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-04-14 17:20:00', + 'comment_agent' => 'COMMENT_AGENT', + 'comment_content' => 'Comment Content', + ); + self::factory()->comment->create( $args ); + + $actual = wp_comments_personal_data_eraser( $args['comment_author_email'], 2 ); + $expected = array( + 'items_removed' => false, + 'items_retained' => false, + 'messages' => array(), + 'done' => true, + ); + + $this->assertSame( $expected, $actual ); + } + + /** + * Testing the `wp_anonymize_comment` filter, to prevent comment anonymization. + * + * @ticket 43442 + */ + public function test_wp_anonymize_comment_filter_to_prevent_comment_anonymization() { + + $post_id = self::factory()->post->create(); + $args = array( + 'comment_post_ID' => $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-04-14 17:20:00', + 'comment_agent' => 'COMMENT_AGENT', + 'comment_content' => 'Comment Content', + ); + $comment_id = self::factory()->comment->create( $args ); + + add_filter( 'wp_anonymize_comment', '__return_false' ); + $actual = wp_comments_personal_data_eraser( $args['comment_author_email'] ); + remove_filter( 'wp_anonymize_comment', '__return_false' ); + + $message = sprintf( 'Comment %d contains personal data but could not be anonymized.', $comment_id ); + + $expected = array( + 'items_removed' => false, + 'items_retained' => true, + 'messages' => array( $message ), + 'done' => true, + ); + + $this->assertSame( $expected, $actual ); + } + + /** + * Testing the `wp_anonymize_comment` filter, to prevent comment anonymization, with a custom message. + * + * @ticket 43442 + */ + public function test_wp_anonymize_comment_filter_to_prevent_comment_anonymization_with_custom_message() { + + $post_id = self::factory()->post->create(); + $args = array( + 'comment_post_ID' => $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-04-14 17:20:00', + 'comment_agent' => 'COMMENT_AGENT', + 'comment_content' => 'Comment Content', + ); + $comment_id = self::factory()->comment->create( $args ); + + add_filter( 'wp_anonymize_comment', array( $this, 'wp_anonymize_comment_custom_message' ), 10, 3 ); + $actual = wp_comments_personal_data_eraser( $args['comment_author_email'] ); + remove_filter( 'wp_anonymize_comment', array( $this, 'wp_anonymize_comment_custom_message' ) ); + + $message = sprintf( 'Some custom message for comment %d.', $comment_id ); + + $expected = array( + 'items_removed' => false, + 'items_retained' => true, + 'messages' => array( $message ), + 'done' => true, + ); + + $this->assertSame( $expected, $actual ); + } + + /** + * Callback for the `wp_anonymize_comment` filter. + * + * @param bool|string $anonymize Whether to apply the comment anonymization (bool). + * Custom prevention message (string). Default true. + * @param WP_Comment $comment WP_Comment object. + * @param array $anonymized_comment Anonymized comment data. + * @return string + */ + public function wp_anonymize_comment_custom_message( $anonymize, $comment, $anonymized_comment ) { + return sprintf( 'Some custom message for comment %d.', $comment->comment_ID ); + } +}