-<?php // $Id$
-
-///////////////////////////////////////////////////////////////////////////
-// //
-// NOTICE OF COPYRIGHT //
-// //
-// Moodle - Modular Object-Oriented Dynamic Learning Environment //
-// http://moodle.org //
-// //
-// Copyright (C) 1999-2004 Martin Dougiamas http://dougiamas.com //
-// //
-// This program 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 2 of the License, or //
-// (at your option) any later version. //
-// //
-// This program 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: //
-// //
-// http://www.gnu.org/copyleft/gpl.html //
-// //
-///////////////////////////////////////////////////////////////////////////
-@set_time_limit(0);
-/**
- * Unit tests for grade_item object.
- *
- * @author nicolas@moodle.com
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package moodlecore
- */
-require_once(dirname(__FILE__) . '/../../../../config.php');
-global $CFG;
-require_once($CFG->libdir . '/simpletest/testgradelib.php');
-
-class grade_item_test extends gradelib_test {
-
- function test_grade_item_construct() {
- $params = new stdClass();
-
- $params->courseid = $this->courseid;
- $params->categoryid = $this->grade_categories[1]->id;
- $params->itemname = 'unittestgradeitem4';
- $params->itemtype = 'mod';
- $params->itemmodule = 'database';
- $params->iteminfo = 'Grade item used for unit testing';
-
- $grade_item = new grade_item($params, false);
-
- $this->assertEqual($params->courseid, $grade_item->courseid);
- $this->assertEqual($params->categoryid, $grade_item->categoryid);
- $this->assertEqual($params->itemmodule, $grade_item->itemmodule);
- }
-
- function test_grade_item_insert() {
- $grade_item = new grade_item();
- $this->assertTrue(method_exists($grade_item, 'insert'));
-
- $grade_item->courseid = $this->courseid;
- $grade_item->categoryid = $this->grade_categories[1]->id;
- $grade_item->itemname = 'unittestgradeitem4';
- $grade_item->itemtype = 'mod';
- $grade_item->itemmodule = 'quiz';
- $grade_item->iteminfo = 'Grade item used for unit testing';
-
- // Check the grade_category's needsupdate variable first
- $category = $grade_item->get_category();
- $category->load_grade_item();
- $category->grade_item->needsupdate = false;
- $this->assertNotNull($category->grade_item);
-
- $grade_item->insert();
-
- // Now check the needsupdate variable, it should have been set to true
- $category->grade_item->update_from_db();
- $this->assertTrue($category->grade_item->needsupdate);
-
- $last_grade_item = end($this->grade_items);
-
- $this->assertEqual($grade_item->id, $last_grade_item->id + 1);
- }
-
- function test_grade_item_delete() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'delete'));
-
- // Check the grade_category's needsupdate variable first
- $category = $grade_item->get_category();
- $category->load_grade_item();
- $this->assertNotNull($category->grade_item);
- $category->grade_item->needsupdate = false;
-
- $this->assertTrue($grade_item->delete());
-
- // Now check the needsupdate variable, it should have been set to true
- $category->grade_item->update_from_db();
- $this->assertTrue($category->grade_item->needsupdate);
-
- $this->assertFalse(get_record('grade_items', 'id', $grade_item->id));
- }
-
- function test_grade_item_update() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'update'));
-
- $grade_item->iteminfo = 'Updated info for this unittest grade_item';
-
- // Check the grade_category's needsupdate variable first
- $category= $grade_item->get_category();
- $category->load_grade_item();
- $this->assertNotNull($category->grade_item);
- $category->grade_item->needsupdate = false;
-
- $this->assertTrue($grade_item->update());
-
- // Now check the needsupdate variable, it should NOT have been set to true, because insufficient changes to justify update.
- $this->assertFalse($category->grade_item->needsupdate);
-
- $grade_item->grademin = 14;
- $this->assertTrue($grade_item->qualifies_for_update());
- $this->assertTrue($grade_item->update(true));
-
- // Now check the needsupdate variable, it should have been set to true
- $category->grade_item->update_from_db();
- $this->assertTrue($category->grade_item->needsupdate);
-
- // Also check parent
- $category->load_parent_category();
- $category->parent_category->load_grade_item();
- $this->assertTrue($category->parent_category->grade_item->needsupdate);
-
- $iteminfo = get_field('grade_items', 'iteminfo', 'id', $this->grade_items[0]->id);
- $this->assertEqual($grade_item->iteminfo, $iteminfo);
- }
-
- function test_grade_item_qualifies_for_update() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'qualifies_for_update'));
-
- $grade_item->iteminfo = 'Updated info for this unittest grade_item';
-
- $this->assertFalse($grade_item->qualifies_for_update());
-
- $grade_item->grademin = 14;
-
- $this->assertTrue($grade_item->qualifies_for_update());
- }
-
- function test_grade_item_fetch() {
- $grade_item = new grade_item();
- $this->assertTrue(method_exists($grade_item, 'fetch'));
-
- $grade_item = grade_item::fetch('id', $this->grade_items[0]->id);
- $this->assertEqual($this->grade_items[0]->id, $grade_item->id);
- $this->assertEqual($this->grade_items[0]->iteminfo, $grade_item->iteminfo);
-
- $grade_item = grade_item::fetch('itemtype', $this->grade_items[1]->itemtype, 'itemmodule', $this->grade_items[1]->itemmodule);
- $this->assertEqual($this->grade_items[1]->id, $grade_item->id);
- $this->assertEqual($this->grade_items[1]->iteminfo, $grade_item->iteminfo);
- }
-
- function test_grade_item_fetch_all_using_this() {
- $grade_item = new grade_item();
- $grade_item->itemtype = 'mod';
- $this->assertTrue(method_exists($grade_item, 'fetch_all_using_this'));
-
- $grade_items = $grade_item->fetch_all_using_this();
- $this->assertEqual(2, count($grade_items));
- $first_grade_item = reset($grade_items);
- $this->assertEqual($this->grade_items[0]->id, $first_grade_item->id);
- }
-
- /**
- * Retrieve all raw scores for a given grade_item.
- */
- function test_grade_item_get_all_raws() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'get_raw'));
-
- $raw_grades = $grade_item->get_raw();
- $this->assertEqual(3, count($raw_grades));
- }
-
- /**
- * Retrieve the raw score for a specific userid.
- */
- function test_grade_item_get_raw() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'get_raw'));
-
- $raw_grades = $grade_item->get_raw($this->userid);
- $raw_grade = current($raw_grades);
- $this->assertEqual(1, count($raw_grades));
- $this->assertEqual($this->grade_grades_raw[0]->gradevalue, $raw_grade->gradevalue);
- }
-
-
- /**
- * Retrieve all final scores for a given grade_item.
- */
- function test_grade_item_get_all_finals() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'get_final'));
-
- $final_grades = $grade_item->get_final();
- $this->assertEqual(3, count($final_grades));
- }
-
-
- /**
- * Retrieve all final scores for a specific userid.
- */
- function test_grade_item_get_final() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'get_final'));
-
- $final_grades = $grade_item->get_final($this->userid);
- $final_grade = current($final_grades);
- $this->assertEqual(1, count($final_grade));
- $this->assertEqual($this->grade_grades_final[0]->gradevalue, $final_grade->gradevalue);
- }
-
- function test_grade_item_get_calculation() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'get_calculation'));
-
- $grade_calculation = $grade_item->get_calculation();
- $this->assertEqual($this->grade_calculations[0]->id, $grade_calculation->id);
- }
-
- function test_grade_item_set_calculation() {
- $grade_item = new grade_item($this->grade_items[1]);
- $this->assertTrue(method_exists($grade_item, 'set_calculation'));
- $this->assertTrue(method_exists($grade_item, 'get_calculation'));
-
- $calculation = 'SUM([unittestgradeitem1], [unittestgradeitem3])';
- $grade_item->set_calculation($calculation);
- $new_calculation = $grade_item->get_calculation();
-
- $this->assertEqual($calculation, $new_calculation->calculation);
- }
-
- function test_grade_item_get_category() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'get_category'));
-
- $category = $grade_item->get_category();
- $this->assertEqual($this->grade_categories[1]->fullname, $category->fullname);
- }
-
- /**
- * Test update of all final grades, then only 1 grade (give a $userid)
- */
- function test_grade_item_update_final_grades() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'update_final_grade'));
- $this->assertEqual(3, $grade_item->update_final_grade());
- $this->assertEqual(1, $grade_item->update_final_grade(1));
- }
-
- /**
- * Test loading of raw and final items into grade_item.
- */
- function test_grade_item_load() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'load_final'));
- $this->assertTrue(method_exists($grade_item, 'load_raw'));
-
- // Check that final and raw items are not yet loaded
- $this->assertTrue(empty($grade_item->grade_grades_final));
- $this->assertTrue(empty($grade_item->grade_grades_raw));
-
- // Load raw and final grades
- $grade_item->load_final();
- $grade_item->load_raw();
-
- // Check that final and raw grades are now loaded
- $this->assertFalse(empty($grade_item->grade_grades_final));
- $this->assertFalse(empty($grade_item->grade_grades_raw));
- $this->assertEqual($this->grade_grades_final[0]->gradevalue, $grade_item->grade_grades_final[1]->gradevalue);
- $this->assertEqual($this->grade_grades_raw[0]->gradevalue, $grade_item->grade_grades_raw[1]->gradevalue);
- }
-
- /**
- * Test loading final items, generating fake values to replace missing grades
- */
- function test_grade_item_load_fake_final() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'load_final'));
- global $CFG;
- $CFG->usenullgrades = true;
-
- // Delete one of the final grades
- $final_grade = new grade_grades_final($this->grade_grades_final[0]);
- $final_grade->delete();
- unset($this->grade_grades_final[0]);
-
- // Load the final grades
- $final_grades = $grade_item->load_final(true);
- $this->assertEqual(3, count($final_grades));
- $this->assertEqual($grade_item->grademin, $final_grades[1]->gradevalue);
-
- // Load normal final grades
- $final_grades = $grade_item->load_final();
- $this->assertEqual(2, count($final_grades));
- }
-
- /**
- * Test the adjust_grade method
- */
- function test_grade_item_adjust_grade() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'adjust_grade'));
- $grade_raw = new stdClass();
-
- $grade_raw->gradevalue = 40;
- $grade_raw->grademax = 100;
- $grade_raw->grademin = 0;
-
- $grade_item->multfactor = 1;
- $grade_item->plusfactor = 0;
- $grade_item->grademax = 50;
- $grade_item->grademin = 0;
-
- $original_grade_raw = clone($grade_raw);
- $original_grade_item = clone($grade_item);
-
- $this->assertEqual(20, $grade_item->adjust_grade($grade_raw));
-
- // Try a larger maximum grade
- $grade_item->grademax = 150;
- $grade_item->grademin = 0;
- $this->assertEqual(60, $grade_item->adjust_grade($grade_raw));
-
- // Try larger minimum grade
- $grade_item->grademin = 50;
-
- $this->assertEqual(90, $grade_item->adjust_grade($grade_raw));
-
- // Rescaling from a small scale (0-50) to a larger scale (0-100)
- $grade_raw->grademax = 50;
- $grade_raw->grademin = 0;
- $grade_item->grademax = 100;
- $grade_item->grademin = 0;
-
- $this->assertEqual(80, $grade_item->adjust_grade($grade_raw));
-
- // Rescaling from a small scale (0-50) to a larger scale with offset (40-100)
- $grade_item->grademax = 100;
- $grade_item->grademin = 40;
-
- $this->assertEqual(88, $grade_item->adjust_grade($grade_raw));
-
- // Try multfactor and plusfactor
- $grade_raw = clone($original_grade_raw);
- $grade_item = clone($original_grade_item);
- $grade_item->multfactor = 1.23;
- $grade_item->plusfactor = 3;
-
- $this->assertEqual(27.6, $grade_item->adjust_grade($grade_raw));
-
- // Try multfactor below 0 and a negative plusfactor
- $grade_raw = clone($original_grade_raw);
- $grade_item = clone($original_grade_item);
- $grade_item->multfactor = 0.23;
- $grade_item->plusfactor = -3;
-
- $this->assertEqual(round(1.6), round($grade_item->adjust_grade($grade_raw)));
- }
-
- function test_grade_item_adjust_scale_grade() {
- // Load grade item and its scale
- $grade_item = new grade_item(array('scaleid' => $this->scale[1]->id), false);
- $grade_item->gradetype = GRADE_TYPE_SCALE;
- $grade_item->insert();
- $grade_item->load_scale();
- $this->assertEqual('Very Good', $grade_item->scale->scale_items[1]);
-
- // Load raw grade and its scale
- $grade_raw = new grade_grades_raw(array('scaleid' => $this->scale[0]->id), false);
- $grade_raw->gradevalue = 4;
- $grade_raw->itemid = $grade_item->id;
- $grade_raw->userid = 1;
- $grade_raw->insert();
- $grade_raw->load_scale();
- $this->assertEqual('Fairly neutral', $grade_raw->scale->scale_items[2]);
-
- // Test grade_item::adjust_scale
- $this->assertEqual(3, round($grade_item->adjust_grade($grade_raw, null, 'gradevalue')));
- $grade_raw->gradevalue = 6;
- $this->assertEqual(4, $grade_item->adjust_grade($grade_raw, null, 'gradevalue'));
-
- // Check that the final grades have the correct values now
- $grade_item->load_raw();
- $grade_item->update_final_grade();
-
- $this->assertFalse(empty($grade_item->grade_grades_final));
- $this->assertEqual($grade_item->id, $grade_item->grade_grades_final[1]->itemid);
- $this->assertEqual(2.66667, $grade_item->grade_grades_final[1]->gradevalue);
- $this->assertEqual(1, $grade_item->grade_grades_final[1]->userid);
- }
-
- function test_grade_item_toggle_locking() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'toggle_locking'));
-
- $this->assertFalse($grade_item->locked);
- $this->assertEqual(0, $grade_item->toggle_locking());
- $this->assertTrue($grade_item->locked);
- $grade_item->load_final();
- $this->assertFalse($grade_item->grade_grades_final[1]->locked);
-
- $grade_item->locked = false;
- $this->assertEqual(3, $grade_item->toggle_locking(true));
- $this->assertTrue($grade_item->locked);
- $this->assertTrue($grade_item->grade_grades_final[1]->locked);
- $this->assertTrue($grade_item->grade_grades_final[2]->locked);
- $this->assertTrue($grade_item->grade_grades_final[3]->locked);
- }
-
- function test_grade_item_toggle_hiding() {
- $grade_item = new grade_item($this->grade_items[0]);
- $this->assertTrue(method_exists($grade_item, 'toggle_hiding'));
-
- $this->assertFalse($grade_item->hidden);
- $this->assertEqual(0, $grade_item->toggle_hiding());
- $this->assertTrue($grade_item->hidden);
- $grade_item->load_final();
- $this->assertFalse($grade_item->grade_grades_final[1]->hidden);
-
- $grade_item->hidden = false;
- $this->assertEqual(3, $grade_item->toggle_hiding(true));
- $this->assertTrue($grade_item->hidden);
- $this->assertTrue($grade_item->grade_grades_final[1]->hidden);
- $this->assertTrue($grade_item->grade_grades_final[2]->hidden);
- $this->assertTrue($grade_item->grade_grades_final[3]->hidden);
- }
-
- function test_grade_item_generate_final() {
- $grade_item = new grade_item();
- $grade_item->courseid = $this->courseid;
- $grade_item->categoryid = $this->grade_categories[1]->id;
- $grade_item->itemname = 'unittestgradeitem4';
- $grade_item->itemtype = 'mod';
- $grade_item->grademin = 0;
- $grade_item->grademax = 100;
- $grade_item->itemmodule = 'quiz';
- $grade_item->iteminfo = 'Grade item used for unit testing';
-
- $grade_item->insert();
-
- $grade_grades_raw = new grade_grades_raw();
- $grade_grades_raw->itemid = $grade_item->id;
- $grade_grades_raw->userid = 1;
- $grade_grades_raw->gradevalue = 88;
- $grade_grades_raw->grademax = 110;
- $grade_grades_raw->grademin = 18;
- $grade_grades_raw->insert();
-
- $grade_grades_raw = new grade_grades_raw();
- $grade_grades_raw->itemid = $grade_item->id;
- $grade_grades_raw->userid = 2;
- $grade_grades_raw->gradevalue = 68;
- $grade_grades_raw->grademax = 110;
- $grade_grades_raw->grademin = 18;
- $grade_grades_raw->insert();
-
- $grade_grades_raw = new grade_grades_raw();
- $grade_grades_raw->itemid = $grade_item->id;
- $grade_grades_raw->userid = 3;
- $grade_grades_raw->gradevalue = 81;
- $grade_grades_raw->grademax = 110;
- $grade_grades_raw->grademin = 18;
- $grade_grades_raw->insert();
-
- $grade_item->load_raw();
- $this->assertEqual(3, count($grade_item->grade_grades_raw));
-
- $grade_item->generate_final();
- $grade_item->load_final();
- $this->assertEqual(3, count($grade_item->grade_grades_final));
- }
-}
-?>
+<?php // $Id$\r
+\r
+///////////////////////////////////////////////////////////////////////////\r
+// //\r
+// NOTICE OF COPYRIGHT //\r
+// //\r
+// Moodle - Modular Object-Oriented Dynamic Learning Environment //\r
+// http://moodle.org //\r
+// //\r
+// Copyright (C) 1999-2004 Martin Dougiamas http://dougiamas.com //\r
+// //\r
+// This program is free software; you can redistribute it and/or modify //\r
+// it under the terms of the GNU General Public License as published by //\r
+// the Free Software Foundation; either version 2 of the License, or //\r
+// (at your option) any later version. //\r
+// //\r
+// This program is distributed in the hope that it will be useful, //\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //\r
+// GNU General Public License for more details: //\r
+// //\r
+// http://www.gnu.org/copyleft/gpl.html //\r
+// //\r
+///////////////////////////////////////////////////////////////////////////\r
+@set_time_limit(0);\r
+/**\r
+ * Unit tests for grade_item object.\r
+ *\r
+ * @author nicolas@moodle.com\r
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License\r
+ * @package moodlecore\r
+ */\r
+require_once(dirname(__FILE__) . '/../../../../config.php');\r
+global $CFG;\r
+require_once($CFG->libdir . '/simpletest/testgradelib.php');\r
+\r
+class grade_item_test extends gradelib_test {\r
+\r
+ function test_grade_item_construct() { \r
+ $params = new stdClass();\r
+\r
+ $params->courseid = $this->courseid;\r
+ $params->categoryid = $this->grade_categories[1]->id;\r
+ $params->itemname = 'unittestgradeitem4';\r
+ $params->itemtype = 'mod';\r
+ $params->itemmodule = 'database';\r
+ $params->iteminfo = 'Grade item used for unit testing';\r
+\r
+ $grade_item = new grade_item($params, false);\r
+\r
+ $this->assertEqual($params->courseid, $grade_item->courseid);\r
+ $this->assertEqual($params->categoryid, $grade_item->categoryid);\r
+ $this->assertEqual($params->itemmodule, $grade_item->itemmodule);\r
+ }\r
+\r
+ function test_grade_item_insert() {\r
+ $grade_item = new grade_item();\r
+ $this->assertTrue(method_exists($grade_item, 'insert'));\r
+ \r
+ $grade_item->courseid = $this->courseid;\r
+ $grade_item->categoryid = $this->grade_categories[1]->id;\r
+ $grade_item->itemname = 'unittestgradeitem4';\r
+ $grade_item->itemtype = 'mod';\r
+ $grade_item->itemmodule = 'quiz';\r
+ $grade_item->iteminfo = 'Grade item used for unit testing';\r
+\r
+ // Check the grade_category's needsupdate variable first\r
+ $category = $grade_item->get_category(); \r
+ $category->load_grade_item();\r
+ $category->grade_item->needsupdate = false;\r
+ $this->assertNotNull($category->grade_item);\r
+\r
+ $grade_item->insert();\r
+\r
+ // Now check the needsupdate variable, it should have been set to true\r
+ $category->grade_item->update_from_db();\r
+ $this->assertTrue($category->grade_item->needsupdate);\r
+\r
+ $last_grade_item = end($this->grade_items);\r
+\r
+ $this->assertEqual($grade_item->id, $last_grade_item->id + 1);\r
+ }\r
+\r
+ function test_grade_item_delete() {\r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'delete'));\r
+ \r
+ // Check the grade_category's needsupdate variable first\r
+ $category = $grade_item->get_category(); \r
+ $category->load_grade_item();\r
+ $this->assertNotNull($category->grade_item);\r
+ $category->grade_item->needsupdate = false;\r
+ \r
+ $this->assertTrue($grade_item->delete());\r
+\r
+ // Now check the needsupdate variable, it should have been set to true\r
+ $category->grade_item->update_from_db();\r
+ $this->assertTrue($category->grade_item->needsupdate);\r
+\r
+ $this->assertFalse(get_record('grade_items', 'id', $grade_item->id));\r
+ }\r
+\r
+ function test_grade_item_update() {\r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'update'));\r
+ \r
+ $grade_item->iteminfo = 'Updated info for this unittest grade_item';\r
+\r
+ // Check the grade_category's needsupdate variable first\r
+ $category= $grade_item->get_category(); \r
+ $category->load_grade_item();\r
+ $this->assertNotNull($category->grade_item);\r
+ $category->grade_item->needsupdate = false;\r
+ \r
+ $this->assertTrue($grade_item->update());\r
+\r
+ // Now check the needsupdate variable, it should NOT have been set to true, because insufficient changes to justify update.\r
+ $this->assertFalse($category->grade_item->needsupdate);\r
+ \r
+ $grade_item->grademin = 14; \r
+ $this->assertTrue($grade_item->qualifies_for_update());\r
+ $this->assertTrue($grade_item->update(true));\r
+ \r
+ // Now check the needsupdate variable, it should have been set to true\r
+ $category->grade_item->update_from_db();\r
+ $this->assertTrue($category->grade_item->needsupdate);\r
+\r
+ // Also check parent\r
+ $category->load_parent_category();\r
+ $category->parent_category->load_grade_item();\r
+ $this->assertTrue($category->parent_category->grade_item->needsupdate);\r
+ \r
+ $iteminfo = get_field('grade_items', 'iteminfo', 'id', $this->grade_items[0]->id);\r
+ $this->assertEqual($grade_item->iteminfo, $iteminfo);\r
+ }\r
+\r
+ function test_grade_item_qualifies_for_update() {\r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'qualifies_for_update'));\r
+ \r
+ $grade_item->iteminfo = 'Updated info for this unittest grade_item';\r
+ \r
+ $this->assertFalse($grade_item->qualifies_for_update());\r
+\r
+ $grade_item->grademin = 14;\r
+\r
+ $this->assertTrue($grade_item->qualifies_for_update()); \r
+ }\r
+\r
+ function test_grade_item_fetch() {\r
+ $grade_item = new grade_item(); \r
+ $this->assertTrue(method_exists($grade_item, 'fetch'));\r
+\r
+ $grade_item = grade_item::fetch('id', $this->grade_items[0]->id);\r
+ $this->assertEqual($this->grade_items[0]->id, $grade_item->id);\r
+ $this->assertEqual($this->grade_items[0]->iteminfo, $grade_item->iteminfo); \r
+ \r
+ $grade_item = grade_item::fetch('itemtype', $this->grade_items[1]->itemtype, 'itemmodule', $this->grade_items[1]->itemmodule);\r
+ $this->assertEqual($this->grade_items[1]->id, $grade_item->id);\r
+ $this->assertEqual($this->grade_items[1]->iteminfo, $grade_item->iteminfo); \r
+ }\r
+\r
+ function test_grade_item_fetch_all_using_this() {\r
+ $grade_item = new grade_item();\r
+ $grade_item->itemtype = 'mod';\r
+ $this->assertTrue(method_exists($grade_item, 'fetch_all_using_this'));\r
+ \r
+ $grade_items = $grade_item->fetch_all_using_this();\r
+ $this->assertEqual(5, count($grade_items));\r
+ $first_grade_item = reset($grade_items);\r
+ $this->assertEqual($this->grade_items[0]->id, $first_grade_item->id);\r
+ }\r
+ \r
+ /**\r
+ * Retrieve all raw scores for a given grade_item.\r
+ */\r
+ function test_grade_item_get_all_raws() {\r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'get_raw'));\r
+ \r
+ $raw_grades = $grade_item->get_raw();\r
+ $this->assertEqual(3, count($raw_grades));\r
+ }\r
+\r
+ /**\r
+ * Retrieve the raw score for a specific userid.\r
+ */\r
+ function test_grade_item_get_raw() { \r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'get_raw'));\r
+ \r
+ $raw_grades = $grade_item->get_raw($this->userid);\r
+ $raw_grade = current($raw_grades);\r
+ $this->assertEqual(1, count($raw_grades)); \r
+ $this->assertEqual($this->grade_grades_raw[0]->gradevalue, $raw_grade->gradevalue);\r
+ }\r
+\r
+ \r
+ /**\r
+ * Retrieve all final scores for a given grade_item.\r
+ */\r
+ function test_grade_item_get_all_finals() {\r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'get_final'));\r
+ \r
+ $final_grades = $grade_item->get_final();\r
+ $this->assertEqual(3, count($final_grades)); \r
+ }\r
+\r
+ \r
+ /**\r
+ * Retrieve all final scores for a specific userid.\r
+ */\r
+ function test_grade_item_get_final() {\r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'get_final'));\r
+ \r
+ $final_grades = $grade_item->get_final($this->userid);\r
+ $final_grade = current($final_grades);\r
+ $this->assertEqual(1, count($final_grade));\r
+ $this->assertEqual($this->grade_grades_final[0]->gradevalue, $final_grade->gradevalue); \r
+ }\r
+\r
+ function test_grade_item_get_calculation() {\r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'get_calculation'));\r
+ \r
+ $grade_calculation = $grade_item->get_calculation();\r
+ $this->assertEqual($this->grade_calculations[0]->id, $grade_calculation->id);\r
+ }\r
+\r
+ function test_grade_item_set_calculation() {\r
+ $grade_item = new grade_item($this->grade_items[1]);\r
+ $this->assertTrue(method_exists($grade_item, 'set_calculation'));\r
+ $this->assertTrue(method_exists($grade_item, 'get_calculation'));\r
+ \r
+ $calculation = 'SUM([unittestgradeitem1], [unittestgradeitem3])';\r
+ $grade_item->set_calculation($calculation);\r
+ $new_calculation = $grade_item->get_calculation();\r
+\r
+ $this->assertEqual($calculation, $new_calculation->calculation);\r
+ }\r
+\r
+ function test_grade_item_get_category() {\r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'get_category'));\r
+ \r
+ $category = $grade_item->get_category();\r
+ $this->assertEqual($this->grade_categories[1]->fullname, $category->fullname);\r
+ }\r
+\r
+ /**\r
+ * Test update of all final grades, then only 1 grade (give a $userid)\r
+ */\r
+ function test_grade_item_update_final_grades() {\r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'update_final_grade'));\r
+ $this->assertEqual(3, $grade_item->update_final_grade()); \r
+ $this->assertEqual(1, $grade_item->update_final_grade(1)); \r
+ }\r
+\r
+ /**\r
+ * Test loading of raw and final items into grade_item.\r
+ */\r
+ function test_grade_item_load() {\r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'load_final'));\r
+ $this->assertTrue(method_exists($grade_item, 'load_raw'));\r
+\r
+ // Check that final and raw items are not yet loaded\r
+ $this->assertTrue(empty($grade_item->grade_grades_final));\r
+ $this->assertTrue(empty($grade_item->grade_grades_raw));\r
+ \r
+ // Load raw and final grades\r
+ $grade_item->load_final();\r
+ $grade_item->load_raw();\r
+ \r
+ // Check that final and raw grades are now loaded\r
+ $this->assertFalse(empty($grade_item->grade_grades_final));\r
+ $this->assertFalse(empty($grade_item->grade_grades_raw));\r
+ $this->assertEqual($this->grade_grades_final[0]->gradevalue, $grade_item->grade_grades_final[1]->gradevalue);\r
+ $this->assertEqual($this->grade_grades_raw[0]->gradevalue, $grade_item->grade_grades_raw[1]->gradevalue);\r
+ }\r
+\r
+ /**\r
+ * Test loading final items, generating fake values to replace missing grades\r
+ */\r
+ function test_grade_item_load_fake_final() {\r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'load_final'));\r
+ global $CFG;\r
+ $CFG->usenullgrades = true;\r
+\r
+ // Delete one of the final grades\r
+ $final_grade = new grade_grades_final($this->grade_grades_final[0]);\r
+ $final_grade->delete();\r
+ unset($this->grade_grades_final[0]);\r
+\r
+ // Load the final grades\r
+ $final_grades = $grade_item->load_final(true);\r
+ $this->assertEqual(3, count($final_grades));\r
+ $this->assertEqual($grade_item->grademin, $final_grades[1]->gradevalue); \r
+\r
+ // Load normal final grades\r
+ $final_grades = $grade_item->load_final();\r
+ $this->assertEqual(2, count($final_grades));\r
+ }\r
+ \r
+ /**\r
+ * Test the adjust_grade method\r
+ */\r
+ function test_grade_item_adjust_grade() {\r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'adjust_grade'));\r
+ $grade_raw = new stdClass();\r
+\r
+ $grade_raw->gradevalue = 40;\r
+ $grade_raw->grademax = 100;\r
+ $grade_raw->grademin = 0;\r
+ \r
+ $grade_item->multfactor = 1;\r
+ $grade_item->plusfactor = 0;\r
+ $grade_item->grademax = 50;\r
+ $grade_item->grademin = 0;\r
+ \r
+ $original_grade_raw = clone($grade_raw);\r
+ $original_grade_item = clone($grade_item);\r
+\r
+ $this->assertEqual(20, $grade_item->adjust_grade($grade_raw)); \r
+ \r
+ // Try a larger maximum grade\r
+ $grade_item->grademax = 150;\r
+ $grade_item->grademin = 0;\r
+ $this->assertEqual(60, $grade_item->adjust_grade($grade_raw)); \r
+\r
+ // Try larger minimum grade\r
+ $grade_item->grademin = 50;\r
+\r
+ $this->assertEqual(90, $grade_item->adjust_grade($grade_raw)); \r
+\r
+ // Rescaling from a small scale (0-50) to a larger scale (0-100)\r
+ $grade_raw->grademax = 50;\r
+ $grade_raw->grademin = 0;\r
+ $grade_item->grademax = 100;\r
+ $grade_item->grademin = 0;\r
+\r
+ $this->assertEqual(80, $grade_item->adjust_grade($grade_raw)); \r
+\r
+ // Rescaling from a small scale (0-50) to a larger scale with offset (40-100)\r
+ $grade_item->grademax = 100;\r
+ $grade_item->grademin = 40;\r
+\r
+ $this->assertEqual(88, $grade_item->adjust_grade($grade_raw)); \r
+\r
+ // Try multfactor and plusfactor\r
+ $grade_raw = clone($original_grade_raw);\r
+ $grade_item = clone($original_grade_item);\r
+ $grade_item->multfactor = 1.23;\r
+ $grade_item->plusfactor = 3;\r
+\r
+ $this->assertEqual(27.6, $grade_item->adjust_grade($grade_raw)); \r
+\r
+ // Try multfactor below 0 and a negative plusfactor\r
+ $grade_raw = clone($original_grade_raw);\r
+ $grade_item = clone($original_grade_item);\r
+ $grade_item->multfactor = 0.23;\r
+ $grade_item->plusfactor = -3;\r
+\r
+ $this->assertEqual(round(1.6), round($grade_item->adjust_grade($grade_raw))); \r
+ }\r
+\r
+ function test_grade_item_adjust_scale_grade() {\r
+ // Load grade item and its scale\r
+ $grade_item = new grade_item(array('scaleid' => $this->scale[1]->id), false);\r
+ $grade_item->gradetype = GRADE_TYPE_SCALE;\r
+ $grade_item->insert();\r
+ $grade_item->load_scale();\r
+ $this->assertEqual('Very Good', $grade_item->scale->scale_items[1]);\r
+ \r
+ // Load raw grade and its scale\r
+ $grade_raw = new grade_grades_raw(array('scaleid' => $this->scale[0]->id), false);\r
+ $grade_raw->gradevalue = 4;\r
+ $grade_raw->itemid = $grade_item->id;\r
+ $grade_raw->userid = 1;\r
+ $grade_raw->insert();\r
+ $grade_raw->load_scale();\r
+ $this->assertEqual('Fairly neutral', $grade_raw->scale->scale_items[2]);\r
+ \r
+ // Test grade_item::adjust_scale\r
+ $this->assertEqual(3, round($grade_item->adjust_grade($grade_raw, null, 'gradevalue')));\r
+ $grade_raw->gradevalue = 6;\r
+ $this->assertEqual(4, $grade_item->adjust_grade($grade_raw, null, 'gradevalue'));\r
+\r
+ // Check that the final grades have the correct values now\r
+ $grade_item->load_raw();\r
+ $grade_item->update_final_grade();\r
+ \r
+ $this->assertFalse(empty($grade_item->grade_grades_final));\r
+ $this->assertEqual($grade_item->id, $grade_item->grade_grades_final[1]->itemid);\r
+ $this->assertEqual(2.66667, round($grade_item->grade_grades_final[1]->gradevalue, 5));\r
+ $this->assertEqual(1, $grade_item->grade_grades_final[1]->userid);\r
+ }\r
+\r
+ function test_grade_item_toggle_locking() {\r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'toggle_locking'));\r
+\r
+ $this->assertFalse($grade_item->locked);\r
+ $this->assertEqual(0, $grade_item->toggle_locking());\r
+ $this->assertTrue($grade_item->locked);\r
+ $grade_item->load_final();\r
+ $this->assertFalse($grade_item->grade_grades_final[1]->locked);\r
+ \r
+ $grade_item->locked = false;\r
+ $this->assertEqual(3, $grade_item->toggle_locking(true));\r
+ $this->assertTrue($grade_item->locked);\r
+ $this->assertTrue($grade_item->grade_grades_final[1]->locked);\r
+ $this->assertTrue($grade_item->grade_grades_final[2]->locked);\r
+ $this->assertTrue($grade_item->grade_grades_final[3]->locked);\r
+ }\r
+\r
+ function test_grade_item_toggle_hiding() {\r
+ $grade_item = new grade_item($this->grade_items[0]);\r
+ $this->assertTrue(method_exists($grade_item, 'toggle_hiding'));\r
+\r
+ $this->assertFalse($grade_item->hidden);\r
+ $this->assertEqual(0, $grade_item->toggle_hiding());\r
+ $this->assertTrue($grade_item->hidden);\r
+ $grade_item->load_final();\r
+ $this->assertFalse($grade_item->grade_grades_final[1]->hidden);\r
+ \r
+ $grade_item->hidden = false;\r
+ $this->assertEqual(3, $grade_item->toggle_hiding(true));\r
+ $this->assertTrue($grade_item->hidden);\r
+ $this->assertTrue($grade_item->grade_grades_final[1]->hidden);\r
+ $this->assertTrue($grade_item->grade_grades_final[2]->hidden);\r
+ $this->assertTrue($grade_item->grade_grades_final[3]->hidden);\r
+ } \r
+\r
+ function test_grade_item_generate_final() {\r
+ $grade_item = new grade_item();\r
+ $grade_item->courseid = $this->courseid;\r
+ $grade_item->categoryid = $this->grade_categories[1]->id;\r
+ $grade_item->itemname = 'unittestgradeitem4';\r
+ $grade_item->itemtype = 'mod';\r
+ $grade_item->grademin = 0;\r
+ $grade_item->grademax = 100;\r
+ $grade_item->itemmodule = 'quiz';\r
+ $grade_item->iteminfo = 'Grade item used for unit testing';\r
+\r
+ $grade_item->insert();\r
+\r
+ $grade_grades_raw = new grade_grades_raw();\r
+ $grade_grades_raw->itemid = $grade_item->id;\r
+ $grade_grades_raw->userid = 1;\r
+ $grade_grades_raw->gradevalue = 88;\r
+ $grade_grades_raw->grademax = 110;\r
+ $grade_grades_raw->grademin = 18;\r
+ $grade_grades_raw->insert();\r
+\r
+ $grade_grades_raw = new grade_grades_raw();\r
+ $grade_grades_raw->itemid = $grade_item->id;\r
+ $grade_grades_raw->userid = 2;\r
+ $grade_grades_raw->gradevalue = 68;\r
+ $grade_grades_raw->grademax = 110;\r
+ $grade_grades_raw->grademin = 18;\r
+ $grade_grades_raw->insert();\r
+\r
+ $grade_grades_raw = new grade_grades_raw();\r
+ $grade_grades_raw->itemid = $grade_item->id;\r
+ $grade_grades_raw->userid = 3;\r
+ $grade_grades_raw->gradevalue = 81;\r
+ $grade_grades_raw->grademax = 110;\r
+ $grade_grades_raw->grademin = 18;\r
+ $grade_grades_raw->insert();\r
+\r
+ $grade_item->load_raw();\r
+ $this->assertEqual(3, count($grade_item->grade_grades_raw));\r
+\r
+ $grade_item->generate_final();\r
+ $grade_item->load_final();\r
+ $this->assertEqual(3, count($grade_item->grade_grades_final)); \r
+ }\r
+} \r
+?>\r