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/>.

/**
 * @package    core_grades
 * @category   phpunit
 * @copyright  nicolas@moodle.com
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

defined('MOODLE_INTERNAL') || die();

global $CFG;
require_once($CFG->libdir . '/adminlib.php');
require_once($CFG->libdir . '/gradelib.php');


/**
 * Shared code for all grade related tests.
 *
 * Here is a brief explanation of the test data set up in these unit tests.
 * category1 => array(category2 => array(grade_item1, grade_item2), category3 => array(grade_item3))
 * 3 users for 3 grade_items
 */
abstract class grade_base_testcase extends advanced_testcase {

    protected $course;
    protected $activities = array();
    protected $grade_items = array();
    protected $grade_categories = array();
    protected $grade_grades = array();
    protected $grade_outcomes = array();
    protected $scale = array();
    protected $scalemax = array();

    protected $courseid;
    protected $userid;

> /** @var array user object collection. */ protected function setUp(): void { > protected $user = []; global $CFG; > parent::setup(); > /** @var array module object collection. */ > protected $course_module = []; $this->resetAfterTest(true); >
$CFG->grade_droplow = -1; $CFG->grade_keephigh = -1; $CFG->grade_aggregation = -1; $CFG->grade_aggregateonlygraded = -1; $CFG->grade_aggregateoutcomes = -1; $this->course = $this->getDataGenerator()->create_course(); $this->courseid = $this->course->id; $this->user[0] = $this->getDataGenerator()->create_user(); $this->user[1] = $this->getDataGenerator()->create_user(); $this->user[2] = $this->getDataGenerator()->create_user(); $this->user[3] = $this->getDataGenerator()->create_user(); $this->userid = $this->user[0]->id; $this->load_modules(); $this->load_scales(); $this->load_grade_categories(); $this->load_grade_items(); $this->load_grade_grades(); $this->load_grade_outcomes(); } private function load_modules() { $this->activities[0] = $this->getDataGenerator()->create_module('assign', array('course'=>$this->course->id)); $this->course_module[0] = get_coursemodule_from_instance('assign', $this->activities[0]->id); $this->activities[1] = $this->getDataGenerator()->create_module('assign', array('course'=>$this->course->id)); $this->course_module[1] = get_coursemodule_from_instance('assign', $this->activities[1]->id); $this->activities[2] = $this->getDataGenerator()->create_module('forum', array('course'=>$this->course->id)); $this->course_module[2] = get_coursemodule_from_instance('forum', $this->activities[2]->id); $this->activities[3] = $this->getDataGenerator()->create_module('page', array('course'=>$this->course->id)); $this->course_module[3] = get_coursemodule_from_instance('page', $this->activities[3]->id); $this->activities[4] = $this->getDataGenerator()->create_module('forum', array('course'=>$this->course->id)); $this->course_module[4] = get_coursemodule_from_instance('forum', $this->activities[4]->id); $this->activities[5] = $this->getDataGenerator()->create_module('forum', array('course'=>$this->course->id)); $this->course_module[5] = get_coursemodule_from_instance('forum', $this->activities[5]->id); $this->activities[6] = $this->getDataGenerator()->create_module('forum', array('course'=>$this->course->id)); $this->course_module[6] = get_coursemodule_from_instance('forum', $this->activities[6]->id); $this->activities[7] = $this->getDataGenerator()->create_module('quiz', array('course'=>$this->course->id)); $this->course_module[7] = get_coursemodule_from_instance('quiz', $this->activities[7]->id); } private function load_scales() { $scale = new stdClass(); $scale->name = 'unittestscale1'; $scale->courseid = $this->course->id; $scale->userid = $this->user[0]->id; $scale->scale = 'Way off topic, Not very helpful, Fairly neutral, Fairly helpful, Supportive, Some good information, Perfect answer!'; $scale->description = 'This scale defines some of qualities that make posts helpful within the Moodle help forums.\n Your feedback will help others see how their posts are being received.'; $this->scale[0] = $this->getDataGenerator()->create_scale($scale); $this->scalemax[0] = substr_count($scale->scale, ','); $scale = new stdClass(); $scale->name = 'unittestscale2'; $scale->courseid = $this->course->id; $scale->userid = $this->user[0]->id; $scale->scale = 'Distinction, Very Good, Good, Pass, Fail'; $scale->description = 'This scale is used to mark standard assignments.'; $this->scale[1] = $this->getDataGenerator()->create_scale($scale); $this->scalemax[1] = substr_count($scale->scale, ','); $scale = new stdClass(); $scale->name = 'unittestscale3'; $scale->courseid = $this->course->id; $scale->userid = $this->user[0]->id; $scale->scale = 'Loner, Contentious, Disinterested, Participative, Follower, Leader'; $scale->description = 'Describes the level of teamwork of a student.'; $temp = explode(',', $scale->scale); $scale->max = count($temp) -1; $this->scale[2] = $this->getDataGenerator()->create_scale($scale); $this->scalemax[2] = substr_count($scale->scale, ','); $scale = new stdClass(); $scale->name = 'unittestscale4'; $scale->courseid = $this->course->id; $scale->userid = $this->user[0]->id; $scale->scale = 'Does not understand theory, Understands theory but fails practice, Manages through, Excels'; $scale->description = 'Level of expertise at a technical task, with a theoretical framework.'; $temp = explode(',', $scale->scale); $scale->max = count($temp) -1; $this->scale[3] = $this->getDataGenerator()->create_scale($scale); $this->scalemax[3] = substr_count($scale->scale, ','); $scale = new stdClass(); $scale->name = 'unittestscale5'; $scale->courseid = $this->course->id; $scale->userid = $this->user[0]->id; $scale->scale = 'Insufficient, Acceptable, Excellent.'; $scale->description = 'Description of skills.'; $this->scale[4] = $this->getDataGenerator()->create_scale($scale); $this->scalemax[4] = substr_count($scale->scale, ','); } /** * Load grade_category data into the database, and adds the corresponding objects to this class' variable. * category structure: course category | +--------+-------------+-----------------------+ | | | unittestcategory1 level1category unittestcategory7 | | +--------+-------------+ +------------+---------------+ | | | | unittestcategory2 unittestcategory3 unittestcategory5 unittestcategory6 */ private function load_grade_categories() { global $DB; $course_category = grade_category::fetch_course_category($this->course->id); $grade_category = new stdClass(); $grade_category->fullname = 'unittestcategory1 &'; $grade_category->courseid = $this->course->id; $grade_category->aggregation = GRADE_AGGREGATE_MEAN; $grade_category->aggregateonlygraded = 1; $grade_category->keephigh = 0; $grade_category->droplow = 0; $grade_category->parent = $course_category->id; $grade_category->timecreated = time(); $grade_category->timemodified = time(); $grade_category->depth = 2; $grade_category->id = $DB->insert_record('grade_categories', $grade_category); $grade_category->path = '/'.$course_category->id.'/'.$grade_category->id.'/'; $DB->update_record('grade_categories', $grade_category); $this->grade_categories[0] = $grade_category; $grade_category = new stdClass(); $grade_category->fullname = 'unittestcategory2'; $grade_category->courseid = $this->course->id; $grade_category->aggregation = GRADE_AGGREGATE_MEAN; $grade_category->aggregateonlygraded = 1; $grade_category->keephigh = 0; $grade_category->droplow = 0; $grade_category->parent = $this->grade_categories[0]->id; $grade_category->timecreated = time(); $grade_category->timemodified = time(); $grade_category->depth = 3; $grade_category->id = $DB->insert_record('grade_categories', $grade_category); $grade_category->path = $this->grade_categories[0]->path.$grade_category->id.'/'; $DB->update_record('grade_categories', $grade_category); $this->grade_categories[1] = $grade_category; $grade_category = new stdClass(); $grade_category->fullname = 'unittestcategory3'; $grade_category->courseid = $this->course->id; $grade_category->aggregation = GRADE_AGGREGATE_MEAN; $grade_category->aggregateonlygraded = 1; $grade_category->keephigh = 0; $grade_category->droplow = 0; $grade_category->parent = $this->grade_categories[0]->id; $grade_category->timecreated = time(); $grade_category->timemodified = time(); $grade_category->depth = 3; $grade_category->id = $DB->insert_record('grade_categories', $grade_category); $grade_category->path = $this->grade_categories[0]->path.$grade_category->id.'/'; $DB->update_record('grade_categories', $grade_category); $this->grade_categories[2] = $grade_category; // A category with no parent, but grade_items as children. $grade_category = new stdClass(); $grade_category->fullname = 'level1category'; $grade_category->courseid = $this->course->id; $grade_category->aggregation = GRADE_AGGREGATE_MEAN; $grade_category->aggregateonlygraded = 1; $grade_category->keephigh = 0; $grade_category->droplow = 0; $grade_category->parent = $course_category->id; $grade_category->timecreated = time(); $grade_category->timemodified = time(); $grade_category->depth = 2; $grade_category->id = $DB->insert_record('grade_categories', $grade_category); $grade_category->path = '/'.$course_category->id.'/'.$grade_category->id.'/'; $DB->update_record('grade_categories', $grade_category); $this->grade_categories[3] = $grade_category; $grade_category = new stdClass(); $grade_category->fullname = 'unittestcategory7'; $grade_category->courseid = $this->course->id; $grade_category->aggregation = GRADE_AGGREGATE_MEAN; $grade_category->aggregateonlygraded = 1; $grade_category->keephigh = 0; $grade_category->droplow = 0; $grade_category->parent = $course_category->id; $grade_category->timecreated = time(); $grade_category->timemodified = time(); $grade_category->depth = 2; $grade_category->id = $DB->insert_record('grade_categories', $grade_category); $grade_category->path = '/'.$course_category->id.'/'.$grade_category->id.'/'; $DB->update_record('grade_categories', $grade_category); $this->grade_categories[4] = $grade_category; $grade_category = new stdClass(); $grade_category->fullname = 'unittestcategory5'; $grade_category->courseid = $this->course->id; $grade_category->aggregation = GRADE_AGGREGATE_MEAN; $grade_category->aggregateonlygraded = 1; $grade_category->keephigh = 0; $grade_category->droplow = 0; $grade_category->parent = $this->grade_categories[4]->id; $grade_category->timecreated = time(); $grade_category->timemodified = time(); $grade_category->depth = 3; $grade_category->id = $DB->insert_record('grade_categories', $grade_category); $grade_category->path = $this->grade_categories[4]->path.$grade_category->id.'/'; $DB->update_record('grade_categories', $grade_category); $this->grade_categories[5] = $grade_category; $grade_category = new stdClass(); $grade_category->fullname = 'unittestcategory6'; $grade_category->courseid = $this->course->id; $grade_category->aggregation = GRADE_AGGREGATE_MEAN; $grade_category->aggregateonlygraded = 1; $grade_category->keephigh = 0; $grade_category->droplow = 0; $grade_category->parent = $this->grade_categories[4]->id; $grade_category->timecreated = time(); $grade_category->timemodified = time(); $grade_category->depth = 3; $grade_category->id = $DB->insert_record('grade_categories', $grade_category); $grade_category->path = $this->grade_categories[4]->path.$grade_category->id.'/'; $DB->update_record('grade_categories', $grade_category); $this->grade_categories[6] = $grade_category; } /** * Load grade_item data into the database, and adds the corresponding objects to this class' variable. */ protected function load_grade_items() { global $DB; // Purge all items created by module generators. $DB->delete_records('grade_items', array('itemtype'=>'mod')); $course_category = grade_category::fetch_course_category($this->course->id); // id = 0 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->categoryid = $this->grade_categories[1]->id; $grade_item->itemname = 'unittestgradeitem1 &'; $grade_item->itemtype = 'mod'; $grade_item->itemmodule = $this->course_module[0]->modname; $grade_item->iteminstance = $this->course_module[0]->instance; $grade_item->gradetype = GRADE_TYPE_VALUE; $grade_item->grademin = 30; $grade_item->grademax = 110; $grade_item->itemnumber = 1; $grade_item->idnumber = 'item id 0'; $grade_item->iteminfo = 'Grade item 0 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 3; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[0] = $grade_item; // id = 1 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->categoryid = $this->grade_categories[1]->id; $grade_item->itemname = 'unittestgradeitem2'; $grade_item->itemtype = 'import'; $grade_item->itemmodule = $this->course_module[1]->modname; $grade_item->iteminstance = $this->course_module[1]->instance; $grade_item->calculation = '= ##gi'.$this->grade_items[0]->id.'## + 30 + [[item id 0]] - [[item id 0]]'; $grade_item->gradetype = GRADE_TYPE_VALUE; $grade_item->itemnumber = null; $grade_item->grademin = 0; $grade_item->grademax = 100; $grade_item->iteminfo = 'Grade item 1 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 4; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[1] = $grade_item; // id = 2 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->categoryid = $this->grade_categories[2]->id; $grade_item->itemname = 'unittestgradeitem3'; $grade_item->itemtype = 'mod'; $grade_item->itemmodule = $this->course_module[2]->modname; $grade_item->iteminstance = $this->course_module[2]->instance; $grade_item->gradetype = GRADE_TYPE_SCALE; $grade_item->scaleid = $this->scale[0]->id; $grade_item->grademin = 0; $grade_item->grademax = $this->scalemax[0]; $grade_item->iteminfo = 'Grade item 2 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 6; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[2] = $grade_item; // Load grade_items associated with the 3 categories. // id = 3 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->iteminstance = $this->grade_categories[0]->id; $grade_item->itemname = 'unittestgradeitemcategory1'; $grade_item->needsupdate = 0; $grade_item->itemtype = 'category'; $grade_item->gradetype = GRADE_TYPE_VALUE; $grade_item->grademin = 0; $grade_item->grademax = 100; $grade_item->iteminfo = 'Grade item 3 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 1; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[3] = $grade_item; // id = 4 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->iteminstance = $this->grade_categories[1]->id; $grade_item->itemname = 'unittestgradeitemcategory2'; $grade_item->itemtype = 'category'; $grade_item->gradetype = GRADE_TYPE_VALUE; $grade_item->needsupdate = 0; $grade_item->grademin = 0; $grade_item->grademax = 100; $grade_item->iteminfo = 'Grade item 4 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 2; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[4] = $grade_item; // id = 5 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->iteminstance = $this->grade_categories[2]->id; $grade_item->itemname = 'unittestgradeitemcategory3'; $grade_item->itemtype = 'category'; $grade_item->gradetype = GRADE_TYPE_VALUE; $grade_item->needsupdate = true; $grade_item->grademin = 0; $grade_item->grademax = 100; $grade_item->iteminfo = 'Grade item 5 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 5; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[5] = $grade_item; // Orphan grade_item. // id = 6 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->categoryid = $course_category->id; $grade_item->itemname = 'unittestorphangradeitem1'; $grade_item->itemtype = 'mod'; $grade_item->itemmodule = $this->course_module[4]->modname; $grade_item->iteminstance = $this->course_module[4]->instance; $grade_item->itemnumber = 0; $grade_item->gradetype = GRADE_TYPE_VALUE; $grade_item->grademin = 10; $grade_item->grademax = 120; $grade_item->locked = time(); $grade_item->iteminfo = 'Orphan Grade 6 item used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 7; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[6] = $grade_item; // 2 grade items under level1category. // id = 7 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->categoryid = $this->grade_categories[3]->id; $grade_item->itemname = 'singleparentitem1'; $grade_item->itemtype = 'mod'; $grade_item->itemmodule = $this->course_module[5]->modname; $grade_item->iteminstance = $this->course_module[5]->instance; $grade_item->gradetype = GRADE_TYPE_SCALE; $grade_item->scaleid = $this->scale[0]->id; $grade_item->grademin = 0; $grade_item->grademax = $this->scalemax[0]; $grade_item->iteminfo = 'Grade item 7 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 9; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[7] = $grade_item; // id = 8 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->categoryid = $this->grade_categories[3]->id; $grade_item->itemname = 'singleparentitem2'; $grade_item->itemtype = 'mod'; $grade_item->itemmodule = $this->course_module[6]->modname; $grade_item->iteminstance = $this->course_module[6]->instance; $grade_item->gradetype = GRADE_TYPE_VALUE; $grade_item->grademin = 0; $grade_item->grademax = 100; $grade_item->iteminfo = 'Grade item 8 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 10; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[8] = $grade_item; // Grade_item for level1category. // id = 9 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->itemname = 'grade_item for level1 category'; $grade_item->itemtype = 'category'; $grade_item->iteminstance = $this->grade_categories[3]->id; $grade_item->needsupdate = true; $grade_item->gradetype = GRADE_TYPE_VALUE; $grade_item->grademin = 0; $grade_item->grademax = 100; $grade_item->iteminfo = 'Orphan Grade item 9 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 8; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[9] = $grade_item; // Manual grade_item. // id = 10 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->categoryid = $course_category->id; $grade_item->itemname = 'manual grade_item'; $grade_item->itemtype = 'manual'; $grade_item->itemnumber = 0; $grade_item->needsupdate = false; $grade_item->gradetype = GRADE_TYPE_VALUE; $grade_item->grademin = 0; $grade_item->grademax = 100; $grade_item->iteminfo = 'Manual grade item 10 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 10; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[10] = $grade_item; // Quiz grade_item (course_module = 7). // id = 11 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->categoryid = $course_category->id; $grade_item->itemname = 'Quiz grade item'; $grade_item->itemtype = 'mod'; $grade_item->itemmodule = $this->course_module[7]->modname; $grade_item->iteminstance = $this->course_module[7]->instance; $grade_item->itemnumber = 0; $grade_item->gradetype = GRADE_TYPE_VALUE; $grade_item->grademin = 0; $grade_item->grademax = 100; $grade_item->locked = 0; $grade_item->iteminfo = 'Quiz grade item used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 11; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[11] = $grade_item; // id = 12 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->iteminstance = $this->grade_categories[4]->id; $grade_item->itemname = 'unittestgradeitemcategory7'; $grade_item->itemtype = 'category'; $grade_item->gradetype = GRADE_TYPE_VALUE; $grade_item->needsupdate = true; $grade_item->grademin = 0; $grade_item->grademax = 100; $grade_item->iteminfo = 'Grade item 12 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 12; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[12] = $grade_item; // id = 13 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->iteminstance = $this->grade_categories[5]->id; $grade_item->itemname = 'unittestgradeitemcategory5'; $grade_item->itemtype = 'category'; $grade_item->gradetype = GRADE_TYPE_VALUE; $grade_item->needsupdate = true; $grade_item->grademin = 0; $grade_item->grademax = 100; $grade_item->iteminfo = 'Grade item 13 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 13; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[13] = $grade_item; // id = 14 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->iteminstance = $this->grade_categories[6]->id; $grade_item->itemname = 'unittestgradeitemcategory6'; $grade_item->itemtype = 'category'; $grade_item->gradetype = GRADE_TYPE_VALUE; $grade_item->needsupdate = true; $grade_item->grademin = 0; $grade_item->grademax = 100; $grade_item->iteminfo = 'Grade item 14 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 14; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[14] = $grade_item; // Manual grade_item // id = 15 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->categoryid = $this->grade_categories[5]->id; $grade_item->itemname = 'manual grade_item'; $grade_item->itemtype = 'manual'; $grade_item->itemnumber = 0; $grade_item->needsupdate = false; $grade_item->gradetype = GRADE_TYPE_VALUE; $grade_item->grademin = 0; $grade_item->grademax = 100; $grade_item->iteminfo = 'Manual grade item 15 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 15; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[15] = $grade_item; // Manual grade_item // id = 16 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->categoryid = $this->grade_categories[6]->id; $grade_item->itemname = 'manual grade_item'; $grade_item->itemtype = 'manual'; $grade_item->itemnumber = 0; $grade_item->needsupdate = false; $grade_item->gradetype = GRADE_TYPE_SCALE; $grade_item->grademin = 0; $grade_item->grademax = 100; $grade_item->iteminfo = 'Manual grade item 16 used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->sortorder = 16; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[16] = $grade_item; // $this->grade_items[17] loaded in load_grade_outcomes() in order to use an outcome id. } /** * Load grade_grades data into the database, and adds the corresponding objects to this class' variable. */ private function load_grade_grades() { global $DB; // This method is called once for each test method. Avoid adding things to $this->grade_grades multiple times. $this->grade_grades = array(); // Grades for grade_item 1. $grade = new stdClass(); $grade->itemid = $this->grade_items[0]->id; $grade->userid = $this->user[1]->id; $grade->rawgrade = 15; // too small $grade->finalgrade = 30; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '1 of 17 grade_grades'; $grade->informationformat = FORMAT_PLAIN; $grade->feedback = 'Good, but not good enough..'; $grade->feedbackformat = FORMAT_PLAIN; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[0] = $grade; $grade = new stdClass(); $grade->itemid = $this->grade_items[0]->id; $grade->userid = $this->user[2]->id; $grade->rawgrade = 40; $grade->finalgrade = 40; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '2 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[1] = $grade; $grade = new stdClass(); $grade->itemid = $this->grade_items[0]->id; $grade->userid = $this->user[3]->id; $grade->rawgrade = 170; // too big $grade->finalgrade = 110; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '3 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[2] = $grade; // No raw grades for grade_item 2 - it is calculated. $grade = new stdClass(); $grade->itemid = $this->grade_items[1]->id; $grade->userid = $this->user[1]->id; $grade->finalgrade = 60; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '4 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[3] = $grade; $grade = new stdClass(); $grade->itemid = $this->grade_items[1]->id; $grade->userid = $this->user[2]->id; $grade->finalgrade = 70; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '5 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[4] = $grade; $grade = new stdClass(); $grade->itemid = $this->grade_items[1]->id; $grade->userid = $this->user[3]->id; $grade->finalgrade = 100; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '6 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[5] = $grade; // Grades for grade_item 3. $grade = new stdClass(); $grade->itemid = $this->grade_items[2]->id; $grade->userid = $this->user[1]->id; $grade->rawgrade = 2; $grade->finalgrade = 6; $grade->scaleid = $this->scale[3]->id; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '7 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[6] = $grade; $grade = new stdClass(); $grade->itemid = $this->grade_items[2]->id; $grade->userid = $this->user[2]->id; $grade->rawgrade = 3; $grade->finalgrade = 2; $grade->scaleid = $this->scale[3]->id; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '8 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[] = $grade; $grade = new stdClass(); $grade->itemid = $this->grade_items[2]->id; $grade->userid = $this->user[3]->id; $grade->rawgrade = 1; $grade->finalgrade = 3; $grade->scaleid = $this->scale[3]->id; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '9 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[] = $grade; // Grades for grade_item 7. $grade = new stdClass(); $grade->itemid = $this->grade_items[6]->id; $grade->userid = $this->user[1]->id; $grade->rawgrade = 97; $grade->finalgrade = 69; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '10 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[] = $grade; $grade = new stdClass(); $grade->itemid = $this->grade_items[6]->id; $grade->userid = $this->user[2]->id; $grade->rawgrade = 49; $grade->finalgrade = 87; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '11 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[] = $grade; $grade = new stdClass(); $grade->itemid = $this->grade_items[6]->id; $grade->userid = $this->user[3]->id; $grade->rawgrade = 67; $grade->finalgrade = 94; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '12 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[] = $grade; // Grades for grade_item 8. $grade = new stdClass(); $grade->itemid = $this->grade_items[7]->id; $grade->userid = $this->user[2]->id; $grade->rawgrade = 3; $grade->finalgrade = 3; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '13 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[] = $grade; $grade = new stdClass(); $grade->itemid = $this->grade_items[7]->id; $grade->userid = $this->user[3]->id; $grade->rawgrade = 6; $grade->finalgrade = 6; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '14 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[] = $grade; // Grades for grade_item 9. $grade = new stdClass(); $grade->itemid = $this->grade_items[8]->id; $grade->userid = $this->user[1]->id; $grade->rawgrade = 20; $grade->finalgrade = 20; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '15 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[] = $grade; $grade = new stdClass(); $grade->itemid = $this->grade_items[8]->id; $grade->userid = $this->user[2]->id; $grade->rawgrade = 50; $grade->finalgrade = 50; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '16 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[] = $grade; $grade = new stdClass(); $grade->itemid = $this->grade_items[8]->id; $grade->userid = $this->user[3]->id; $grade->rawgrade = 100; $grade->finalgrade = 100; $grade->timecreated = time(); $grade->timemodified = time(); $grade->information = '17 of 17 grade_grades'; $grade->id = $DB->insert_record('grade_grades', $grade); $this->grade_grades[] = $grade; } /** * Load grade_outcome data into the database, and adds the corresponding objects to this class' variable. */ private function load_grade_outcomes() { global $DB; // This method is called once for each test method. Avoid adding things to $this->grade_outcomes multiple times. $this->grade_outcomes = array(); // Calculation for grade_item 1. $grade_outcome = new stdClass(); $grade_outcome->fullname = 'Team work'; $grade_outcome->shortname = 'Team work'; $grade_outcome->fullname = 'Team work outcome'; $grade_outcome->timecreated = time(); $grade_outcome->timemodified = time(); $grade_outcome->scaleid = $this->scale[2]->id; $grade_outcome->id = $DB->insert_record('grade_outcomes', $grade_outcome); $this->grade_outcomes[] = $grade_outcome; // Calculation for grade_item 2. $grade_outcome = new stdClass(); $grade_outcome->fullname = 'Complete circuit board'; $grade_outcome->shortname = 'Complete circuit board'; $grade_outcome->fullname = 'Complete circuit board'; $grade_outcome->timecreated = time(); $grade_outcome->timemodified = time(); $grade_outcome->scaleid = $this->scale[3]->id; $grade_outcome->id = $DB->insert_record('grade_outcomes', $grade_outcome); $this->grade_outcomes[] = $grade_outcome; // Calculation for grade_item 3. $grade_outcome = new stdClass(); $grade_outcome->fullname = 'Debug Java program'; $grade_outcome->shortname = 'Debug Java program'; $grade_outcome->fullname = 'Debug Java program'; $grade_outcome->timecreated = time(); $grade_outcome->timemodified = time(); $grade_outcome->scaleid = $this->scale[4]->id; $grade_outcome->id = $DB->insert_record('grade_outcomes', $grade_outcome); $this->grade_outcomes[] = $grade_outcome; // Manual grade_item with outcome // id = 17 $grade_item = new stdClass(); $grade_item->courseid = $this->course->id; $grade_item->categoryid = $this->grade_categories[6]->id; $grade_item->itemname = 'manual grade_item'; $grade_item->itemtype = 'manual'; $grade_item->itemnumber = 0; $grade_item->needsupdate = false; $grade_item->gradetype = GRADE_TYPE_SCALE; $grade_item->grademin = 0; $grade_item->grademax = 100; $grade_item->iteminfo = 'Manual grade item 16 with outcome used for unit testing'; $grade_item->timecreated = time(); $grade_item->timemodified = time(); $grade_item->outcomeid = $this->grade_outcomes[2]->id; $grade_item->sortorder = 17; $grade_item->id = $DB->insert_record('grade_items', $grade_item); $this->grade_items[17] = $grade_item; } } /** * Allow calling protected method. */ class test_grade_grade_flatten_dependencies_array extends grade_grade { public static function test_flatten_dependencies_array(&$a,&$b) { return self::flatten_dependencies_array($a, $b); } }