MDL-38581 move forum discussion and post generators to proper place

This commit is contained in:
Petr Škoda 2013-03-20 19:41:46 +01:00
parent 373a8e052c
commit c3f31a3ded
5 changed files with 236 additions and 226 deletions

View File

@ -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;
}
}
/**

View File

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

View File

@ -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',

View File

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

View File

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