mirror of
https://github.com/moodle/moodle.git
synced 2025-04-23 17:34:56 +02:00
complete unit tests for grade_item + minor cleanup in insert and update
This commit is contained in:
parent
225e707187
commit
c3146da7ac
lib
@ -229,27 +229,8 @@ class grade_item extends grade_object {
|
||||
* @return boolean success
|
||||
*/
|
||||
function update() {
|
||||
|
||||
if (!empty($this->outcome->id)) {
|
||||
$this->outcomeid = $this->outcome->id;
|
||||
}
|
||||
|
||||
if (!isset($this->gradetype)) {
|
||||
$this->gradetype = GRADE_TYPE_VALUE;
|
||||
}
|
||||
|
||||
if (empty($this->scaleid) and !empty($this->scale->id)) {
|
||||
$this->scaleid = $this->scale->id;
|
||||
}
|
||||
|
||||
// Retrieve scale and infer grademax from it
|
||||
if ($this->gradetype == GRADE_TYPE_SCALE and !empty($this->scaleid)) {
|
||||
$this->load_scale();
|
||||
|
||||
} else {
|
||||
$this->scaleid = NULL;
|
||||
$this->scale = NULL;
|
||||
}
|
||||
// Retrieve scale and infer grademax/min from it if needed
|
||||
$this->load_scale();
|
||||
|
||||
if ($this->qualifies_for_regrading()) {
|
||||
return $this->force_regrading();
|
||||
@ -341,19 +322,10 @@ class grade_item extends grade_object {
|
||||
error('Can not insert grade item without course id!');
|
||||
}
|
||||
|
||||
if (empty($this->scaleid) and !empty($this->scale->id)) {
|
||||
$this->scaleid = $this->scale->id;
|
||||
}
|
||||
|
||||
// Retrieve scale and infer grademax from it
|
||||
if ($this->gradetype == GRADE_TYPE_SCALE and !empty($this->scaleid)) {
|
||||
$this->load_scale();
|
||||
|
||||
} else {
|
||||
$this->scaleid = NULL;
|
||||
$this->scale = NULL;
|
||||
}
|
||||
// load scale if needed
|
||||
$this->load_scale();
|
||||
|
||||
// add parent categroy if needed
|
||||
if (empty($this->categoryid) and !$this->is_course_item() and !$this->is_category_item()) {
|
||||
$course_category = grade_category::fetch_course_category($this->courseid);
|
||||
$this->categoryid = $course_category->id;
|
||||
@ -376,22 +348,16 @@ class grade_item extends grade_object {
|
||||
$this->idnumber = rand(0,9999999999); // TODO replace rand() with proper random generator
|
||||
}
|
||||
}
|
||||
/*
|
||||
// If a grade_item already exists with these itemtype, itemmodule and iteminstance
|
||||
// but not itemnumber, generate an itemnumber.
|
||||
if (empty($this->itemnumber) && !empty($this->itemtype) && !empty($this->itemmodule) && !empty($this->iteminstance)) {
|
||||
$existing_item = get_record('grade_items',
|
||||
'iteminstance', $this->iteminstance,
|
||||
'itemmodule', $this->itemmodule,
|
||||
'itemtype', $this->itemtype);
|
||||
|
||||
if (empty($existing_item->itemnumber)) {
|
||||
$existing_item->itemnumber = 0;
|
||||
// add proper item numbers to manual items
|
||||
if ($this->itemtype == 'manual') {
|
||||
if (empty($this->itemnumber)) {
|
||||
$this->itemnumber = 0;
|
||||
}
|
||||
while (grade_item::fetch(array('courseid'=>$this->courseid, 'itemtype'=>'manual', 'itemnumber'=>$this->itemnumber))) {
|
||||
$this->itemnumber++;
|
||||
}
|
||||
|
||||
$this->itemnumber = $existing_item->itemnumber + 1;
|
||||
}
|
||||
*/
|
||||
|
||||
$result = parent::insert();
|
||||
|
||||
@ -737,7 +703,7 @@ class grade_item extends grade_object {
|
||||
/**
|
||||
* Instantiates a grade_scale object whose data is retrieved from the DB,
|
||||
* if this item's scaleid variable is set.
|
||||
* @return object grade_scale
|
||||
* @return object grade_scale or null if no scale used
|
||||
*/
|
||||
function load_scale() {
|
||||
if ($this->gradetype != GRADE_TYPE_SCALE) {
|
||||
@ -745,13 +711,17 @@ class grade_item extends grade_object {
|
||||
}
|
||||
|
||||
if (!empty($this->scaleid)) {
|
||||
$this->scale = grade_scale::fetch(array('id'=>$this->scaleid));
|
||||
$this->scale->load_items();
|
||||
//do not load scale if already present
|
||||
if (empty($this->scale->id) or $this->scale->id != $this->scaleid) {
|
||||
$this->scale = grade_scale::fetch(array('id'=>$this->scaleid));
|
||||
$this->scale->load_items();
|
||||
}
|
||||
|
||||
// Until scales are uniformly set to min=0 max=count(scaleitems)-1 throughout Moodle, we
|
||||
// stay with the current min=1 max=count(scaleitems)
|
||||
$this->grademax = count($this->scale->scale_items);
|
||||
$this->grademin = 1;
|
||||
|
||||
} else {
|
||||
$this->scale = null;
|
||||
}
|
||||
@ -999,7 +969,6 @@ class grade_item extends grade_object {
|
||||
|
||||
} else {
|
||||
return get_string('grade');
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -702,7 +702,7 @@ class grade_test extends UnitTestCase {
|
||||
$grade_item->gradetype = GRADE_TYPE_VALUE;
|
||||
$grade_item->grademin = 0;
|
||||
$grade_item->grademax = 100;
|
||||
$grade_item->iteminfo = 'Orphan Grade 9 item used for unit testing';
|
||||
$grade_item->iteminfo = 'Orphan Grade item 9 used for unit testing';
|
||||
$grade_item->timecreated = mktime();
|
||||
$grade_item->timemodified = mktime();
|
||||
$grade_item->sortorder = 8;
|
||||
@ -711,6 +711,27 @@ class grade_test extends UnitTestCase {
|
||||
$this->grade_items[9] = $grade_item;
|
||||
}
|
||||
|
||||
// Manual grade_item
|
||||
// id = 10
|
||||
$grade_item = new stdClass();
|
||||
|
||||
$grade_item->courseid = $this->courseid;
|
||||
$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 = mktime();
|
||||
$grade_item->timemodified = mktime();
|
||||
|
||||
if ($grade_item->id = insert_record('grade_items', $grade_item)) {
|
||||
$this->grade_items[10] = $grade_item;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -86,37 +86,20 @@ class grade_item_test extends grade_test {
|
||||
$this->assertEqual($grade_item->id, $last_grade_item->id + 1);
|
||||
$this->assertEqual(11, $grade_item->sortorder);
|
||||
}
|
||||
/*
|
||||
function test_grade_item_generate_itemnumber() {
|
||||
$grade_item = new grade_item($this->grade_items[0]);
|
||||
|
||||
function test_grade_item_generate_itemnumber_for_manual() {
|
||||
$grade_item = new grade_item($this->grade_items[10]);
|
||||
$copy_grade_item = fullclone($grade_item);
|
||||
$copy_grade_item->itemnumber = null;
|
||||
unset($copy_grade_item->id);
|
||||
$result_id = $copy_grade_item->insert();
|
||||
$this->assertEqual($grade_item->itemnumber+1, $copy_grade_item->itemnumber);
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
function test_grade_item_generate_idnumber() {
|
||||
|
||||
}
|
||||
|
||||
function test_grade_item_update_when_flagged_as_deleted() {
|
||||
|
||||
}
|
||||
|
||||
function test_grade_item_update_guess_outcomeid() {
|
||||
|
||||
}
|
||||
|
||||
function test_grade_item_update_default_gradetype() {
|
||||
|
||||
}
|
||||
|
||||
function test_grade_item_update_guess_scaleid() {
|
||||
|
||||
}
|
||||
|
||||
function test_grade_item_delete() {
|
||||
$grade_item = new grade_item($this->grade_items[0]);
|
||||
$this->assertTrue(method_exists($grade_item, 'delete'));
|
||||
@ -166,6 +149,20 @@ class grade_item_test extends grade_test {
|
||||
$this->assertEqual($grade_item->iteminfo, $iteminfo);
|
||||
}
|
||||
|
||||
function test_grade_item_load_scale() {
|
||||
$grade_item = new grade_item($this->grade_items[2]);
|
||||
$this->assertTrue(method_exists($grade_item, 'load_scale'));
|
||||
$scale = $grade_item->load_scale();
|
||||
$this->assertFalse(empty($grade_item->scale));
|
||||
$this->assertEqual($scale->id, $this->grade_items[2]->scaleid);
|
||||
}
|
||||
|
||||
function test_grade_item_load_outcome() {
|
||||
$grade_item = new grade_item($this->grade_items[0]);
|
||||
$this->assertTrue(method_exists($grade_item, 'load_outcome'));
|
||||
//TODO: add tests
|
||||
}
|
||||
|
||||
function test_grade_item_qualifies_for_regrading() {
|
||||
$grade_item = new grade_item($this->grade_items[0]);
|
||||
$this->assertTrue(method_exists($grade_item, 'qualifies_for_regrading'));
|
||||
@ -181,6 +178,23 @@ class grade_item_test extends grade_test {
|
||||
$this->assertTrue($grade_item->qualifies_for_regrading());
|
||||
}
|
||||
|
||||
function test_grade_item_force_regrading() {
|
||||
$grade_item = new grade_item($this->grade_items[0]);
|
||||
$this->assertTrue(method_exists($grade_item, 'force_regrading'));
|
||||
|
||||
$grade_category = $grade_item->get_parent_category();
|
||||
$grade_category->load_grade_item();
|
||||
$this->assertEqual(0, $grade_item->needsupdate);
|
||||
$this->assertEqual(0, $grade_category->grade_item->needsupdate);
|
||||
|
||||
$this->assertTrue($grade_item->force_regrading());
|
||||
|
||||
$grade_category = $grade_item->get_parent_category();
|
||||
$grade_category->load_grade_item();
|
||||
$this->assertEqual(1, $grade_item->needsupdate);
|
||||
$this->assertEqual(1, $grade_category->grade_item->needsupdate);
|
||||
}
|
||||
|
||||
function test_grade_item_fetch() {
|
||||
$grade_item = new grade_item();
|
||||
$this->assertTrue(method_exists($grade_item, 'fetch'));
|
||||
@ -224,6 +238,62 @@ class grade_item_test extends grade_test {
|
||||
$this->assertEqual($this->grade_grades[0]->finalgrade, $final_grade->finalgrade);
|
||||
}
|
||||
|
||||
function test_grade_item_get_sortorder() {
|
||||
$grade_item = new grade_item($this->grade_items[0]);
|
||||
$this->assertTrue(method_exists($grade_item, 'get_sortorder'));
|
||||
$sortorder = $grade_item->get_sortorder();
|
||||
$this->assertEqual($this->grade_items[0]->sortorder, $sortorder);
|
||||
}
|
||||
|
||||
function test_grade_item_set_sortorder() {
|
||||
$grade_item = new grade_item($this->grade_items[0]);
|
||||
$this->assertTrue(method_exists($grade_item, 'set_sortorder'));
|
||||
$grade_item->set_sortorder(999);
|
||||
$this->assertEqual($grade_item->sortorder, 999);
|
||||
}
|
||||
|
||||
function test_grade_item_move_after_sortorder() {
|
||||
$grade_item = new grade_item($this->grade_items[0]);
|
||||
$this->assertTrue(method_exists($grade_item, 'move_after_sortorder'));
|
||||
$grade_item->move_after_sortorder(5);
|
||||
$this->assertEqual($grade_item->sortorder, 6);
|
||||
|
||||
$grade_item = grade_item::fetch(array('id'=>$this->grade_items[0]->id));
|
||||
$this->assertEqual($grade_item->sortorder, 6);
|
||||
|
||||
$after = grade_item::fetch(array('id'=>$this->grade_items[6]->id));
|
||||
$this->assertEqual($after->sortorder, 8);
|
||||
}
|
||||
|
||||
function test_grade_item_get_name() {
|
||||
$grade_item = new grade_item($this->grade_items[0]);
|
||||
$this->assertTrue(method_exists($grade_item, 'get_name'));
|
||||
|
||||
$name = $grade_item->get_name();
|
||||
$this->assertEqual($this->grade_items[0]->itemname, $name);
|
||||
}
|
||||
|
||||
function test_grade_item_set_parent() {
|
||||
$grade_item = new grade_item($this->grade_items[0]);
|
||||
$this->assertTrue(method_exists($grade_item, 'set_parent'));
|
||||
|
||||
$old = $grade_item->get_parent_category();
|
||||
$old_item = $old->get_grade_item();
|
||||
$new = new grade_category($this->grade_categories[3]);
|
||||
$new_item = $new->get_grade_item();
|
||||
|
||||
$this->assertEqual($old_item->needsupdate, 0);
|
||||
|
||||
$this->assertTrue($grade_item->set_parent($new->id));
|
||||
|
||||
$new_item->update_from_db();
|
||||
$old_item->update_from_db();
|
||||
$grade_item->update_from_db();
|
||||
|
||||
$this->assertEqual($old_item->needsupdate, 1);
|
||||
$this->assertEqual($grade_item->categoryid, $new->id);
|
||||
}
|
||||
|
||||
function test_grade_item_get_parent_category() {
|
||||
$grade_item = new grade_item($this->grade_items[0]);
|
||||
$this->assertTrue(method_exists($grade_item, 'get_parent_category'));
|
||||
@ -232,6 +302,32 @@ class grade_item_test extends grade_test {
|
||||
$this->assertEqual($this->grade_categories[1]->fullname, $category->fullname);
|
||||
}
|
||||
|
||||
function test_grade_item_load_parent_category() {
|
||||
$grade_item = new grade_item($this->grade_items[0]);
|
||||
$this->assertTrue(method_exists($grade_item, 'load_parent_category'));
|
||||
|
||||
$category = $grade_item->load_parent_category();
|
||||
$this->assertEqual($this->grade_categories[1]->fullname, $category->fullname);
|
||||
$this->assertEqual($this->grade_categories[1]->fullname, $grade_item->parent_category->fullname);
|
||||
}
|
||||
|
||||
function test_grade_item_get_item_category() {
|
||||
$grade_item = new grade_item($this->grade_items[3]);
|
||||
$this->assertTrue(method_exists($grade_item, 'get_item_category'));
|
||||
|
||||
$category = $grade_item->get_item_category();
|
||||
$this->assertEqual($this->grade_categories[0]->fullname, $category->fullname);
|
||||
}
|
||||
|
||||
function test_grade_item_load_item_category() {
|
||||
$grade_item = new grade_item($this->grade_items[3]);
|
||||
$this->assertTrue(method_exists($grade_item, 'load_item_category'));
|
||||
|
||||
$category = $grade_item->load_item_category();
|
||||
$this->assertEqual($this->grade_categories[0]->fullname, $category->fullname);
|
||||
$this->assertEqual($this->grade_categories[0]->fullname, $grade_item->item_category->fullname);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test update of all final grades
|
||||
*/
|
||||
@ -239,6 +335,7 @@ class grade_item_test extends grade_test {
|
||||
$grade_item = new grade_item($this->grade_items[0]);
|
||||
$this->assertTrue(method_exists($grade_item, 'update_final_grades'));
|
||||
$this->assertEqual(true, $grade_item->update_final_grades());
|
||||
//TODO: add more tests
|
||||
}
|
||||
|
||||
/**
|
||||
@ -377,6 +474,24 @@ class grade_item_test extends grade_test {
|
||||
$this->assertTrue($grade_item->is_hidden(1));
|
||||
}
|
||||
|
||||
function test_grade_item_is_category_item() {
|
||||
$grade_item = new grade_item($this->grade_items[3]);
|
||||
$this->assertTrue(method_exists($grade_item, 'is_category_item'));
|
||||
$this->assertTrue($grade_item->is_category_item());
|
||||
}
|
||||
|
||||
function test_grade_item_is_course_item() {
|
||||
$grade_item = grade_item::fetch_course_item($this->courseid);
|
||||
$this->assertTrue(method_exists($grade_item, 'is_course_item'));
|
||||
$this->assertTrue($grade_item->is_course_item());
|
||||
}
|
||||
|
||||
function test_grade_item_fetch_course_item() {
|
||||
$grade_item = grade_item::fetch_course_item($this->courseid);
|
||||
$this->assertTrue(method_exists($grade_item, 'fetch_course_item'));
|
||||
$this->assertTrue($grade_item->itemtype, 'course');
|
||||
}
|
||||
|
||||
function test_grade_item_depends_on() {
|
||||
$grade_item = new grade_item($this->grade_items[1]);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user