From c3f31a3ded105fa1dcbb7501fbcf6f5b52f48b04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20S=CC=8Ckoda?= Date: Wed, 20 Mar 2013 19:41:46 +0100 Subject: [PATCH] MDL-38581 move forum discussion and post generators to proper place --- lib/testing/generator/data_generator.php | 142 --------------------- lib/testing/tests/generator_test.php | 76 ------------ mod/forum/tests/externallib_test.php | 16 +-- mod/forum/tests/generator/lib.php | 152 +++++++++++++++++++++++ mod/forum/tests/generator_test.php | 76 ++++++++++++ 5 files changed, 236 insertions(+), 226 deletions(-) diff --git a/lib/testing/generator/data_generator.php b/lib/testing/generator/data_generator.php index 425dbf138ca..820f92715c6 100644 --- a/lib/testing/generator/data_generator.php +++ b/lib/testing/generator/data_generator.php @@ -41,16 +41,6 @@ class testing_data_generator { protected $groupcount = 0; protected $groupingcount = 0; - /** - * @var int keep track of how many forum discussions have been created. - */ - protected $forumdiscussioncount = 0; - - /** - * @var int keep track of how many forum posts have been created. - */ - protected $forumpostcount = 0; - /** @var array list of plugin generators */ protected $generators = array(); @@ -92,8 +82,6 @@ EOD; $this->categorycount = 0; $this->coursecount = 0; $this->scalecount = 0; - $this->forumdiscussioncount = 0; - $this->forumpostcount = 0; foreach ($this->generators as $generator) { $generator->reset(); @@ -669,136 +657,6 @@ EOD; return true; } - - /** - * Function to create a dummy discussion. - * - * @param array|stdClass $record - * @return stdClass the discussion object - */ - public function create_forum_discussion($record = null) { - global $DB; - - // Increment the forum discussion count. - $this->forumdiscussioncount++; - - $record = (array) $record; - - if (!isset($record['course'])) { - throw new coding_exception('course must be present in phpunit_util::create_forum_discussion() $record'); - } - - if (!isset($record['forum'])) { - throw new coding_exception('forum must be present in phpunit_util::create_forum_discussion() $record'); - } - - if (!isset($record['userid'])) { - throw new coding_exception('userid must be present in phpunit_util::create_forum_discussion() $record'); - } - - if (!isset($record['name'])) { - $record['name'] = "Discussion " . $this->forumdiscussioncount; - } - - if (!isset($record['subject'])) { - $record['subject'] = "Subject for discussion " . $this->forumdiscussioncount; - } - - if (!isset($record['message'])) { - $record['message'] = html_writer::tag('p', 'Message for discussion ' . $this->forumdiscussioncount); - } - - if (!isset($record['messageformat'])) { - $record['messageformat'] = editors_get_preferred_format(); - } - - if (!isset($record['messagetrust'])) { - $record['messagetrust'] = ""; - } - - if (!isset($record['assessed'])) { - $record['assessed'] = '1'; - } - - if (!isset($record['groupid'])) { - $record['groupid'] = "-1"; - } - - if (!isset($record['timestart'])) { - $record['timestart'] = "0"; - } - - if (!isset($record['timeend'])) { - $record['timeend'] = "0"; - } - - if (!isset($record['mailnow'])) { - $record['mailnow'] = "0"; - } - - $record = (object) $record; - - // Add the discussion. - $record->id = forum_add_discussion($record, null, null, $record->userid); - - return $record; - } - - /** - * Function to create a dummy post. - * - * @param array|stdClass $record - * @return stdClass the post object - */ - public function create_forum_post($record = null) { - global $DB; - - // Increment the forum post count. - $this->forumpostcount++; - - // Variable to store time. - $time = time() + $this->forumpostcount; - - $record = (array) $record; - - if (!isset($record['discussion'])) { - throw new coding_exception('discussion must be present in phpunit_util::create_forum_post() $record'); - } - - if (!isset($record['userid'])) { - throw new coding_exception('userid must be present in phpunit_util::create_forum_post() $record'); - } - - if (!isset($record['parent'])) { - $record['parent'] = 0; - } - - if (!isset($record['subject'])) { - $record['subject'] = 'Forum post subject ' . $this->forumpostcount; - } - - if (!isset($record['message'])) { - $record['message'] = html_writer::tag('p', 'Forum message post ' . $this->forumpostcount); - } - - if (!isset($record['created'])) { - $record['created'] = $time; - } - - if (!isset($record['modified'])) { - $record['modified'] = $time; - } - - $record = (object) $record; - - // Add the post. - $record->id = $DB->insert_record('forum_posts', $record); - - // Update the last post. - forum_discussion_update_last_post($record->discussion); - - return $record; - } } /** diff --git a/lib/testing/tests/generator_test.php b/lib/testing/tests/generator_test.php index a5c451a9234..19acca666f9 100644 --- a/lib/testing/tests/generator_test.php +++ b/lib/testing/tests/generator_test.php @@ -203,80 +203,4 @@ class core_test_generator_testcase extends advanced_testcase { $this->assertFalse($result); } - - /** - * Test create_forum_discussion. - */ - public function test_create_forum_discussion() { - global $DB; - - $this->resetAfterTest(true); - - // User that will create the forum. - $user = self::getDataGenerator()->create_user(); - - // Create course to add the forum to. - $course = self::getDataGenerator()->create_course(); - - // The forum. - $record = new stdClass(); - $record->course = $course->id; - $forum = self::getDataGenerator()->create_module('forum', $record); - - // Add a few discussions. - $record = array(); - $record['course'] = $course->id; - $record['forum'] = $forum->id; - $record['userid'] = $user->id; - self::getDataGenerator()->create_forum_discussion($record); - self::getDataGenerator()->create_forum_discussion($record); - self::getDataGenerator()->create_forum_discussion($record); - - // Check the discussions were correctly created. - $this->assertEquals(3, $DB->count_records_select('forum_discussions', 'forum = :forum', - array('forum' => $forum->id))); - } - - /** - * Test create_forum_post. - */ - public function test_create_forum_post() { - global $DB; - - $this->resetAfterTest(true); - - // Create a bunch of users - $user1 = self::getDataGenerator()->create_user(); - $user2 = self::getDataGenerator()->create_user(); - $user3 = self::getDataGenerator()->create_user(); - $user4 = self::getDataGenerator()->create_user(); - - // Create course to add the forum. - $course = self::getDataGenerator()->create_course(); - - // The forum. - $record = new stdClass(); - $record->course = $course->id; - $forum = self::getDataGenerator()->create_module('forum', $record); - - // Add a discussion. - $record->forum = $forum->id; - $record->userid = $user1->id; - $discussion = self::getDataGenerator()->create_forum_discussion($record); - - // Add a bunch of replies, changing the userid. - $record = new stdClass(); - $record->discussion = $discussion->id; - $record->userid = $user2->id; - self::getDataGenerator()->create_forum_post($record); - $record->userid = $user3->id; - self::getDataGenerator()->create_forum_post($record); - $record->userid = $user4->id; - self::getDataGenerator()->create_forum_post($record); - - // Check the posts were correctly created, remember, when creating a discussion a post - // is generated as well, so we should have 4 posts, not 3. - $this->assertEquals(4, $DB->count_records_select('forum_posts', 'discussion = :discussion', - array('discussion' => $discussion->id))); - } } diff --git a/mod/forum/tests/externallib_test.php b/mod/forum/tests/externallib_test.php index fd04396ae09..904e6bed5d1 100644 --- a/mod/forum/tests/externallib_test.php +++ b/mod/forum/tests/externallib_test.php @@ -199,44 +199,44 @@ class mod_forum_external_testcase extends externallib_advanced_testcase { $record->course = $course1->id; $record->userid = $user1->id; $record->forum = $forum1->id; - $discussion1 = self::getDataGenerator()->create_forum_discussion($record); + $discussion1 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); $record = new stdClass(); $record->course = $course2->id; $record->userid = $user2->id; $record->forum = $forum2->id; - $discussion2 = self::getDataGenerator()->create_forum_discussion($record); + $discussion2 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); $record = new stdClass(); $record->course = $course2->id; $record->userid = $user2->id; $record->forum = $forum3->id; - $discussion3 = self::getDataGenerator()->create_forum_discussion($record); + $discussion3 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); // Add three replies to the discussion 1 from different users. $record = new stdClass(); $record->discussion = $discussion1->id; $record->parent = $discussion1->firstpost; $record->userid = $user2->id; - $discussion1reply1 = self::getDataGenerator()->create_forum_post($record); + $discussion1reply1 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); $record->parent = $discussion1reply1->id; $record->userid = $user3->id; - $discussion1reply2 = self::getDataGenerator()->create_forum_post($record); + $discussion1reply2 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); $record->userid = $user4->id; - $discussion1reply3 = self::getDataGenerator()->create_forum_post($record); + $discussion1reply3 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); // Add two replies to discussion 2 from different users. $record = new stdClass(); $record->discussion = $discussion2->id; $record->parent = $discussion2->firstpost; $record->userid = $user1->id; - $discussion2reply1 = self::getDataGenerator()->create_forum_post($record); + $discussion2reply1 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); $record->parent = $discussion2reply1->id; $record->userid = $user3->id; - $discussion2reply2 = self::getDataGenerator()->create_forum_post($record); + $discussion2reply2 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); // Check the forums were correctly created. $this->assertEquals(3, $DB->count_records_select('forum', 'id = :forum1 OR id = :forum2 OR id = :forum3', diff --git a/mod/forum/tests/generator/lib.php b/mod/forum/tests/generator/lib.php index 7f98768c4ed..384e0ec7c94 100644 --- a/mod/forum/tests/generator/lib.php +++ b/mod/forum/tests/generator/lib.php @@ -36,6 +36,28 @@ defined('MOODLE_INTERNAL') || die(); */ class mod_forum_generator extends testing_module_generator { + /** + * @var int keep track of how many forum discussions have been created. + */ + protected $forumdiscussioncount = 0; + + /** + * @var int keep track of how many forum posts have been created. + */ + protected $forumpostcount = 0; + + /** + * To be called from data reset code only, + * do not use in tests. + * @return void + */ + public function reset() { + $this->forumdiscussioncount = 0; + $this->forumpostcount = 0; + + parent::reset(); + } + /** * Create new forum module instance * @param array|stdClass $record @@ -86,4 +108,134 @@ class mod_forum_generator extends testing_module_generator { $id = forum_add_instance($record, null); return $this->post_add_instance($id, $record->coursemodule); } + + /** + * Function to create a dummy discussion. + * + * @param array|stdClass $record + * @return stdClass the discussion object + */ + public function create_discussion($record = null) { + global $DB; + + // Increment the forum discussion count. + $this->forumdiscussioncount++; + + $record = (array) $record; + + if (!isset($record['course'])) { + throw new coding_exception('course must be present in phpunit_util::create_discussion() $record'); + } + + if (!isset($record['forum'])) { + throw new coding_exception('forum must be present in phpunit_util::create_discussion() $record'); + } + + if (!isset($record['userid'])) { + throw new coding_exception('userid must be present in phpunit_util::create_discussion() $record'); + } + + if (!isset($record['name'])) { + $record['name'] = "Discussion " . $this->forumdiscussioncount; + } + + if (!isset($record['subject'])) { + $record['subject'] = "Subject for discussion " . $this->forumdiscussioncount; + } + + if (!isset($record['message'])) { + $record['message'] = html_writer::tag('p', 'Message for discussion ' . $this->forumdiscussioncount); + } + + if (!isset($record['messageformat'])) { + $record['messageformat'] = editors_get_preferred_format(); + } + + if (!isset($record['messagetrust'])) { + $record['messagetrust'] = ""; + } + + if (!isset($record['assessed'])) { + $record['assessed'] = '1'; + } + + if (!isset($record['groupid'])) { + $record['groupid'] = "-1"; + } + + if (!isset($record['timestart'])) { + $record['timestart'] = "0"; + } + + if (!isset($record['timeend'])) { + $record['timeend'] = "0"; + } + + if (!isset($record['mailnow'])) { + $record['mailnow'] = "0"; + } + + $record = (object) $record; + + // Add the discussion. + $record->id = forum_add_discussion($record, null, null, $record->userid); + + return $record; + } + + /** + * Function to create a dummy post. + * + * @param array|stdClass $record + * @return stdClass the post object + */ + public function create_post($record = null) { + global $DB; + + // Increment the forum post count. + $this->forumpostcount++; + + // Variable to store time. + $time = time() + $this->forumpostcount; + + $record = (array) $record; + + if (!isset($record['discussion'])) { + throw new coding_exception('discussion must be present in phpunit_util::create_post() $record'); + } + + if (!isset($record['userid'])) { + throw new coding_exception('userid must be present in phpunit_util::create_post() $record'); + } + + if (!isset($record['parent'])) { + $record['parent'] = 0; + } + + if (!isset($record['subject'])) { + $record['subject'] = 'Forum post subject ' . $this->forumpostcount; + } + + if (!isset($record['message'])) { + $record['message'] = html_writer::tag('p', 'Forum message post ' . $this->forumpostcount); + } + + if (!isset($record['created'])) { + $record['created'] = $time; + } + + if (!isset($record['modified'])) { + $record['modified'] = $time; + } + + $record = (object) $record; + + // Add the post. + $record->id = $DB->insert_record('forum_posts', $record); + + // Update the last post. + forum_discussion_update_last_post($record->discussion); + + return $record; + } } diff --git a/mod/forum/tests/generator_test.php b/mod/forum/tests/generator_test.php index f1843d1c4bc..bf074b56293 100644 --- a/mod/forum/tests/generator_test.php +++ b/mod/forum/tests/generator_test.php @@ -70,4 +70,80 @@ class mod_forum_generator_testcase extends advanced_testcase { $this->assertEquals(0, $gitem->grademin); $this->assertEquals(GRADE_TYPE_VALUE, $gitem->gradetype); } + + /** + * Test create_discussion. + */ + public function test_create_discussion() { + global $DB; + + $this->resetAfterTest(true); + + // User that will create the forum. + $user = self::getDataGenerator()->create_user(); + + // Create course to add the forum to. + $course = self::getDataGenerator()->create_course(); + + // The forum. + $record = new stdClass(); + $record->course = $course->id; + $forum = self::getDataGenerator()->create_module('forum', $record); + + // Add a few discussions. + $record = array(); + $record['course'] = $course->id; + $record['forum'] = $forum->id; + $record['userid'] = $user->id; + self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); + self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); + self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); + + // Check the discussions were correctly created. + $this->assertEquals(3, $DB->count_records_select('forum_discussions', 'forum = :forum', + array('forum' => $forum->id))); + } + + /** + * Test create_post. + */ + public function test_create_post() { + global $DB; + + $this->resetAfterTest(true); + + // Create a bunch of users + $user1 = self::getDataGenerator()->create_user(); + $user2 = self::getDataGenerator()->create_user(); + $user3 = self::getDataGenerator()->create_user(); + $user4 = self::getDataGenerator()->create_user(); + + // Create course to add the forum. + $course = self::getDataGenerator()->create_course(); + + // The forum. + $record = new stdClass(); + $record->course = $course->id; + $forum = self::getDataGenerator()->create_module('forum', $record); + + // Add a discussion. + $record->forum = $forum->id; + $record->userid = $user1->id; + $discussion = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); + + // Add a bunch of replies, changing the userid. + $record = new stdClass(); + $record->discussion = $discussion->id; + $record->userid = $user2->id; + self::getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); + $record->userid = $user3->id; + self::getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); + $record->userid = $user4->id; + self::getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); + + // Check the posts were correctly created, remember, when creating a discussion a post + // is generated as well, so we should have 4 posts, not 3. + $this->assertEquals(4, $DB->count_records_select('forum_posts', 'discussion = :discussion', + array('discussion' => $discussion->id))); + } }