Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.
<?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 discussion entity tests. < * < * @package mod_forum < * @copyright 2019 Ryan Wyllie <ryan@moodle.com> < * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later < */ < < defined('MOODLE_INTERNAL') || die();
> namespace mod_forum;
use mod_forum\local\entities\discussion as discussion_entity; use mod_forum\local\entities\post as post_entity; /** * The discussion entity tests. * * @package mod_forum * @copyright 2019 Ryan Wyllie <ryan@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */
< class mod_forum_entities_discussion_testcase extends advanced_testcase {
> class entities_discussion_test extends \advanced_testcase {
/** * Test the entity returns expected values. */ public function test_entity() { $this->resetAfterTest(); // In the past to ensure the time started is true. $time = time() + 10; $discussion = new discussion_entity( 1, 2, 3, 'test discussion', 4, 5, 6, false, $time, $time, 0, 0, false, 0 ); $firstpost = new post_entity( 4, 1, 0, 1, time(), time(), true, 'post subject', 'post message', 1, true, false, 0, false, false, false, null, null ); $notfirstpost = new post_entity( 1, 1, 0, 1, time(), time(), true, 'post subject', 'post message', 1, true, false, 0, false, false, false, null, null ); $this->assertEquals(1, $discussion->get_id()); $this->assertEquals(2, $discussion->get_course_id()); $this->assertEquals(3, $discussion->get_forum_id()); $this->assertEquals('test discussion', $discussion->get_name()); $this->assertEquals(4, $discussion->get_first_post_id()); $this->assertEquals(5, $discussion->get_user_id()); $this->assertEquals(6, $discussion->get_group_id()); $this->assertEquals(false, $discussion->is_assessed()); $this->assertEquals($time, $discussion->get_time_modified()); $this->assertEquals($time, $discussion->get_user_modified()); $this->assertEquals(0, $discussion->get_time_start()); $this->assertEquals(0, $discussion->get_time_end()); $this->assertEquals(false, $discussion->is_pinned()); $this->assertEquals(true, $discussion->is_first_post($firstpost)); $this->assertEquals(false, $discussion->is_first_post($notfirstpost)); $this->assertEquals(true, $discussion->has_started()); $this->assertEquals(true, $discussion->has_group()); } /** * Test the display period settings for discussions. * This covers each individual date function as well as the combination of the 2. * * @dataProvider diplay_period_options_provider * @param string $testdescription A basic description of the base assertions. * @param int $startoffset Start time offset with current time in seconds. * @param int $endoffset End time offset with current time in seconds. * @param bool $timestartresult Expected result from the has_started function * @param bool $timeendresult Expected result from the has_ended function * @param bool $isvisible Expected result from the is_timed_discussion_visible function */ public function test_display_period_settings($testdescription, $startoffset, $endoffset, $timestartresult, $timeendresult, $isvisible) { global $CFG; $this->resetAfterTest(); $basetime = time(); $starttime = $startoffset != 0 ? $basetime + $startoffset : 0; $endtime = $endoffset != 0 ? $basetime + $endoffset : 0; $discussion = new discussion_entity( 1, 2, 3, 'test discussion', 4, 5, 6, false, $basetime, $basetime, $starttime, $endtime, false, 0 ); $CFG->forum_enabletimedposts = true; $this->assertEquals($timestartresult, $discussion->has_started(), $testdescription); $this->assertEquals($timeendresult, $discussion->has_ended(), $testdescription); $this->assertEquals($isvisible, $discussion->is_timed_discussion_visible(), $testdescription); } /** * Data provider for test_display_period_settings(). * * @return array start/end time offsets and the expected results. */ public function diplay_period_options_provider() { return array( ["No dates set", 0, 0, true, false, true], ["Only started date in the future", 100, 0, false, false, false], ["Only started date in the past", -100, 0, true, false, true], ["Only end date in the future", 0, 100, true, false, true], ["Only end date in the past", 0, -100, true, true, false], ["Start date in the past, end date in the future", -100, 100, true, false, true], ["Both dates in the past", -100, -50, true, true, false], ["Both dates in the future", 100, 150, false, false, false], ); } }