]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-12182 More grade_item unit tests
authornicolasconnault <nicolasconnault>
Thu, 22 Nov 2007 05:37:49 +0000 (05:37 +0000)
committernicolasconnault <nicolasconnault>
Thu, 22 Nov 2007 05:37:49 +0000 (05:37 +0000)
lib/grade/simpletest/testgradeitem.php

index c1d87e01ecc5dbf522276fc480363881bef9fa8f..1c8ae001aa066f372d3cd6d0bda0a3ab0b898166 100755 (executable)
@@ -45,6 +45,7 @@ class grade_item_test extends grade_test {
         parent::setUp();
         $this->load_grade_items();        
     }
+    
     function test_grade_item_construct() {
         $params = new stdClass();
 
@@ -383,16 +384,38 @@ class grade_item_test extends grade_test {
         $this->assertTrue($grade_item->regrade_final_grades($this->userid)); 
     }
 
-/*
     function test_grade_item_adjust_raw_grade() {
-        $grade_item = new grade_item($this->grade_items[0]);
-        $this->assertTrue(method_exists($grade_item, 'adjust_raw_grade'));
+        $grade_item = new grade_item($this->grade_items[0], false);
+        $grade_scale = new mock_grade_scale();
+        $grade_scale->id = 1;
+        $grade_items->scale = $grade_scale;
+        $grade_items->scaleid = $grade_scale->id;
+
         $grade_raw = new stdClass();
 
         $grade_raw->rawgrade = 40;
         $grade_raw->grademax = 100;
         $grade_raw->grademin = 0;
 
+        $this->assertTrue(method_exists($grade_item, 'adjust_raw_grade'));
+
+        $grade_item->gradetype = GRADE_TYPE_TEXT;
+        $this->assertNull($grade_item->adjust_raw_grade($grade_raw->rawgrade, $grade_raw->grademin, $grade_raw->grademax));
+        $grade_item->gradetype = GRADE_TYPE_NONE;
+        $this->assertNull($grade_item->adjust_raw_grade($grade_raw->rawgrade, $grade_raw->grademin, $grade_raw->grademax)); 
+
+        $grade_item->gradetype = GRADE_TYPE_SCALE;
+        $grade_item->grademax = -1;
+        $this->assertNull($grade_item->adjust_raw_grade($grade_raw->rawgrade, $grade_raw->grademin, $grade_raw->grademax));
+        $grade_item->grademax = 0;
+        $this->assertEqual(0, $grade_item->adjust_raw_grade($grade_raw->rawgrade, $grade_raw->grademin, $grade_raw->grademax));
+        
+        $grade_item->gradetype = GRADE_TYPE_VALUE;
+        $grade_item->grademax = 20;
+        $grade_item->grademin = 21;
+        $this->assertNull($grade_item->adjust_raw_grade(null, 0, 10)); // null raw = null
+        $this->assertNull($grade_item->adjust_raw_grade(20, 0, 10)); // item->min > item->max = null
+
         $grade_item->multfactor = 1;
         $grade_item->plusfactor = 0;
         $grade_item->grademax = 50;
@@ -445,26 +468,52 @@ class grade_item_test extends grade_test {
     }
 
     function test_grade_item_set_locked() {
-        $grade_item = new grade_item($this->grade_items[0]);
+        Mock::generatePartial('grade_item', 'mock_grade_item_for_set_locked', array('get_final', 'update', 'get_instance', 'refresh_grades'));
+        $grade_item = new mock_grade_item_for_set_locked($this);
         $this->assertTrue(method_exists($grade_item, 'set_locked'));
-
-        $grade = new grade_grade($grade_item->get_final(1));
-        $this->assertTrue(empty($grade_item->locked));
-        $this->assertTrue(empty($grade->locked));
-
+        
+        $grade_item->needsupdate = true;
+        $this->assertFalse($grade_item->set_locked(true));
+        $grade_item->needsupdate = false;
+        $grade_item->expectOnce('update', array());
+        $grade_item->expectNever('get_final');
+        $this->assertTrue($grade_item->set_locked(true, false));
+        $this->assertTrue($grade_item->locked > 0);
+        $this->assertTrue($grade_item->locked <= time());
+
+        // Add cascading to the previous call
+        $grade_item = new mock_grade_item_for_set_locked($this);
+        $grade_item->needsupdate = false;
+        $grade = new mock_grade_grade();
+        $grade->expectCallCount('set_locked', 2, array(1, null, false));
+        $grade_item->expectOnce('update', array());
+        $grade_item->expectCallCount('get_instance', 2);
+        $grade_item->expectOnce('get_final', array());
+        $grade_item->setReturnValue('get_final', array(1, 2)); // array returned by get_final is irrelevant: grade_grade objects get instantiated using get_instance
+        $grade_item->setReturnValue('get_instance', $grade); 
         $this->assertTrue($grade_item->set_locked(true, true));
-        $grade = new grade_grade($grade_item->get_final(1));
 
-        $this->assertFalse(empty($grade_item->locked));
-        $this->assertFalse(empty($grade->locked)); // individual grades should be locked too
-
-        $this->assertTrue($grade_item->set_locked(false, true));
-        $grade = new grade_grade($grade_item->get_final(1));
+        // Try with lock set to false
+        $grade_item = new mock_grade_item_for_set_locked($this);
+        $grade_item->locked = time() - 3600;
+        $grade_item->expectOnce('update', array());
+        $grade_item->expectNever('refresh_grades', array());
+        
+        $this->assertTrue($grade_item->set_locked(false, false, false));
+        $this->assertEqual(0, $grade_item->locktime);
+        $this->assertEqual(0, $grade_item->locked);
 
-        $this->assertTrue(empty($grade_item->locked));
-        $this->assertTrue(empty($grade->locked)); // individual grades should be unlocked too
+        // Add refresh and cascading to the previous call
+        $grade_item = new mock_grade_item_for_set_locked($this);
+        $grade_item->id = 1;
+        $grade_grade = grade_object::get_instance('grade_grade');
+        $grade_grade->expectOnce('fetch_all', array(array('itemid' => $grade_item->id)));
+        $grade = new mock_grade_grade();
+        $grade_grade->setReturnValue('fetch_all', array(clone($grade), clone($grade)));
+        $this->assertTrue($grade_item->set_locked(false, true, true));
     }
 
+/*
     function test_grade_item_is_locked() {
         $grade_item = new grade_item($this->grade_items[0]);
         $this->assertTrue(method_exists($grade_item, 'is_locked'));