mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 08:56:36 +02:00
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:
parent
57b4877d87
commit
2df712352d
6 changed files with 180 additions and 68 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue