MDL-9506 Almost completed category aggregation, including generation of raw and final grades held by these categories. Only a few small glitches remain, that cause these grades not to be generated properly. This is the last critical element of the gradebook API, so I'm looking forward to finishing it :-)

This commit is contained in:
nicolasconnault 2007-05-11 08:46:34 +00:00
parent 57b4877d87
commit 2df712352d
6 changed files with 180 additions and 68 deletions

View file

@ -163,10 +163,20 @@ class grade_category_test extends gradelib_test {
}
function test_grade_category_generate_grades() {
global $CFG;
$CFG->usenullgrades = true;
$category = new grade_category($this->grade_categories[0]);
$this->assertTrue(method_exists($category, 'generate_grades'));
}
$category->generate_grades();
$category->load_grade_item();
$raw_grades = get_records('grade_grades_raw', 'itemid', $category->grade_item->id);
$final_grades = get_records('grade_grades_final', 'itemid', $category->grade_item->id);
$this->assertEqual(3, count($raw_grades));
$this->assertEqual(3, count($final_grades));
}
/**
function test_grade_category_aggregate_grades() {
$category = new grade_category($this->grade_categories[0]);
$this->assertTrue(method_exists($category, 'aggregate_grades'));
@ -179,11 +189,15 @@ class grade_category_test extends gradelib_test {
$grade_sets[$i][] = $this->generate_random_raw_grade($this->grade_items[$i], $j);
}
}
$this->assertEqual(200, count($category->aggregate_grades($grade_sets)));
$aggregated_grades = $category->aggregate_grades($grade_sets);
$this->assertEqual(200, count($aggregated_grades));
$this->assertWithinMargin($aggregated_grades[rand(0, count($aggregated_grades))]->gradevalue, 0, 100);
$this->assertWithinMargin($aggregated_grades[rand(0, count($aggregated_grades))]->gradevalue, 0, 100);
$this->assertWithinMargin($aggregated_grades[rand(0, count($aggregated_grades))]->gradevalue, 0, 100);
$this->assertWithinMargin($aggregated_grades[rand(0, count($aggregated_grades))]->gradevalue, 0, 100);
}
*/
function generate_random_raw_grade($item, $userid) {
$raw_grade = new grade_grades_raw();
$raw_grade->itemid = $item->id;
@ -191,7 +205,7 @@ class grade_category_test extends gradelib_test {
$raw_grade->grademin = $item->grademin;
$raw_grade->grademax = $item->grademax;
$valuetype = "grade$item->gradetype";
$raw_grade->$valuetype = rand($raw_grade->grademin, $raw_grade->grademax);
$raw_grade->gradevalue = rand(0, 1000) / 1000;
$raw_grade->insert();
return $raw_grade;
}

View file

@ -67,8 +67,8 @@ class grade_item_test extends gradelib_test {
// 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);
$this->assertFalse($category->grade_item->needsupdate);
$grade_item->insert();
@ -89,7 +89,7 @@ class grade_item_test extends gradelib_test {
$category = $grade_item->get_category();
$category->load_grade_item();
$this->assertNotNull($category->grade_item);
$this->assertFalse($category->grade_item->needsupdate);
$category->grade_item->needsupdate = false;
$this->assertTrue($grade_item->delete());
@ -110,7 +110,7 @@ class grade_item_test extends gradelib_test {
$category= $grade_item->get_category();
$category->load_grade_item();
$this->assertNotNull($category->grade_item);
$this->assertFalse($category->grade_item->needsupdate);
$category->grade_item->needsupdate = false;
$this->assertTrue($grade_item->update());
@ -281,6 +281,30 @@ class grade_item_test extends gradelib_test {
$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

View file

@ -498,6 +498,7 @@ class gradelib_test extends UnitTestCase {
$grade_item->courseid = $this->courseid;
$grade_item->iteminstance = $this->grade_categories[0]->id;
$grade_item->itemname = 'unittestgradeitemcategory1';
$grade_item->needsupdate = true;
$grade_item->itemtype = 'category';
$grade_item->iteminfo = 'Grade item used for unit testing';
$grade_item->timecreated = mktime();
@ -513,6 +514,7 @@ class gradelib_test extends UnitTestCase {
$grade_item->iteminstance = $this->grade_categories[1]->id;
$grade_item->itemname = 'unittestgradeitemcategory2';
$grade_item->itemtype = 'category';
$grade_item->needsupdate = true;
$grade_item->iteminfo = 'Grade item used for unit testing';
$grade_item->timecreated = mktime();
$grade_item->timemodified = mktime();
@ -527,6 +529,7 @@ class gradelib_test extends UnitTestCase {
$grade_item->iteminstance = $this->grade_categories[2]->id;
$grade_item->itemname = 'unittestgradeitemcategory3';
$grade_item->itemtype = 'category';
$grade_item->needsupdate = true;
$grade_item->iteminfo = 'Grade item used for unit testing';
$grade_item->timecreated = mktime();
$grade_item->timemodified = mktime();