From d48e4b680e55ef9b4eb6ea0bd9748ad501f80b30 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 22 Sep 2014 00:55:08 +0200 Subject: [PATCH 1/6] [ticket/10729] Fix doc block for user_delete PHPBB3-10729 --- phpBB/includes/functions_user.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index 20c371f8e5..abb057df5b 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -329,11 +329,16 @@ function user_add($user_row, $cp_data = false) } /** -* Remove User -*/ + * Remove User + * + * @param string $mode 'retain' or 'remove' + * @param int $user_id + * @param mixed $post_username + * @return bool + */ function user_delete($mode, $user_id, $post_username = false) { - global $cache, $config, $db, $user, $auth; + global $cache, $config, $db, $user; global $phpbb_root_path, $phpEx; $sql = 'SELECT * From 74854ac65d6d98a30cc34cbbcf6fdddb0c8f7cf0 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 22 Sep 2014 00:55:34 +0200 Subject: [PATCH 2/6] [ticket/10729] Add tests for user posts, reports and attachments PHPBB3-10729 --- tests/functions_user/delete_user_test.php | 401 ++++++++++++++++++ tests/functions_user/fixtures/delete_user.xml | 244 +++++++++++ 2 files changed, 645 insertions(+) create mode 100644 tests/functions_user/delete_user_test.php create mode 100644 tests/functions_user/fixtures/delete_user.xml diff --git a/tests/functions_user/delete_user_test.php b/tests/functions_user/delete_user_test.php new file mode 100644 index 0000000000..23ba7e9a40 --- /dev/null +++ b/tests/functions_user/delete_user_test.php @@ -0,0 +1,401 @@ +createXMLDataSet(dirname(__FILE__).'/fixtures/delete_user.xml'); + } + + protected function setUp() + { + parent::setUp(); + + global $cache, $config, $db; + + $db = $this->db = $this->new_dbal(); + $config = array( + 'load_online_time' => 5, + 'search_type' => 'fulltext_mysql', + ); + $cache = $this->getMock('cache'); + } + + public function first_last_post_data() + { + return array( + array( + 'retain', + 2, + false, + false, + array( + array('post_id' => 1, 'poster_id' => ANONYMOUS, 'post_username' => ''), + array('post_id' => 2, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), + array('post_id' => 3, 'poster_id' => ANONYMOUS, 'post_username' => ''), + array('post_id' => 4, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), + ), + array( + array( + 'topic_id' => 1, + 'topic_poster' => ANONYMOUS, 'topic_first_poster_name' => '', 'topic_first_poster_colour' => '', + 'topic_last_poster_id' => ANONYMOUS, 'topic_last_poster_name' => '', 'topic_last_poster_colour' => '', + ), + array( + 'topic_id' => 2, + 'topic_poster' => ANONYMOUS, 'topic_first_poster_name' => 'Other', 'topic_first_poster_colour' => '', + 'topic_last_poster_id' => ANONYMOUS, 'topic_last_poster_name' => 'Other', 'topic_last_poster_colour' => '', + ), + array( + 'topic_id' => 3, + 'topic_poster' => ANONYMOUS, 'topic_first_poster_name' => '', 'topic_first_poster_colour' => '', + 'topic_last_poster_id' => ANONYMOUS, 'topic_last_poster_name' => '', 'topic_last_poster_colour' => '', + ), + array( + 'topic_id' => 4, + 'topic_poster' => ANONYMOUS, 'topic_first_poster_name' => 'Other', 'topic_first_poster_colour' => '', + 'topic_last_poster_id' => ANONYMOUS, 'topic_last_poster_name' => 'Other', 'topic_last_poster_colour' => '', + ), + ), + array( + array('forum_id' => 1, 'forum_last_poster_id' => ANONYMOUS, 'forum_last_poster_name' => '', 'forum_last_poster_colour' => ''), + array('forum_id' => 2, 'forum_last_poster_id' => ANONYMOUS, 'forum_last_poster_name' => 'Other', 'forum_last_poster_colour' => ''), + array('forum_id' => 3, 'forum_last_poster_id' => ANONYMOUS, 'forum_last_poster_name' => '', 'forum_last_poster_colour' => ''), + array('forum_id' => 4, 'forum_last_poster_id' => ANONYMOUS, 'forum_last_poster_name' => 'Other', 'forum_last_poster_colour' => ''), + ), + ), + array( + 'remove', + 2, + false, + false, + array( + array('post_id' => 2, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), + array('post_id' => 4, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), + ), + array( + array( + 'topic_id' => 2, + 'topic_poster' => ANONYMOUS, 'topic_first_poster_name' => 'Other', 'topic_first_poster_colour' => '', + 'topic_last_poster_id' => ANONYMOUS, 'topic_last_poster_name' => 'Other', 'topic_last_poster_colour' => '', + ), + array( + 'topic_id' => 4, + 'topic_poster' => ANONYMOUS, 'topic_first_poster_name' => 'Other', 'topic_first_poster_colour' => '', + 'topic_last_poster_id' => ANONYMOUS, 'topic_last_poster_name' => 'Other', 'topic_last_poster_colour' => '', + ), + ), + array( + array('forum_id' => 1, 'forum_last_poster_id' => 0, 'forum_last_poster_name' => '', 'forum_last_poster_colour' => ''), + array('forum_id' => 2, 'forum_last_poster_id' => ANONYMOUS, 'forum_last_poster_name' => 'Other', 'forum_last_poster_colour' => ''), + array('forum_id' => 3, 'forum_last_poster_id' => 0, 'forum_last_poster_name' => '', 'forum_last_poster_colour' => ''), + array('forum_id' => 4, 'forum_last_poster_id' => ANONYMOUS, 'forum_last_poster_name' => 'Other', 'forum_last_poster_colour' => ''), + ), + ), + array( + 'retain', + 2, + 'Bertie', + false, + array( + array('post_id' => 1, 'poster_id' => ANONYMOUS, 'post_username' => 'Bertie'), + array('post_id' => 2, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), + array('post_id' => 3, 'poster_id' => ANONYMOUS, 'post_username' => 'Bertie'), + array('post_id' => 4, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), + ), + array( + array( + 'topic_id' => 1, + 'topic_poster' => ANONYMOUS, 'topic_first_poster_name' => 'Bertie', 'topic_first_poster_colour' => '', + 'topic_last_poster_id' => ANONYMOUS, 'topic_last_poster_name' => 'Bertie', 'topic_last_poster_colour' => '', + ), + array( + 'topic_id' => 2, + 'topic_poster' => ANONYMOUS, 'topic_first_poster_name' => 'Other', 'topic_first_poster_colour' => '', + 'topic_last_poster_id' => ANONYMOUS, 'topic_last_poster_name' => 'Other', 'topic_last_poster_colour' => '', + ), + array( + 'topic_id' => 3, + 'topic_poster' => ANONYMOUS, 'topic_first_poster_name' => 'Bertie', 'topic_first_poster_colour' => '', + 'topic_last_poster_id' => ANONYMOUS, 'topic_last_poster_name' => 'Bertie', 'topic_last_poster_colour' => '', + ), + array( + 'topic_id' => 4, + 'topic_poster' => ANONYMOUS, 'topic_first_poster_name' => 'Other', 'topic_first_poster_colour' => '', + 'topic_last_poster_id' => ANONYMOUS, 'topic_last_poster_name' => 'Other', 'topic_last_poster_colour' => '', + ), + ), + array( + array('forum_id' => 1, 'forum_last_poster_id' => ANONYMOUS, 'forum_last_poster_name' => 'Bertie', 'forum_last_poster_colour' => ''), + array('forum_id' => 2, 'forum_last_poster_id' => ANONYMOUS, 'forum_last_poster_name' => 'Other', 'forum_last_poster_colour' => ''), + array('forum_id' => 3, 'forum_last_poster_id' => ANONYMOUS, 'forum_last_poster_name' => 'Bertie', 'forum_last_poster_colour' => ''), + array('forum_id' => 4, 'forum_last_poster_id' => ANONYMOUS, 'forum_last_poster_name' => 'Other', 'forum_last_poster_colour' => ''), + ), + ), + array( + 'remove', + 2, + 'Bertie', + false, + array( + array('post_id' => 2, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), + array('post_id' => 4, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), + ), + array( + array( + 'topic_id' => 2, + 'topic_poster' => ANONYMOUS, 'topic_first_poster_name' => 'Other', 'topic_first_poster_colour' => '', + 'topic_last_poster_id' => ANONYMOUS, 'topic_last_poster_name' => 'Other', 'topic_last_poster_colour' => '', + ), + array( + 'topic_id' => 4, + 'topic_poster' => ANONYMOUS, 'topic_first_poster_name' => 'Other', 'topic_first_poster_colour' => '', + 'topic_last_poster_id' => ANONYMOUS, 'topic_last_poster_name' => 'Other', 'topic_last_poster_colour' => '', + ), + ), + array( + array('forum_id' => 1, 'forum_last_poster_id' => 0, 'forum_last_poster_name' => '', 'forum_last_poster_colour' => ''), + array('forum_id' => 2, 'forum_last_poster_id' => ANONYMOUS, 'forum_last_poster_name' => 'Other', 'forum_last_poster_colour' => ''), + array('forum_id' => 3, 'forum_last_poster_id' => 0, 'forum_last_poster_name' => '', 'forum_last_poster_colour' => ''), + array('forum_id' => 4, 'forum_last_poster_id' => ANONYMOUS, 'forum_last_poster_name' => 'Other', 'forum_last_poster_colour' => ''), + ), + ), + ); + } + + /** + * @dataProvider first_last_post_data + */ + public function test_first_last_post_info($mode, $user_id, $post_username, $expected, $expected_posts, $expected_topics, $expected_forums) + { + $this->assertEquals($expected, user_delete($mode, $user_id, $post_username)); + + $sql = 'SELECT post_id, poster_id, post_username + FROM ' . POSTS_TABLE . ' + ORDER BY post_id ASC'; + $result = $this->db->sql_query($sql); + $this->assertEquals($expected_posts, $this->db->sql_fetchrowset($result)); + $this->db->sql_freeresult($result); + + $sql = 'SELECT topic_id, topic_poster, topic_first_poster_name, topic_first_poster_colour, topic_last_poster_id, topic_last_poster_name, topic_last_poster_colour + FROM ' . TOPICS_TABLE . ' + ORDER BY topic_id ASC'; + $result = $this->db->sql_query($sql); + $this->assertEquals($expected_topics, $this->db->sql_fetchrowset($result)); + $this->db->sql_freeresult($result); + + $sql = 'SELECT forum_id, forum_last_poster_id, forum_last_poster_name, forum_last_poster_colour + FROM ' . FORUMS_TABLE . ' + ORDER BY forum_id ASC'; + $result = $this->db->sql_query($sql); + $this->assertEquals($expected_forums, $this->db->sql_fetchrowset($result)); + $this->db->sql_freeresult($result); + } + + public function report_attachment_data() + { + return array( + array( + 'retain', + 2, + false, + false, + array( + array('post_id' => 1, 'post_reported' => 1, 'post_edit_user' => 1), + array('post_id' => 2, 'post_reported' => 1, 'post_edit_user' => 1), + array('post_id' => 3, 'post_reported' => 0, 'post_edit_user' => 1), + array('post_id' => 4, 'post_reported' => 0, 'post_edit_user' => 1), + ), + array( + array('report_id' => 1, 'post_id' => 1, 'user_id' => 1), + array('report_id' => 3, 'post_id' => 2, 'user_id' => 1), + ), + array( + array('topic_id' => 1, 'topic_reported' => 1), + array('topic_id' => 2, 'topic_reported' => 1), + array('topic_id' => 3, 'topic_reported' => 0), + array('topic_id' => 4, 'topic_reported' => 0), + ), + array( + array('attach_id' => 1, 'post_msg_id' => 1, 'poster_id' => 1), + array('attach_id' => 2, 'post_msg_id' => 2, 'poster_id' => 1), + ), + ), + array( + 'remove', + 2, + false, + false, + array( + array('post_id' => 2, 'post_reported' => 1, 'post_edit_user' => 1), + array('post_id' => 4, 'post_reported' => 0, 'post_edit_user' => 1), + ), + array( + array('report_id' => 3, 'post_id' => 2, 'user_id' => 1), + ), + array( + array('topic_id' => 2, 'topic_reported' => 1), + array('topic_id' => 4, 'topic_reported' => 0), + ), + array( + array('attach_id' => 1, 'post_msg_id' => 1, 'poster_id' => 2), // TODO should be deleted: PHPBB3-13089 + array('attach_id' => 2, 'post_msg_id' => 2, 'poster_id' => 1), + ), + ), + array( + 'retain', + 2, + 'Bertie', + false, + array( + array('post_id' => 1, 'post_reported' => 1, 'post_edit_user' => 1), + array('post_id' => 2, 'post_reported' => 1, 'post_edit_user' => 1), + array('post_id' => 3, 'post_reported' => 0, 'post_edit_user' => 1), + array('post_id' => 4, 'post_reported' => 0, 'post_edit_user' => 1), + ), + array( + array('report_id' => 1, 'post_id' => 1, 'user_id' => 1), + array('report_id' => 3, 'post_id' => 2, 'user_id' => 1), + ), + array( + array('topic_id' => 1, 'topic_reported' => 1), + array('topic_id' => 2, 'topic_reported' => 1), + array('topic_id' => 3, 'topic_reported' => 0), + array('topic_id' => 4, 'topic_reported' => 0), + ), + array( + array('attach_id' => 1, 'post_msg_id' => 1, 'poster_id' => 1), + array('attach_id' => 2, 'post_msg_id' => 2, 'poster_id' => 1), + ), + ), + array( + 'remove', + 2, + 'Bertie', + false, + array( + array('post_id' => 2, 'post_reported' => 1, 'post_edit_user' => 1), + array('post_id' => 4, 'post_reported' => 0, 'post_edit_user' => 1), + ), + array( + array('report_id' => 3, 'post_id' => 2, 'user_id' => 1), + ), + array( + array('topic_id' => 2, 'topic_reported' => 1), + array('topic_id' => 4, 'topic_reported' => 0), + ), + array( + array('attach_id' => 1, 'post_msg_id' => 1, 'poster_id' => 2), // TODO should be deleted: PHPBB3-13089 + array('attach_id' => 2, 'post_msg_id' => 2, 'poster_id' => 1), + ), + ), + ); + } + + /** + * @dataProvider report_attachment_data + */ + public function test_report_attachment_info($mode, $user_id, $post_username, $expected, $expected_posts, $expected_reports, $expected_topics, $expected_attach) + { + $this->assertEquals($expected, user_delete($mode, $user_id, $post_username)); + + $sql = 'SELECT post_id, post_reported, post_edit_user + FROM ' . POSTS_TABLE . ' + ORDER BY post_id ASC'; + $result = $this->db->sql_query($sql); + $this->assertEquals($expected_posts, $this->db->sql_fetchrowset($result)); + $this->db->sql_freeresult($result); + + $sql = 'SELECT report_id, post_id, user_id + FROM ' . REPORTS_TABLE . ' + ORDER BY report_id ASC'; + $result = $this->db->sql_query($sql); + $this->assertEquals($expected_reports, $this->db->sql_fetchrowset($result)); + $this->db->sql_freeresult($result); + + $sql = 'SELECT topic_id, topic_reported + FROM ' . TOPICS_TABLE . ' + ORDER BY topic_id ASC'; + $result = $this->db->sql_query($sql); + $this->assertEquals($expected_topics, $this->db->sql_fetchrowset($result)); + $this->db->sql_freeresult($result); + + $sql = 'SELECT attach_id, post_msg_id, poster_id + FROM ' . ATTACHMENTS_TABLE . ' + ORDER BY attach_id ASC'; + $result = $this->db->sql_query($sql); + $this->assertEquals($expected_attach, $this->db->sql_fetchrowset($result)); + $this->db->sql_freeresult($result); + } + + public function delete_data() + { + return array( + array( + 'retain', + 2, + false, + false, + array( + array('user_id' => 1, 'user_posts' => 4), + ), + ), + array( + 'remove', + 2, + false, + false, + array( + array('user_id' => 1, 'user_posts' => 2), + ), + ), + array( + 'retain', + 2, + 'Bertie', + false, + array( + array('user_id' => 1, 'user_posts' => 4), + ), + ), + array( + 'remove', + 2, + 'Bertie', + false, + array( + array('user_id' => 1, 'user_posts' => 2), + ), + ), + ); + } + + /** + * @dataProvider delete_data + */ + public function test_delete_data($mode, $user_id, $post_username, $expected, $expected_users) + { + $this->assertEquals($expected, user_delete($mode, $user_id, $post_username)); + + $sql = 'SELECT user_id, user_posts + FROM ' . USERS_TABLE . ' + ORDER BY user_id ASC'; + $result = $this->db->sql_query($sql); + $this->assertEquals($expected_users, $this->db->sql_fetchrowset($result)); + $this->db->sql_freeresult($result); + } +} diff --git a/tests/functions_user/fixtures/delete_user.xml b/tests/functions_user/fixtures/delete_user.xml new file mode 100644 index 0000000000..36e634229f --- /dev/null +++ b/tests/functions_user/fixtures/delete_user.xml @@ -0,0 +1,244 @@ + + + + attach_id + post_msg_id + topic_id + in_message + poster_id + attach_comment + + 1 + 1 + 1 + 1 + 2 + + + + 2 + 2 + 2 + 1 + 1 + + +
+ + forum_id + forum_last_poster_id + forum_last_poster_name + forum_last_poster_colour + forum_parents + forum_desc + forum_rules + + 1 + 2 + + 00AA00 + + + + + + 2 + 1 + Other + + + + + + + 3 + 2 + + 00AA00 + + + + + + 4 + 1 + Other + + + + + +
+ + post_id + poster_id + post_edit_user + post_username + topic_id + forum_id + post_approved + post_time + post_text + post_reported + + 1 + 2 + 2 + + 1 + 1 + 1 + 1 + + 1 + + + 2 + 1 + 1 + Other + 2 + 2 + 1 + 1 + + 1 + + + 3 + 2 + 2 + + 3 + 3 + 1 + 1 + + 1 + + + 4 + 1 + 1 + Other + 4 + 4 + 1 + 1 + + 1 + +
+ + report_id + post_id + user_id + report_text + + 1 + 1 + 1 + Post Removed? + + + 2 + 3 + 2 + Post Removed? + + + 3 + 2 + 1 + Keep + + + 4 + 4 + 2 + Remove Report + +
+ + topic_id + forum_id + topic_reported + topic_poster + topic_first_poster_name + topic_first_poster_colour + topic_last_poster_id + topic_last_poster_name + topic_last_poster_colour + + 1 + 1 + 1 + 2 + + 00AA00 + 2 + + 00AA00 + + + 2 + 2 + 1 + 1 + Other + + 1 + Other + + + + 3 + 3 + 1 + 2 + + 00AA00 + 2 + + 00AA00 + + + 4 + 4 + 1 + 1 + Other + + 1 + Other + + +
+ + user_id + username_clean + user_permissions + user_sig + user_occ + user_interests + user_posts + + 1 + Anonymous + + + + + 2 + + + 2 + Foobar + + + + + 2 + +
+
From d7c12ccd6067a74ca24fe9cec872c29b94ce13b2 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 22 Sep 2014 01:42:36 +0200 Subject: [PATCH 3/6] [ticket/10729] Add tests for some special tables with unique conditions PHPBB3-10729 --- tests/functions_user/delete_user_test.php | 173 +++++++----------- tests/functions_user/fixtures/delete_user.xml | 157 +++++++++++++++- 2 files changed, 225 insertions(+), 105 deletions(-) diff --git a/tests/functions_user/delete_user_test.php b/tests/functions_user/delete_user_test.php index 23ba7e9a40..3cd575457d 100644 --- a/tests/functions_user/delete_user_test.php +++ b/tests/functions_user/delete_user_test.php @@ -39,10 +39,7 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case { return array( array( - 'retain', - 2, - false, - false, + 'retain', 2, false, array( array('post_id' => 1, 'poster_id' => ANONYMOUS, 'post_username' => ''), array('post_id' => 2, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), @@ -79,10 +76,7 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case ), ), array( - 'remove', - 2, - false, - false, + 'remove', 2, false, array( array('post_id' => 2, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), array('post_id' => 4, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), @@ -107,10 +101,7 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case ), ), array( - 'retain', - 2, - 'Bertie', - false, + 'retain', 2, 'Bertie', array( array('post_id' => 1, 'poster_id' => ANONYMOUS, 'post_username' => 'Bertie'), array('post_id' => 2, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), @@ -147,10 +138,7 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case ), ), array( - 'remove', - 2, - 'Bertie', - false, + 'remove', 2, 'Bertie', array( array('post_id' => 2, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), array('post_id' => 4, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), @@ -180,9 +168,9 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case /** * @dataProvider first_last_post_data */ - public function test_first_last_post_info($mode, $user_id, $post_username, $expected, $expected_posts, $expected_topics, $expected_forums) + public function test_first_last_post_info($mode, $user_id, $post_username, $expected_posts, $expected_topics, $expected_forums) { - $this->assertEquals($expected, user_delete($mode, $user_id, $post_username)); + $this->assertFalse(user_delete($mode, $user_id, $post_username)); $sql = 'SELECT post_id, poster_id, post_username FROM ' . POSTS_TABLE . ' @@ -210,10 +198,7 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case { return array( array( - 'retain', - 2, - false, - false, + 'retain', 2, array( array('post_id' => 1, 'post_reported' => 1, 'post_edit_user' => 1), array('post_id' => 2, 'post_reported' => 1, 'post_edit_user' => 1), @@ -233,13 +218,11 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case array( array('attach_id' => 1, 'post_msg_id' => 1, 'poster_id' => 1), array('attach_id' => 2, 'post_msg_id' => 2, 'poster_id' => 1), + array('attach_id' => 3, 'post_msg_id' => 0, 'poster_id' => 1), // TODO should be deleted: PHPBB3-13089 ), ), array( - 'remove', - 2, - false, - false, + 'remove', 2, array( array('post_id' => 2, 'post_reported' => 1, 'post_edit_user' => 1), array('post_id' => 4, 'post_reported' => 0, 'post_edit_user' => 1), @@ -252,55 +235,8 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case array('topic_id' => 4, 'topic_reported' => 0), ), array( - array('attach_id' => 1, 'post_msg_id' => 1, 'poster_id' => 2), // TODO should be deleted: PHPBB3-13089 - array('attach_id' => 2, 'post_msg_id' => 2, 'poster_id' => 1), - ), - ), - array( - 'retain', - 2, - 'Bertie', - false, - array( - array('post_id' => 1, 'post_reported' => 1, 'post_edit_user' => 1), - array('post_id' => 2, 'post_reported' => 1, 'post_edit_user' => 1), - array('post_id' => 3, 'post_reported' => 0, 'post_edit_user' => 1), - array('post_id' => 4, 'post_reported' => 0, 'post_edit_user' => 1), - ), - array( - array('report_id' => 1, 'post_id' => 1, 'user_id' => 1), - array('report_id' => 3, 'post_id' => 2, 'user_id' => 1), - ), - array( - array('topic_id' => 1, 'topic_reported' => 1), - array('topic_id' => 2, 'topic_reported' => 1), - array('topic_id' => 3, 'topic_reported' => 0), - array('topic_id' => 4, 'topic_reported' => 0), - ), - array( - array('attach_id' => 1, 'post_msg_id' => 1, 'poster_id' => 1), - array('attach_id' => 2, 'post_msg_id' => 2, 'poster_id' => 1), - ), - ), - array( - 'remove', - 2, - 'Bertie', - false, - array( - array('post_id' => 2, 'post_reported' => 1, 'post_edit_user' => 1), - array('post_id' => 4, 'post_reported' => 0, 'post_edit_user' => 1), - ), - array( - array('report_id' => 3, 'post_id' => 2, 'user_id' => 1), - ), - array( - array('topic_id' => 2, 'topic_reported' => 1), - array('topic_id' => 4, 'topic_reported' => 0), - ), - array( - array('attach_id' => 1, 'post_msg_id' => 1, 'poster_id' => 2), // TODO should be deleted: PHPBB3-13089 array('attach_id' => 2, 'post_msg_id' => 2, 'poster_id' => 1), + array('attach_id' => 3, 'post_msg_id' => 0, 'poster_id' => 2), // TODO should be deleted: PHPBB3-13089 ), ), ); @@ -309,9 +245,9 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case /** * @dataProvider report_attachment_data */ - public function test_report_attachment_info($mode, $user_id, $post_username, $expected, $expected_posts, $expected_reports, $expected_topics, $expected_attach) + public function test_report_attachment_info($mode, $user_id, $expected_posts, $expected_reports, $expected_topics, $expected_attach) { - $this->assertEquals($expected, user_delete($mode, $user_id, $post_username)); + $this->assertFalse(user_delete($mode, $user_id)); $sql = 'SELECT post_id, post_reported, post_edit_user FROM ' . POSTS_TABLE . ' @@ -346,39 +282,33 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case { return array( array( - 'retain', - 2, - false, - false, + 'retain', 2, + array(array('user_id' => 1, 'user_posts' => 4)), + array(array('user_id' => 1, 'zebra_id' => 3)), + array(array('ban_id' => 2), array('ban_id' => 3)), + array(array('session_id' => '12345678901234567890123456789013')), array( - array('user_id' => 1, 'user_posts' => 4), + array('log_id' => 2, 'user_id' => 1, 'reportee_id' => 1), + array('log_id' => 3, 'user_id' => 1, 'reportee_id' => 1), + ), + array( + array('msg_id' => 1, 'author_id' => 3, 'message_edit_user' => 3), + array('msg_id' => 2, 'author_id' => 1, 'message_edit_user' => 1), ), ), array( - 'remove', - 2, - false, - false, + 'remove', 2, + array(array('user_id' => 1, 'user_posts' => 2)), + array(array('user_id' => 1, 'zebra_id' => 3)), + array(array('ban_id' => 2), array('ban_id' => 3)), + array(array('session_id' => '12345678901234567890123456789013')), array( - array('user_id' => 1, 'user_posts' => 2), + array('log_id' => 2, 'user_id' => 1, 'reportee_id' => 1), + array('log_id' => 3, 'user_id' => 1, 'reportee_id' => 1), ), - ), - array( - 'retain', - 2, - 'Bertie', - false, array( - array('user_id' => 1, 'user_posts' => 4), - ), - ), - array( - 'remove', - 2, - 'Bertie', - false, - array( - array('user_id' => 1, 'user_posts' => 2), + array('msg_id' => 1, 'author_id' => 3, 'message_edit_user' => 3), + array('msg_id' => 2, 'author_id' => 1, 'message_edit_user' => 1), ), ), ); @@ -387,9 +317,9 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case /** * @dataProvider delete_data */ - public function test_delete_data($mode, $user_id, $post_username, $expected, $expected_users) + public function test_delete_data($mode, $user_id, $expected_users, $expected_zebra, $expected_ban, $expected_sessions, $expected_logs, $expected_pms) { - $this->assertEquals($expected, user_delete($mode, $user_id, $post_username)); + $this->assertFalse(user_delete($mode, $user_id)); $sql = 'SELECT user_id, user_posts FROM ' . USERS_TABLE . ' @@ -397,5 +327,40 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case $result = $this->db->sql_query($sql); $this->assertEquals($expected_users, $this->db->sql_fetchrowset($result)); $this->db->sql_freeresult($result); + + $sql = 'SELECT user_id, zebra_id + FROM ' . ZEBRA_TABLE . ' + ORDER BY user_id ASC, zebra_id ASC'; + $result = $this->db->sql_query($sql); + $this->assertEquals($expected_zebra, $this->db->sql_fetchrowset($result)); + $this->db->sql_freeresult($result); + + $sql = 'SELECT ban_id + FROM ' . BANLIST_TABLE . ' + ORDER BY ban_id ASC'; + $result = $this->db->sql_query($sql); + $this->assertEquals($expected_ban, $this->db->sql_fetchrowset($result)); + $this->db->sql_freeresult($result); + + $sql = 'SELECT session_id + FROM ' . SESSIONS_TABLE . ' + ORDER BY session_id ASC'; + $result = $this->db->sql_query($sql); + $this->assertEquals($expected_sessions, $this->db->sql_fetchrowset($result)); + $this->db->sql_freeresult($result); + + $sql = 'SELECT log_id, user_id, reportee_id + FROM ' . LOG_TABLE . ' + ORDER BY log_id ASC'; + $result = $this->db->sql_query($sql); + $this->assertEquals($expected_logs, $this->db->sql_fetchrowset($result)); + $this->db->sql_freeresult($result); + + $sql = 'SELECT msg_id, author_id, message_edit_user + FROM ' . PRIVMSGS_TABLE . ' + ORDER BY msg_id ASC'; + $result = $this->db->sql_query($sql); + $this->assertEquals($expected_pms, $this->db->sql_fetchrowset($result)); + $this->db->sql_freeresult($result); } } diff --git a/tests/functions_user/fixtures/delete_user.xml b/tests/functions_user/fixtures/delete_user.xml index 36e634229f..8efa05f467 100644 --- a/tests/functions_user/fixtures/delete_user.xml +++ b/tests/functions_user/fixtures/delete_user.xml @@ -6,24 +6,64 @@ topic_id in_message poster_id + is_orphan attach_comment 1 1 1 - 1 + 0 2 + 0 2 2 2 + 0 1 + 0 + + + + 3 + 0 + 0 + 0 + 2 1 + + ban_id + ban_userid + ban_email + ban_reason + ban_give_reason + + 1 + 2 + + + + + + 2 + 3 + + + + + + 3 + 0 + + + + +
forum_idforum_last_poster_id @@ -69,6 +109,41 @@
+ + log_id + user_id + reportee_id + log_operation + log_data + + 1 + 1 + 2 + + + + + 2 + 2 + 1 + + + + + 3 + 1 + 1 + + + + + 4 + 2 + 2 + + + +
post_idposter_id @@ -129,6 +204,55 @@ 1
+ + msg_id + author_id + message_edit_user + message_text + to_address + bcc_address + + 1 + 3 + 3 + + + + + + 2 + 2 + 2 + + + + +
+ + msg_id + user_id + author_id + + 1 + 3 + 3 + + + 1 + 2 + 3 + + + 2 + 3 + 2 + + + 2 + 2 + 2 + +
report_idpost_id @@ -159,6 +283,21 @@ Remove Report
+ + session_id + session_user_id + session_page + + 12345678901234567890123456789012 + 2 + + + + 12345678901234567890123456789013 + 3 + + +
topic_idforum_id @@ -241,4 +380,20 @@ 2
+ + user_id + zebra_id + + 1 + 2 + + + 1 + 3 + + + 2 + 1 + +
From 7fca351e05fd47bb1aaef3611ee9b7d7c946b0b3 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 22 Sep 2014 02:01:54 +0200 Subject: [PATCH 4/6] [ticket/10729] Add assert messages and finish up tests PHPBB3-10729 --- tests/functions_user/delete_user_test.php | 123 ++++++++++++---- tests/functions_user/fixtures/delete_user.xml | 132 ++++++++++++++++++ 2 files changed, 228 insertions(+), 27 deletions(-) diff --git a/tests/functions_user/delete_user_test.php b/tests/functions_user/delete_user_test.php index 3cd575457d..1d7c843058 100644 --- a/tests/functions_user/delete_user_test.php +++ b/tests/functions_user/delete_user_test.php @@ -39,7 +39,7 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case { return array( array( - 'retain', 2, false, + 'retain', false, array( array('post_id' => 1, 'poster_id' => ANONYMOUS, 'post_username' => ''), array('post_id' => 2, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), @@ -76,7 +76,7 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case ), ), array( - 'remove', 2, false, + 'remove', false, array( array('post_id' => 2, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), array('post_id' => 4, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), @@ -101,7 +101,7 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case ), ), array( - 'retain', 2, 'Bertie', + 'retain', 'Bertie', array( array('post_id' => 1, 'poster_id' => ANONYMOUS, 'post_username' => 'Bertie'), array('post_id' => 2, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), @@ -138,7 +138,7 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case ), ), array( - 'remove', 2, 'Bertie', + 'remove', 'Bertie', array( array('post_id' => 2, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), array('post_id' => 4, 'poster_id' => ANONYMOUS, 'post_username' => 'Other'), @@ -168,29 +168,29 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case /** * @dataProvider first_last_post_data */ - public function test_first_last_post_info($mode, $user_id, $post_username, $expected_posts, $expected_topics, $expected_forums) + public function test_first_last_post_info($mode, $post_username, $expected_posts, $expected_topics, $expected_forums) { - $this->assertFalse(user_delete($mode, $user_id, $post_username)); + $this->assertFalse(user_delete($mode, 2, $post_username)); $sql = 'SELECT post_id, poster_id, post_username FROM ' . POSTS_TABLE . ' ORDER BY post_id ASC'; $result = $this->db->sql_query($sql); - $this->assertEquals($expected_posts, $this->db->sql_fetchrowset($result)); + $this->assertEquals($expected_posts, $this->db->sql_fetchrowset($result), 'Post table poster info is mismatching after deleting a user.'); $this->db->sql_freeresult($result); $sql = 'SELECT topic_id, topic_poster, topic_first_poster_name, topic_first_poster_colour, topic_last_poster_id, topic_last_poster_name, topic_last_poster_colour FROM ' . TOPICS_TABLE . ' ORDER BY topic_id ASC'; $result = $this->db->sql_query($sql); - $this->assertEquals($expected_topics, $this->db->sql_fetchrowset($result)); + $this->assertEquals($expected_topics, $this->db->sql_fetchrowset($result), 'Topic table first/last poster info is mismatching after deleting a user.'); $this->db->sql_freeresult($result); $sql = 'SELECT forum_id, forum_last_poster_id, forum_last_poster_name, forum_last_poster_colour FROM ' . FORUMS_TABLE . ' ORDER BY forum_id ASC'; $result = $this->db->sql_query($sql); - $this->assertEquals($expected_forums, $this->db->sql_fetchrowset($result)); + $this->assertEquals($expected_forums, $this->db->sql_fetchrowset($result), 'Forum table last poster info is mismatching after deleting a user.'); $this->db->sql_freeresult($result); } @@ -198,7 +198,7 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case { return array( array( - 'retain', 2, + 'retain', array( array('post_id' => 1, 'post_reported' => 1, 'post_edit_user' => 1), array('post_id' => 2, 'post_reported' => 1, 'post_edit_user' => 1), @@ -222,7 +222,7 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case ), ), array( - 'remove', 2, + 'remove', array( array('post_id' => 2, 'post_reported' => 1, 'post_edit_user' => 1), array('post_id' => 4, 'post_reported' => 0, 'post_edit_user' => 1), @@ -245,36 +245,36 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case /** * @dataProvider report_attachment_data */ - public function test_report_attachment_info($mode, $user_id, $expected_posts, $expected_reports, $expected_topics, $expected_attach) + public function test_report_attachment_info($mode, $expected_posts, $expected_reports, $expected_topics, $expected_attach) { - $this->assertFalse(user_delete($mode, $user_id)); + $this->assertFalse(user_delete($mode, 2)); $sql = 'SELECT post_id, post_reported, post_edit_user FROM ' . POSTS_TABLE . ' ORDER BY post_id ASC'; $result = $this->db->sql_query($sql); - $this->assertEquals($expected_posts, $this->db->sql_fetchrowset($result)); + $this->assertEquals($expected_posts, $this->db->sql_fetchrowset($result), 'Post report status content is mismatching after deleting a user.'); $this->db->sql_freeresult($result); $sql = 'SELECT report_id, post_id, user_id FROM ' . REPORTS_TABLE . ' ORDER BY report_id ASC'; $result = $this->db->sql_query($sql); - $this->assertEquals($expected_reports, $this->db->sql_fetchrowset($result)); + $this->assertEquals($expected_reports, $this->db->sql_fetchrowset($result), 'Report table content is mismatching after deleting a user.'); $this->db->sql_freeresult($result); $sql = 'SELECT topic_id, topic_reported FROM ' . TOPICS_TABLE . ' ORDER BY topic_id ASC'; $result = $this->db->sql_query($sql); - $this->assertEquals($expected_topics, $this->db->sql_fetchrowset($result)); + $this->assertEquals($expected_topics, $this->db->sql_fetchrowset($result), 'Topic report status is mismatching after deleting a user.'); $this->db->sql_freeresult($result); $sql = 'SELECT attach_id, post_msg_id, poster_id FROM ' . ATTACHMENTS_TABLE . ' ORDER BY attach_id ASC'; $result = $this->db->sql_query($sql); - $this->assertEquals($expected_attach, $this->db->sql_fetchrowset($result)); + $this->assertEquals($expected_attach, $this->db->sql_fetchrowset($result), 'Attachment table content is mismatching after deleting a user.'); $this->db->sql_freeresult($result); } @@ -282,7 +282,7 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case { return array( array( - 'retain', 2, + 'retain', array(array('user_id' => 1, 'user_posts' => 4)), array(array('user_id' => 1, 'zebra_id' => 3)), array(array('ban_id' => 2), array('ban_id' => 3)), @@ -297,7 +297,7 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case ), ), array( - 'remove', 2, + 'remove', array(array('user_id' => 1, 'user_posts' => 2)), array(array('user_id' => 1, 'zebra_id' => 3)), array(array('ban_id' => 2), array('ban_id' => 3)), @@ -317,50 +317,119 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case /** * @dataProvider delete_data */ - public function test_delete_data($mode, $user_id, $expected_users, $expected_zebra, $expected_ban, $expected_sessions, $expected_logs, $expected_pms) + public function test_delete_data($mode, $expected_users, $expected_zebra, $expected_ban, $expected_sessions, $expected_logs, $expected_pms) { - $this->assertFalse(user_delete($mode, $user_id)); + $this->assertFalse(user_delete($mode, 2)); $sql = 'SELECT user_id, user_posts FROM ' . USERS_TABLE . ' ORDER BY user_id ASC'; $result = $this->db->sql_query($sql); - $this->assertEquals($expected_users, $this->db->sql_fetchrowset($result)); + $this->assertEquals($expected_users, $this->db->sql_fetchrowset($result), 'User table content is mismatching after deleting a user.'); $this->db->sql_freeresult($result); $sql = 'SELECT user_id, zebra_id FROM ' . ZEBRA_TABLE . ' ORDER BY user_id ASC, zebra_id ASC'; $result = $this->db->sql_query($sql); - $this->assertEquals($expected_zebra, $this->db->sql_fetchrowset($result)); + $this->assertEquals($expected_zebra, $this->db->sql_fetchrowset($result), 'Zebra table content is mismatching after deleting a user.'); $this->db->sql_freeresult($result); $sql = 'SELECT ban_id FROM ' . BANLIST_TABLE . ' ORDER BY ban_id ASC'; $result = $this->db->sql_query($sql); - $this->assertEquals($expected_ban, $this->db->sql_fetchrowset($result)); + $this->assertEquals($expected_ban, $this->db->sql_fetchrowset($result), 'Ban table content is mismatching after deleting a user.'); $this->db->sql_freeresult($result); $sql = 'SELECT session_id FROM ' . SESSIONS_TABLE . ' ORDER BY session_id ASC'; $result = $this->db->sql_query($sql); - $this->assertEquals($expected_sessions, $this->db->sql_fetchrowset($result)); + $this->assertEquals($expected_sessions, $this->db->sql_fetchrowset($result), 'Session table content is mismatching after deleting a user.'); $this->db->sql_freeresult($result); $sql = 'SELECT log_id, user_id, reportee_id FROM ' . LOG_TABLE . ' ORDER BY log_id ASC'; $result = $this->db->sql_query($sql); - $this->assertEquals($expected_logs, $this->db->sql_fetchrowset($result)); + $this->assertEquals($expected_logs, $this->db->sql_fetchrowset($result), 'Log table content is mismatching after deleting a user.'); $this->db->sql_freeresult($result); $sql = 'SELECT msg_id, author_id, message_edit_user FROM ' . PRIVMSGS_TABLE . ' ORDER BY msg_id ASC'; $result = $this->db->sql_query($sql); - $this->assertEquals($expected_pms, $this->db->sql_fetchrowset($result)); + $this->assertEquals($expected_pms, $this->db->sql_fetchrowset($result), 'Private messages table content is mismatching after deleting a user.'); $this->db->sql_freeresult($result); } + + public function delete_user_id_data() + { + return array( + array( + 'retain', + array( + USER_GROUP_TABLE, + TOPICS_WATCH_TABLE, + FORUMS_WATCH_TABLE, + ACL_USERS_TABLE, + TOPICS_TRACK_TABLE, + TOPICS_POSTED_TABLE, + FORUMS_TRACK_TABLE, + PROFILE_FIELDS_DATA_TABLE, + MODERATOR_CACHE_TABLE, + DRAFTS_TABLE, + BOOKMARKS_TABLE, + SESSIONS_KEYS_TABLE, + PRIVMSGS_FOLDER_TABLE, + PRIVMSGS_RULES_TABLE, + ), + ), + array( + 'remove', + array( + USER_GROUP_TABLE, + TOPICS_WATCH_TABLE, + FORUMS_WATCH_TABLE, + ACL_USERS_TABLE, + TOPICS_TRACK_TABLE, + TOPICS_POSTED_TABLE, + FORUMS_TRACK_TABLE, + PROFILE_FIELDS_DATA_TABLE, + MODERATOR_CACHE_TABLE, + DRAFTS_TABLE, + BOOKMARKS_TABLE, + SESSIONS_KEYS_TABLE, + PRIVMSGS_FOLDER_TABLE, + PRIVMSGS_RULES_TABLE, + ), + ), + ); + } + + /** + * @dataProvider delete_user_id_data + */ + public function test_delete_user_id_data($mode, $cleaned_tables) + { + $this->assertFalse(user_delete($mode, 2)); + + foreach ($cleaned_tables as $table) + { + $sql = 'SELECT user_id + FROM ' . $table . ' + WHERE user_id = 2'; + $result = $this->db->sql_query($sql); + $this->assertFalse($this->db->sql_fetchfield('user_id'), 'Found data for deleted user in table: ' . $table); + $this->db->sql_freeresult($result); + + $sql = 'SELECT user_id + FROM ' . $table . ' + WHERE user_id = 3'; + $result = $this->db->sql_query($sql); + $this->assertEquals(3, $this->db->sql_fetchfield('user_id'), 'Missing data for user in table: ' . $table); + $this->db->sql_freeresult($result); + } + } } diff --git a/tests/functions_user/fixtures/delete_user.xml b/tests/functions_user/fixtures/delete_user.xml index 8efa05f467..07591389d2 100644 --- a/tests/functions_user/fixtures/delete_user.xml +++ b/tests/functions_user/fixtures/delete_user.xml @@ -396,4 +396,136 @@ 1 + + user_id + + 2 + + + 3 + +
+ + user_id + + 2 + + + 3 + +
+ + user_id + + 2 + + + 3 + +
+ + user_id + + 2 + + + 3 + +
+ + user_id + + 2 + + + 3 + +
+ + user_id + + 2 + + + 3 + +
+ + user_id + + 2 + + + 3 + +
+ + user_id + + 2 + + + 3 + +
+ + user_id + + 2 + + + 3 + +
+ + user_id + + 2 + + + 3 + +
+ + user_id + + 2 + + + 3 + +
+ + user_id + + 2 + + + 3 + +
+ + user_id + rule_string + + 2 + + + + 3 + + +
+ + user_id + draft_message + + 2 + + + + 3 + + +
From e28b93e0cc3d5bceb803b73c646cf51c153e7a5a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 22 Sep 2014 23:55:56 +0200 Subject: [PATCH 5/6] [ticket/10729] Ensure that no bans exist before testing create_session PHPBB3-10729 --- tests/session/fixtures/sessions_empty.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/session/fixtures/sessions_empty.xml b/tests/session/fixtures/sessions_empty.xml index 0e6ddccd88..c592e0a6c8 100644 --- a/tests/session/fixtures/sessions_empty.xml +++ b/tests/session/fixtures/sessions_empty.xml @@ -38,4 +38,11 @@ session_ip session_browser + + ban_id + ban_userid + ban_email + ban_reason + ban_give_reason +
From bea5f94de654df6b009d6058816ad500836469b3 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 23 Sep 2014 09:03:44 +0200 Subject: [PATCH 6/6] [ticket/10729] Use mocked null cache for phpunit 3.6 on travis with php 5.2 PHPBB3-10729 --- tests/functions_user/delete_user_test.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/functions_user/delete_user_test.php b/tests/functions_user/delete_user_test.php index 1d7c843058..9a7805a819 100644 --- a/tests/functions_user/delete_user_test.php +++ b/tests/functions_user/delete_user_test.php @@ -10,6 +10,7 @@ require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php'; require_once dirname(__FILE__) . '/../../phpBB/includes/functions_user.php'; require_once dirname(__FILE__) . '/../../phpBB/includes/utf/utf_tools.php'; +require_once dirname(__FILE__) . '/../mock/null_cache.php'; class phpbb_functions_user_delete_user_test extends phpbb_database_test_case { @@ -32,7 +33,7 @@ class phpbb_functions_user_delete_user_test extends phpbb_database_test_case 'load_online_time' => 5, 'search_type' => 'fulltext_mysql', ); - $cache = $this->getMock('cache'); + $cache = new phpbb_mock_null_cache(); } public function first_last_post_data()