MDL-31713 core_grade:added a unit test to replicate a raw grade max bug
authorAndrew Davis <andrew@moodle.com>
Fri, 19 Apr 2013 13:25:18 +0000 (21:25 +0800)
committerAndrew Davis <andrew@moodle.com>
Tue, 30 Apr 2013 01:37:49 +0000 (09:37 +0800)
lib/grade/tests/grade_item_test.php

index 78bfa20..1d1f943 100644 (file)
@@ -63,6 +63,7 @@ class grade_item_testcase extends grade_base_testcase {
         $this->sub_test_grade_item_set_calculation();
         $this->sub_test_grade_item_get_calculation();
         $this->sub_test_grade_item_compute();
+        $this->sub_test_update_final_grade();
     }
 
     protected function sub_test_grade_item_construct() {
@@ -552,4 +553,34 @@ class grade_item_testcase extends grade_base_testcase {
         $grade_grade = grade_grade::fetch(array('userid'=>$this->grade_grades[5]->userid, 'itemid'=>$this->grade_grades[5]->itemid));
         $this->assertEquals($this->grade_grades[5]->finalgrade, $grade_grade->finalgrade);
     }
+
+    protected function sub_test_update_final_grade() {
+
+        // MDL-31713 Check that min and max are set on the grade_grade instance
+        // if the grade is overridden before the activity has supplied a grade.
+        $min = 2;
+        $max = 8;
+
+        // Create a brand new grade item.
+        $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 = 'brand new unit test grade item';
+        $grade_item->itemtype = 'mod';
+        $grade_item->itemmodule = 'quiz';
+        $grade_item->iteminfo = 'Grade item used for unit testing';
+        $grade_item->grademin = $min;
+        $grade_item->grademax = $max;
+        $grade_item->insert();
+
+        // Override the student grade.
+        $grade_item->update_final_grade($this->user[1]->id, 7, 'gradebook', '', FORMAT_MOODLE);
+
+        // Check the student's grade has the correct min and max grade.
+        $grade_grade = grade_grade::fetch(array('userid'=>$this->user[1]->id, 'itemid'=>$grade_item->id));
+        $this->assertEquals($min, $grade_grade->rawgrademin);
+        $this->assertEquals($max, $grade_grade->rawgrademax);
+    }
 }