mirror of
https://github.com/moodle/moodle.git
synced 2025-08-06 09:26:35 +02:00

When different ID's are set for each sequence a number of unit test failures appear. They have been corrected to allow unit tests to pass with the new generator in place.
515 lines
23 KiB
PHP
515 lines
23 KiB
PHP
<?php
|
|
|
|
// This file is part of Moodle - http://moodle.org/
|
|
//
|
|
// Moodle is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// Moodle is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
/**
|
|
* The module forums external functions unit tests
|
|
*
|
|
* @package mod_forum
|
|
* @category external
|
|
* @copyright 2012 Mark Nelson <markn@moodle.com>
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
|
|
defined('MOODLE_INTERNAL') || die();
|
|
|
|
global $CFG;
|
|
|
|
require_once($CFG->dirroot . '/webservice/tests/helpers.php');
|
|
|
|
class mod_forum_external_testcase extends externallib_advanced_testcase {
|
|
|
|
/**
|
|
* Tests set up
|
|
*/
|
|
protected function setUp() {
|
|
global $CFG;
|
|
|
|
require_once($CFG->dirroot . '/mod/forum/externallib.php');
|
|
}
|
|
|
|
/**
|
|
* Test get forums
|
|
*/
|
|
public function test_mod_forum_get_forums_by_courses() {
|
|
global $USER, $CFG, $DB;
|
|
|
|
$this->resetAfterTest(true);
|
|
|
|
// Create a user.
|
|
$user = self::getDataGenerator()->create_user();
|
|
|
|
// Set to the user.
|
|
self::setUser($user);
|
|
|
|
// Create courses to add the modules.
|
|
$course1 = self::getDataGenerator()->create_course();
|
|
$course2 = self::getDataGenerator()->create_course();
|
|
|
|
// First forum.
|
|
$record = new stdClass();
|
|
$record->introformat = FORMAT_HTML;
|
|
$record->course = $course1->id;
|
|
$forum1 = self::getDataGenerator()->create_module('forum', $record);
|
|
|
|
// Second forum.
|
|
$record = new stdClass();
|
|
$record->introformat = FORMAT_HTML;
|
|
$record->course = $course2->id;
|
|
$forum2 = self::getDataGenerator()->create_module('forum', $record);
|
|
|
|
// Check the forum was correctly created.
|
|
$this->assertEquals(2, $DB->count_records_select('forum', 'id = :forum1 OR id = :forum2',
|
|
array('forum1' => $forum1->id, 'forum2' => $forum2->id)));
|
|
|
|
// Enrol the user in two courses.
|
|
// DataGenerator->enrol_user automatically sets a role for the user with the permission mod/form:viewdiscussion.
|
|
$this->getDataGenerator()->enrol_user($user->id, $course1->id, null, 'manual');
|
|
// Execute real Moodle enrolment as we'll call unenrol() method on the instance later.
|
|
$enrol = enrol_get_plugin('manual');
|
|
$enrolinstances = enrol_get_instances($course2->id, true);
|
|
foreach ($enrolinstances as $courseenrolinstance) {
|
|
if ($courseenrolinstance->enrol == "manual") {
|
|
$instance2 = $courseenrolinstance;
|
|
break;
|
|
}
|
|
}
|
|
$enrol->enrol_user($instance2, $user->id);
|
|
|
|
// Assign capabilities to view forums for forum 2.
|
|
$cm2 = get_coursemodule_from_id('forum', $forum2->cmid, 0, false, MUST_EXIST);
|
|
$context2 = context_module::instance($cm2->id);
|
|
$newrole = create_role('Role 2', 'role2', 'Role 2 description');
|
|
$roleid2 = $this->assignUserCapability('mod/forum:viewdiscussion', $context2->id, $newrole);
|
|
|
|
// Create what we expect to be returned when querying the two courses.
|
|
$expectedforums = array();
|
|
$expectedforums[$forum1->id] = (array) $forum1;
|
|
$expectedforums[$forum2->id] = (array) $forum2;
|
|
|
|
// Call the external function passing course ids.
|
|
$forums = mod_forum_external::get_forums_by_courses(array($course1->id, $course2->id));
|
|
external_api::clean_returnvalue(mod_forum_external::get_forums_by_courses_returns(), $forums);
|
|
$this->assertEquals($expectedforums, $forums);
|
|
|
|
// Call the external function without passing course id.
|
|
$forums = mod_forum_external::get_forums_by_courses();
|
|
external_api::clean_returnvalue(mod_forum_external::get_forums_by_courses_returns(), $forums);
|
|
$this->assertEquals($expectedforums, $forums);
|
|
|
|
// Unenrol user from second course and alter expected forums.
|
|
$enrol->unenrol_user($instance2, $user->id);
|
|
unset($expectedforums[$forum2->id]);
|
|
|
|
// Call the external function without passing course id.
|
|
$forums = mod_forum_external::get_forums_by_courses();
|
|
external_api::clean_returnvalue(mod_forum_external::get_forums_by_courses_returns(), $forums);
|
|
$this->assertEquals($expectedforums, $forums);
|
|
|
|
// Call for the second course we unenrolled the user from, ensure exception thrown.
|
|
try {
|
|
mod_forum_external::get_forums_by_courses(array($course2->id));
|
|
$this->fail('Exception expected due to being unenrolled from the course.');
|
|
} catch (moodle_exception $e) {
|
|
$this->assertEquals('requireloginerror', $e->errorcode);
|
|
}
|
|
|
|
// Call without required capability, ensure exception thrown.
|
|
$this->unassignUserCapability('mod/forum:viewdiscussion', null, null, $course1->id);
|
|
try {
|
|
$forums = mod_forum_external::get_forums_by_courses(array($course1->id));
|
|
$this->fail('Exception expected due to missing capability.');
|
|
} catch (moodle_exception $e) {
|
|
$this->assertEquals('nopermissions', $e->errorcode);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test get forum discussions
|
|
*/
|
|
public function test_mod_forum_get_forum_discussions() {
|
|
global $USER, $CFG, $DB;
|
|
|
|
$this->resetAfterTest(true);
|
|
|
|
// Set the CFG variable to allow track forums.
|
|
$CFG->forum_trackreadposts = true;
|
|
|
|
// Create a user who can track forums.
|
|
$record = new stdClass();
|
|
$record->trackforums = true;
|
|
$user1 = self::getDataGenerator()->create_user($record);
|
|
// Create a bunch of other users to post.
|
|
$user2 = self::getDataGenerator()->create_user();
|
|
$user3 = self::getDataGenerator()->create_user();
|
|
$user4 = self::getDataGenerator()->create_user();
|
|
|
|
// Set the first created user to the test user.
|
|
self::setUser($user1);
|
|
|
|
// Create courses to add the modules.
|
|
$course1 = self::getDataGenerator()->create_course();
|
|
$course2 = self::getDataGenerator()->create_course();
|
|
|
|
// First forum with tracking off.
|
|
$record = new stdClass();
|
|
$record->course = $course1->id;
|
|
$record->trackingtype = FORUM_TRACKING_OFF;
|
|
$forum1 = self::getDataGenerator()->create_module('forum', $record);
|
|
|
|
// Second forum of type 'qanda' with tracking enabled.
|
|
$record = new stdClass();
|
|
$record->course = $course2->id;
|
|
$record->type = 'qanda';
|
|
$record->trackingtype = FORUM_TRACKING_FORCED;
|
|
$forum2 = self::getDataGenerator()->create_module('forum', $record);
|
|
|
|
// Third forum where we will only have one discussion with no replies.
|
|
$record = new stdClass();
|
|
$record->course = $course2->id;
|
|
$forum3 = self::getDataGenerator()->create_module('forum', $record);
|
|
|
|
// Add discussions to the forums.
|
|
$record = new stdClass();
|
|
$record->course = $course1->id;
|
|
$record->userid = $user1->id;
|
|
$record->forum = $forum1->id;
|
|
$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()->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()->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()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$record->parent = $discussion1reply1->id;
|
|
$record->userid = $user3->id;
|
|
$discussion1reply2 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$record->userid = $user4->id;
|
|
$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()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$record->parent = $discussion2reply1->id;
|
|
$record->userid = $user3->id;
|
|
$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',
|
|
array('forum1' => $forum1->id, 'forum2' => $forum2->id, 'forum3' => $forum3->id)));
|
|
|
|
// Check the discussions were correctly created.
|
|
$this->assertEquals(3, $DB->count_records_select('forum_discussions', 'forum = :forum1 OR forum = :forum2
|
|
OR forum = :forum3', array('forum1' => $forum1->id, 'forum2' => $forum2->id, 'forum3' => $forum3->id)));
|
|
|
|
// Check the posts were correctly created, don't forget each discussion created also creates a post.
|
|
$this->assertEquals(7, $DB->count_records_select('forum_posts', 'discussion = :discussion1 OR discussion = :discussion2',
|
|
array('discussion1' => $discussion1->id, 'discussion2' => $discussion2->id)));
|
|
|
|
// Enrol the user in the first course.
|
|
$enrol = enrol_get_plugin('manual');
|
|
// Following line enrol and assign default role id to the user.
|
|
// So the user automatically gets mod/forum:viewdiscussion on all forums of the course.
|
|
$this->getDataGenerator()->enrol_user($user1->id, $course1->id);
|
|
|
|
// Now enrol into the second course.
|
|
// We don't use the dataGenerator as we need to get the $instance2 to unenrol later.
|
|
$enrolinstances = enrol_get_instances($course2->id, true);
|
|
foreach ($enrolinstances as $courseenrolinstance) {
|
|
if ($courseenrolinstance->enrol == "manual") {
|
|
$instance2 = $courseenrolinstance;
|
|
break;
|
|
}
|
|
}
|
|
$enrol->enrol_user($instance2, $user1->id);
|
|
|
|
// Assign capabilities to view discussions for forum 2.
|
|
$cm = get_coursemodule_from_id('forum', $forum2->cmid, 0, false, MUST_EXIST);
|
|
$context = context_module::instance($cm->id);
|
|
$newrole = create_role('Role 2', 'role2', 'Role 2 description');
|
|
$this->assignUserCapability('mod/forum:viewdiscussion', $context->id, $newrole);
|
|
|
|
// Assign capabilities to view discussions for forum 3.
|
|
$cm = get_coursemodule_from_id('forum', $forum3->cmid, 0, false, MUST_EXIST);
|
|
$context = context_module::instance($cm->id);
|
|
$this->assignUserCapability('mod/forum:viewdiscussion', $context->id, $newrole);
|
|
|
|
// Create what we expect to be returned when querying the forums.
|
|
$expecteddiscussions = array();
|
|
$expecteddiscussions[$discussion1->id] = array(
|
|
'id' => $discussion1->id,
|
|
'course' => $discussion1->course,
|
|
'forum' => $discussion1->forum,
|
|
'name' => $discussion1->name,
|
|
'firstpost' => $discussion1->firstpost,
|
|
'userid' => $discussion1->userid,
|
|
'groupid' => $discussion1->groupid,
|
|
'assessed' => $discussion1->assessed,
|
|
'timemodified' => $discussion1reply3->created,
|
|
'usermodified' => $discussion1reply3->userid,
|
|
'timestart' => $discussion1->timestart,
|
|
'timeend' => $discussion1->timeend,
|
|
'firstuserfullname' => fullname($user1),
|
|
'firstuserimagealt' => $user1->imagealt,
|
|
'firstuserpicture' => $user1->picture,
|
|
'firstuseremail' => $user1->email,
|
|
'subject' => $discussion1->name,
|
|
'numreplies' => 3,
|
|
'numunread' => '',
|
|
'lastpost' => $discussion1reply3->id,
|
|
'lastuserid' => $user4->id,
|
|
'lastuserfullname' => fullname($user4),
|
|
'lastuserimagealt' => $user4->imagealt,
|
|
'lastuserpicture' => $user4->picture,
|
|
'lastuseremail' => $user4->email
|
|
);
|
|
$expecteddiscussions[$discussion2->id] = array(
|
|
'id' => $discussion2->id,
|
|
'course' => $discussion2->course,
|
|
'forum' => $discussion2->forum,
|
|
'name' => $discussion2->name,
|
|
'firstpost' => $discussion2->firstpost,
|
|
'userid' => $discussion2->userid,
|
|
'groupid' => $discussion2->groupid,
|
|
'assessed' => $discussion2->assessed,
|
|
'timemodified' => $discussion2reply2->created,
|
|
'usermodified' => $discussion2reply2->userid,
|
|
'timestart' => $discussion2->timestart,
|
|
'timeend' => $discussion2->timeend,
|
|
'firstuserfullname' => fullname($user2),
|
|
'firstuserimagealt' => $user2->imagealt,
|
|
'firstuserpicture' => $user2->picture,
|
|
'firstuseremail' => $user2->email,
|
|
'subject' => $discussion2->name,
|
|
'numreplies' => 2,
|
|
'numunread' => 3,
|
|
'lastpost' => $discussion2reply2->id,
|
|
'lastuserid' => $user3->id,
|
|
'lastuserfullname' => fullname($user3),
|
|
'lastuserimagealt' => $user3->imagealt,
|
|
'lastuserpicture' => $user3->picture,
|
|
'lastuseremail' => $user3->email
|
|
);
|
|
$expecteddiscussions[$discussion3->id] = array(
|
|
'id' => $discussion3->id,
|
|
'course' => $discussion3->course,
|
|
'forum' => $discussion3->forum,
|
|
'name' => $discussion3->name,
|
|
'firstpost' => $discussion3->firstpost,
|
|
'userid' => $discussion3->userid,
|
|
'groupid' => $discussion3->groupid,
|
|
'assessed' => $discussion3->assessed,
|
|
'timemodified' => $discussion3->timemodified,
|
|
'usermodified' => $discussion3->usermodified,
|
|
'timestart' => $discussion3->timestart,
|
|
'timeend' => $discussion3->timeend,
|
|
'firstuserfullname' => fullname($user2),
|
|
'firstuserimagealt' => $user2->imagealt,
|
|
'firstuserpicture' => $user2->picture,
|
|
'firstuseremail' => $user2->email,
|
|
'subject' => $discussion3->name,
|
|
'numreplies' => 0,
|
|
'numunread' => 1,
|
|
'lastpost' => $discussion3->firstpost,
|
|
'lastuserid' => $user2->id,
|
|
'lastuserfullname' => fullname($user2),
|
|
'lastuserimagealt' => $user2->imagealt,
|
|
'lastuserpicture' => $user2->picture,
|
|
'lastuseremail' => $user2->email
|
|
);
|
|
|
|
// Call the external function passing forum ids.
|
|
$discussions = mod_forum_external::get_forum_discussions(array($forum1->id, $forum2->id, $forum3->id));
|
|
external_api::clean_returnvalue(mod_forum_external::get_forum_discussions_returns(), $discussions);
|
|
$this->assertEquals($expecteddiscussions, $discussions);
|
|
|
|
// Remove the users post from the qanda forum and ensure they can not return the discussion.
|
|
$DB->delete_records('forum_posts', array('id' => $discussion2reply1->id));
|
|
try {
|
|
mod_forum_external::get_forum_discussions(array($forum2->id));
|
|
$this->fail('Exception expected due to attempting to access qanda forum without posting.');
|
|
} catch (moodle_exception $e) {
|
|
$this->assertEquals('nopermissions', $e->errorcode);
|
|
}
|
|
|
|
// Call without required view discussion capability.
|
|
$this->unassignUserCapability('mod/forum:viewdiscussion', null, null, $course1->id);
|
|
try {
|
|
mod_forum_external::get_forum_discussions(array($forum1->id));
|
|
$this->fail('Exception expected due to missing capability.');
|
|
} catch (moodle_exception $e) {
|
|
$this->assertEquals('nopermissions', $e->errorcode);
|
|
}
|
|
|
|
// Unenrol user from second course.
|
|
$enrol->unenrol_user($instance2, $user1->id);
|
|
|
|
// Call for the second course we unenrolled the user from, make sure exception thrown.
|
|
try {
|
|
mod_forum_external::get_forum_discussions(array($forum2->id));
|
|
$this->fail('Exception expected due to being unenrolled from the course.');
|
|
} catch (moodle_exception $e) {
|
|
$this->assertEquals('requireloginerror', $e->errorcode);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test get forum posts
|
|
*/
|
|
public function test_mod_forum_get_forum_discussion_posts() {
|
|
global $CFG;
|
|
|
|
$this->resetAfterTest(true);
|
|
|
|
// Set the CFG variable to allow track forums.
|
|
$CFG->forum_trackreadposts = true;
|
|
|
|
// Create a user who can track forums.
|
|
$record = new stdClass();
|
|
$record->trackforums = true;
|
|
$user1 = self::getDataGenerator()->create_user($record);
|
|
// Create a bunch of other users to post.
|
|
$user2 = self::getDataGenerator()->create_user();
|
|
$user3 = self::getDataGenerator()->create_user();
|
|
|
|
// Set the first created user to the test user.
|
|
self::setUser($user1);
|
|
|
|
// Create course to add the module.
|
|
$course1 = self::getDataGenerator()->create_course();
|
|
|
|
// Forum with tracking off.
|
|
$record = new stdClass();
|
|
$record->course = $course1->id;
|
|
$record->trackingtype = FORUM_TRACKING_OFF;
|
|
$forum1 = self::getDataGenerator()->create_module('forum', $record);
|
|
$forum1context = context_module::instance($forum1->cmid);
|
|
|
|
// Add discussions to the forums.
|
|
$record = new stdClass();
|
|
$record->course = $course1->id;
|
|
$record->userid = $user1->id;
|
|
$record->forum = $forum1->id;
|
|
$discussion1 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
$record = new stdClass();
|
|
$record->course = $course1->id;
|
|
$record->userid = $user2->id;
|
|
$record->forum = $forum1->id;
|
|
$discussion2 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add 2 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()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$record->parent = $discussion1reply1->id;
|
|
$record->userid = $user3->id;
|
|
$discussion1reply2 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
// Enrol the user in the course.
|
|
$enrol = enrol_get_plugin('manual');
|
|
// Following line enrol and assign default role id to the user.
|
|
// So the user automatically gets mod/forum:viewdiscussion on all forums of the course.
|
|
$this->getDataGenerator()->enrol_user($user1->id, $course1->id);
|
|
$this->getDataGenerator()->enrol_user($user2->id, $course1->id);
|
|
$this->getDataGenerator()->enrol_user($user3->id, $course1->id);
|
|
|
|
// Create what we expect to be returned when querying the discussion.
|
|
$expectedposts = array(
|
|
'posts' => array(),
|
|
'warnings' => array(),
|
|
);
|
|
$expectedposts['posts'][] = array(
|
|
'id' => $discussion1reply2->id,
|
|
'discussion' => $discussion1reply2->discussion,
|
|
'parent' => $discussion1reply2->parent,
|
|
'userid' => $discussion1reply2->userid,
|
|
'created' => $discussion1reply2->created,
|
|
'modified' => $discussion1reply2->modified,
|
|
'mailed' => $discussion1reply2->mailed,
|
|
'subject' => $discussion1reply2->subject,
|
|
'message' => file_rewrite_pluginfile_urls($discussion1reply2->message, 'pluginfile.php',
|
|
$forum1context->id, 'mod_forum', 'post', $discussion1reply2->id),
|
|
'messageformat' => $discussion1reply2->messageformat,
|
|
'messagetrust' => $discussion1reply2->messagetrust,
|
|
'attachment' => $discussion1reply2->attachment,
|
|
'totalscore' => $discussion1reply2->totalscore,
|
|
'mailnow' => $discussion1reply2->mailnow,
|
|
'children' => array(),
|
|
'canreply' => true,
|
|
'postread' => false,
|
|
'userfullname' => fullname($user3)
|
|
);
|
|
$expectedposts['posts'][] = array(
|
|
'id' => $discussion1reply1->id,
|
|
'discussion' => $discussion1reply1->discussion,
|
|
'parent' => $discussion1reply1->parent,
|
|
'userid' => $discussion1reply1->userid,
|
|
'created' => $discussion1reply1->created,
|
|
'modified' => $discussion1reply1->modified,
|
|
'mailed' => $discussion1reply1->mailed,
|
|
'subject' => $discussion1reply1->subject,
|
|
'message' => file_rewrite_pluginfile_urls($discussion1reply1->message, 'pluginfile.php',
|
|
$forum1context->id, 'mod_forum', 'post', $discussion1reply1->id),
|
|
'messageformat' => $discussion1reply1->messageformat,
|
|
'messagetrust' => $discussion1reply1->messagetrust,
|
|
'attachment' => $discussion1reply1->attachment,
|
|
'totalscore' => $discussion1reply1->totalscore,
|
|
'mailnow' => $discussion1reply1->mailnow,
|
|
'children' => array($discussion1reply2->id),
|
|
'canreply' => true,
|
|
'postread' => false,
|
|
'userfullname' => fullname($user2)
|
|
);
|
|
|
|
// Test a discussion with two additional posts (total 3 posts).
|
|
$posts = mod_forum_external::get_forum_discussion_posts($discussion1->id, 'modified', 'DESC');
|
|
$posts = external_api::clean_returnvalue(mod_forum_external::get_forum_discussion_posts_returns(), $posts);
|
|
$this->assertEquals(3, count($posts['posts']));
|
|
|
|
// Unset the initial discussion post.
|
|
array_pop($posts['posts']);
|
|
$this->assertEquals($expectedposts, $posts);
|
|
|
|
// Test discussion without additional posts. There should be only one post (the one created by the discussion).
|
|
$posts = mod_forum_external::get_forum_discussion_posts($discussion2->id, 'modified', 'DESC');
|
|
$posts = external_api::clean_returnvalue(mod_forum_external::get_forum_discussion_posts_returns(), $posts);
|
|
$this->assertEquals(1, count($posts['posts']));
|
|
|
|
}
|
|
}
|