]> git.mjollnir.org Git - moodle.git/commitdiff
complete unit tests for grade_category, minor API cleanup, fixed forced regrading...
authorskodak <skodak>
Tue, 3 Jul 2007 10:06:08 +0000 (10:06 +0000)
committerskodak <skodak>
Tue, 3 Jul 2007 10:06:08 +0000 (10:06 +0000)
lib/grade/grade_category.php
lib/grade/grade_item.php
lib/simpletest/fixtures/gradetest.php
lib/simpletest/grade/simpletest/testgradecategory.php

index f4a770a7a602b839bd7c6a83be8aa8d16ca5d73e..f4c6524a7326676a2f2417c58fc95f8d5d0715e9 100644 (file)
@@ -137,7 +137,6 @@ class grade_category extends grade_object {
         }
     }
 
-
     /**
      * Finds and returns a grade_category instance based on params.
      * @static
@@ -173,15 +172,18 @@ class grade_category extends grade_object {
             $this->depth = substr_count($this->path, '/');
         }
 
-        if (!parent::update()) {
-            return false;
-        }
 
         // Recalculate grades if needed
         if ($this->qualifies_for_regrading()) {
+            if (!parent::update()) {
+                return false;
+            }
             $this->grade_item->force_regrading();
+            return true;
+
+        } else {
+            return parent::update();
         }
-        return true;
     }
 
     /**
@@ -270,10 +272,11 @@ class grade_category extends grade_object {
      */
     function qualifies_for_regrading() {
         if (empty($this->id)) {
+            debugging("Can not regrade non existing category");
             return false;
         }
 
-        $db_item = new grade_category(array('id' => $this->id));
+        $db_item = grade_category::fetch(array('id'=>$this->id));
 
         $aggregationdiff = $db_item->aggregation != $this->aggregation;
         $keephighdiff    = $db_item->keephigh    != $this->keephigh;
@@ -293,7 +296,7 @@ class grade_category extends grade_object {
      */
     function force_regrading() {
         if (empty($this->id)) {
-            debugging("Needsupdate requested before insering grade category.");
+            debugging("Needsupdate requested before inserting grade category.");
             return true;
         }
 
@@ -781,25 +784,6 @@ class grade_category extends grade_object {
         }
     }
 
-    /**
-     * Returns this category's grade_item's id. This is specified for cases where we do not
-     * know an object's type, and want to get either an item's id or a category's item's id.
-     *
-     * @return int
-     */
-    function get_item_id() {
-        $this->load_grade_item();
-        return $this->grade_item->id;
-    }
-
-    /**
-     * Returns this category's parent id. A generic method shared by objects that have a parent id of some kind.
-     * @return id $parentid
-     */
-    function get_parent_id() {
-        return $this->parent;
-    }
-
     /**
      * Sets this category's parent id. A generic method shared by objects that have a parent id of some kind.
      * @param int parentid
@@ -867,6 +851,10 @@ class grade_category extends grade_object {
         $this->grade_item->set_sortorder($sortorder);
     }
 
+    /**
+     * Move this category after the given sortorder - does not change the parent
+     * @param int $sortorder to place after
+     */
     function move_after_sortorder($sortorder) {
         $this->load_grade_item();
         $this->grade_item->move_after_sortorder($sortorder);
index 9ef65b360606f33826ed60f3e3a2083a426ed500..0c83228e04824f7fbba81474f66892a61b3e2191 100644 (file)
@@ -1003,34 +1003,6 @@ class grade_item extends grade_object {
         }
     }
 
-    /**
-     * Returns this grade_item's id. This is specified for cases where we do not
-     * know an object's type, and want to get either an item's id or a category's item's id.
-     *
-     * @return int
-     */
-    function get_item_id() {
-        return $this->id;
-    }
-
-    /**
-     * Returns this item's category id. A generic method shared by objects that have a parent id of some kind.
-     * @return int $parentid
-     */
-    function get_parent_id() {
-        if ($this->is_course_item()) {
-            return false;
-
-        } else if ($this->is_category_item()) {
-
-            return $category->id;
-
-        } else {
-            return $this->categoryid;
-;
-        }
-    }
-
     /**
      * Sets this item's categoryid. A generic method shared by objects that have a parent id of some kind.
      * @param int $parentid
index 33843fdaf457a9e9e8ecbdeb55d14aba857c580b..9975b3fffebbca9ada3e73797814f1a0fe51ea9b 100644 (file)
@@ -506,7 +506,7 @@ class grade_test extends UnitTestCase {
         $grade_item->grademax = 110;
         $grade_item->itemnumber = 1;
         $grade_item->idnumber = 'item id 0';
-        $grade_item->iteminfo = 'Grade item used for unit testing';
+        $grade_item->iteminfo = 'Grade item used for unit testing';
         $grade_item->timecreated = mktime();
         $grade_item->timemodified = mktime();
         $grade_item->sortorder = 3;
@@ -529,7 +529,7 @@ class grade_test extends UnitTestCase {
         $grade_item->itemnumber = null;
         $grade_item->grademin = 0;
         $grade_item->grademax = 100;
-        $grade_item->iteminfo = 'Grade item used for unit testing';
+        $grade_item->iteminfo = 'Grade item used for unit testing';
         $grade_item->timecreated = mktime();
         $grade_item->timemodified = mktime();
         $grade_item->sortorder = 4;
@@ -551,7 +551,7 @@ class grade_test extends UnitTestCase {
         $grade_item->scaleid = $this->scale[0]->id;
         $grade_item->grademin = 0;
         $grade_item->grademax = $this->scalemax[0];
-        $grade_item->iteminfo = 'Grade item used for unit testing';
+        $grade_item->iteminfo = 'Grade item used for unit testing';
         $grade_item->timecreated = mktime();
         $grade_item->timemodified = mktime();
         $grade_item->sortorder = 6;
@@ -567,12 +567,12 @@ class grade_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->needsupdate = 0;
         $grade_item->itemtype = 'category';
         $grade_item->gradetype = GRADE_TYPE_VALUE;
         $grade_item->grademin = 0;
         $grade_item->grademax = 100;
-        $grade_item->iteminfo = 'Grade item used for unit testing';
+        $grade_item->iteminfo = 'Grade item used for unit testing';
         $grade_item->timecreated = mktime();
         $grade_item->timemodified = mktime();
         $grade_item->sortorder = 1;
@@ -589,10 +589,10 @@ class grade_test extends UnitTestCase {
         $grade_item->itemname = 'unittestgradeitemcategory2';
         $grade_item->itemtype = 'category';
         $grade_item->gradetype = GRADE_TYPE_VALUE;
-        $grade_item->needsupdate = true;
+        $grade_item->needsupdate = 0;
         $grade_item->grademin = 0;
         $grade_item->grademax = 100;
-        $grade_item->iteminfo = 'Grade item used for unit testing';
+        $grade_item->iteminfo = 'Grade item used for unit testing';
         $grade_item->timecreated = mktime();
         $grade_item->timemodified = mktime();
         $grade_item->sortorder = 2;
@@ -612,7 +612,7 @@ class grade_test extends UnitTestCase {
         $grade_item->needsupdate = true;
         $grade_item->grademin = 0;
         $grade_item->grademax = 100;
-        $grade_item->iteminfo = 'Grade item used for unit testing';
+        $grade_item->iteminfo = 'Grade item used for unit testing';
         $grade_item->timecreated = mktime();
         $grade_item->timemodified = mktime();
         $grade_item->sortorder = 5;
@@ -636,7 +636,7 @@ class grade_test extends UnitTestCase {
         $grade_item->grademin = 10;
         $grade_item->grademax = 120;
         $grade_item->locked = time();
-        $grade_item->iteminfo = 'Orphan Grade item used for unit testing';
+        $grade_item->iteminfo = 'Orphan Grade item used for unit testing';
         $grade_item->timecreated = mktime();
         $grade_item->timemodified = mktime();
         $grade_item->sortorder = 7;
@@ -659,7 +659,7 @@ class grade_test extends UnitTestCase {
         $grade_item->scaleid = $this->scale[0]->id;
         $grade_item->grademin = 0;
         $grade_item->grademax = $this->scalemax[0];
-        $grade_item->iteminfo = 'Grade item used for unit testing';
+        $grade_item->iteminfo = 'Grade item used for unit testing';
         $grade_item->timecreated = mktime();
         $grade_item->timemodified = mktime();
         $grade_item->sortorder = 9;
@@ -680,7 +680,7 @@ class grade_test extends UnitTestCase {
         $grade_item->gradetype = GRADE_TYPE_VALUE;
         $grade_item->grademin = 0;
         $grade_item->grademax = 100;
-        $grade_item->iteminfo = 'Grade item used for unit testing';
+        $grade_item->iteminfo = 'Grade item used for unit testing';
         $grade_item->timecreated = mktime();
         $grade_item->timemodified = mktime();
         $grade_item->sortorder = 10;
@@ -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 item used for unit testing';
+        $grade_item->iteminfo = 'Orphan Grade item used for unit testing';
         $grade_item->timecreated = mktime();
         $grade_item->timemodified = mktime();
         $grade_item->sortorder = 8;
index 7d2c4ec79be2e1d287a6849a9dd678062c41172d..d20b31b7377adeafcec5d3395290ae29aa64158b 100755 (executable)
@@ -92,6 +92,7 @@ class grade_category_test extends grade_test {
         $grade_category->insert();
 
         $this->assertEqual('/'.$course_category->id.'/'.$this->grade_categories[0]->id.'/'.$grade_category->id, $grade_category->path);
+        $this->assertEqual(3, $grade_category->depth);
 
         $last_grade_category = end($this->grade_categories);
 
@@ -104,15 +105,77 @@ class grade_category_test extends grade_test {
         $this->assertFalse(empty($grade_category->timemodified));
     }
 
+    function test_grade_category_build_path() {
+        $grade_category = new grade_category($this->grade_categories[1]);
+        $path = grade_category::build_path($grade_category);
+        $this->assertEqual($grade_category->path, $path);
+    }
+
     function test_grade_category_update() {
         $grade_category = new grade_category($this->grade_categories[0]);
         $this->assertTrue(method_exists($grade_category, 'update'));
 
         $grade_category->fullname = 'Updated info for this unittest grade_category';
+        $grade_category->path = null; // path must be recalculated if missing
+        $grade_category->depth = null;
+        $grade_category->aggregation = GRADE_AGGREGATE_MAX; // should force regrading
+
+        $grade_item = $grade_category->get_grade_item();
+        $this->assertEqual(0, $grade_item->needsupdate);
+
         $this->assertTrue($grade_category->update());
+
         $fullname = get_field('grade_categories', 'fullname', 'id', $this->grade_categories[0]->id);
         $this->assertEqual($grade_category->fullname, $fullname);
 
+        $path = get_field('grade_categories', 'path', 'id', $this->grade_categories[0]->id);
+        $this->assertEqual($grade_category->path, $path);
+
+        $depth = get_field('grade_categories', 'depth', 'id', $this->grade_categories[0]->id);
+        $this->assertEqual($grade_category->depth, $depth);
+
+        $grade_item = $grade_category->get_grade_item();
+        $this->assertEqual(1, $grade_item->needsupdate);
+    }
+
+    function test_grade_category_qualifies_for_regrading() {
+        $grade_category = new grade_category($this->grade_categories[0]);
+        $this->assertTrue(method_exists($grade_category, 'qualifies_for_regrading'));
+
+        $this->assertFalse($grade_category->qualifies_for_regrading());
+
+        $grade_category->aggregation = GRADE_AGGREGATE_MAX;
+        $this->assertTrue($grade_category->qualifies_for_regrading());
+
+        $grade_category = new grade_category($this->grade_categories[0]);
+        $grade_category->droplow = 99;
+        $this->assertTrue($grade_category->qualifies_for_regrading());
+
+        $grade_category = new grade_category($this->grade_categories[0]);
+        $grade_category->keephigh = 99;
+        $this->assertTrue($grade_category->qualifies_for_regrading());
+    }
+
+    function test_grade_category_force_regrading() {
+        $grade_category = new grade_category($this->grade_categories[1]);
+        $this->assertTrue(method_exists($grade_category, 'force_regrading'));
+
+        $grade_category->load_grade_item();
+        $parent_category = new grade_category($this->grade_categories[1]);
+        $parent_category->load_grade_item();
+
+        $this->assertEqual(0, $grade_category->grade_item->needsupdate);
+        $this->assertEqual(0, $parent_category->grade_item->needsupdate);
+
+        $this->assertTrue($grade_category->force_regrading());
+
+        $grade_category->grade_item = null;
+        $parent_category->grade_item = null;
+        $grade_category->load_grade_item();
+        $parent_category->load_grade_item();
+
+        $this->assertEqual(1, $grade_category->grade_item->needsupdate);
+        $this->assertEqual(1, $parent_category->grade_item->needsupdate);
     }
 
     function test_grade_category_delete() {
@@ -159,6 +222,98 @@ class grade_category_test extends grade_test {
         $this->assertEqual($this->grade_items[2]->id, $children_array[5]['children'][6]['object']->id);
     }
 
+    function test_grade_category_get_grade_item() {
+        $category = new grade_category($this->grade_categories[0]);
+        $this->assertTrue(method_exists($category, 'get_grade_item'));
+        $grade_item = $category->get_grade_item();
+        $this->assertEqual($this->grade_items[3]->id, $grade_item->id);
+    }
+
+    function test_grade_category_load_grade_item() {
+        $category = new grade_category($this->grade_categories[0]);
+        $this->assertTrue(method_exists($category, 'load_grade_item'));
+        $this->assertEqual(null, $category->grade_item);
+        $category->load_grade_item();
+        $this->assertEqual($this->grade_items[3]->id, $category->grade_item->id);
+    }
+
+    function test_grade_category_get_parent_category() {
+        $category = new grade_category($this->grade_categories[1]);
+        $this->assertTrue(method_exists($category, 'get_parent_category'));
+        $parent_category = $category->get_parent_category();
+        $this->assertEqual($this->grade_categories[0]->id, $parent_category->id);
+    }
+
+    function test_grade_category_load_parent_category() {
+        $category = new grade_category($this->grade_categories[1]);
+        $this->assertTrue(method_exists($category, 'load_parent_category'));
+        $this->assertEqual(null, $category->parent_category);
+        $category->load_parent_category();
+        $this->assertEqual($this->grade_categories[0]->id, $category->parent_category->id);
+    }
+
+    function test_grade_category_get_name() {
+        $category = new grade_category($this->grade_categories[0]);
+        $this->assertTrue(method_exists($category, 'get_name'));
+        $this->assertEqual($this->grade_categories[0]->fullname, $category->get_name());
+    }
+
+    function test_grade_category_get_final() {
+        $category = new grade_category($this->grade_categories[0]);
+        $this->assertTrue(method_exists($category, 'get_final'));
+        $category->load_grade_item();
+        $this->assertEqual($category->get_final(), $category->grade_item->get_final());
+    }
+
+    function test_grade_category_get_sortorder() {
+        $category = new grade_category($this->grade_categories[0]);
+        $this->assertTrue(method_exists($category, 'get_sortorder'));
+        $category->load_grade_item();
+        $this->assertEqual($category->get_sortorder(), $category->grade_item->get_sortorder());
+    }
+
+    function test_grade_category_set_sortorder() {
+        $category = new grade_category($this->grade_categories[0]);
+        $this->assertTrue(method_exists($category, 'set_sortorder'));
+        $category->load_grade_item();
+        $this->assertEqual($category->set_sortorder(10), $category->grade_item->set_sortorder(10));
+    }
+
+    function test_grade_category_move_after_sortorder() {
+        $category = new grade_category($this->grade_categories[0]);
+        $this->assertTrue(method_exists($category, 'move_after_sortorder'));
+        $category->load_grade_item();
+        $this->assertEqual($category->move_after_sortorder(10), $category->grade_item->move_after_sortorder(10));
+    }
+
+    function test_grade_category_is_locked() {
+        $category = new grade_category($this->grade_categories[0]);
+        $this->assertTrue(method_exists($category, 'is_locked'));
+        $category->load_grade_item();
+        $this->assertEqual($category->is_locked(), $category->grade_item->is_locked());
+    }
+
+    function test_grade_category_set_locked() {
+        $category = new grade_category($this->grade_categories[0]);
+        $this->assertTrue(method_exists($category, 'set_locked'));
+        $category->load_grade_item();
+        $this->assertEqual($category->set_locked(1), $category->grade_item->set_locked(1));
+    }
+
+    function test_grade_category_is_hidden() {
+        $category = new grade_category($this->grade_categories[0]);
+        $this->assertTrue(method_exists($category, 'is_hidden'));
+        $category->load_grade_item();
+        $this->assertEqual($category->is_hidden(), $category->grade_item->is_hidden());
+    }
+
+    function test_grade_category_set_hidden() {
+        $category = new grade_category($this->grade_categories[0]);
+        $this->assertTrue(method_exists($category, 'set_hidden'));
+        $category->load_grade_item();
+        $this->assertEqual($category->set_hidden(1), $category->grade_item->set_hidden(1));
+    }
+
     function test_grade_category_has_children() {
         $category = new grade_category($this->grade_categories[0]);
         $this->assertTrue(method_exists($category, 'has_children'));
@@ -207,7 +362,6 @@ class grade_category_test extends grade_test {
         return $grade->rawgrade;
     }
 
-/*
     function test_grade_category_apply_limit_rules() {
         $category = new grade_category();
         $grades = array(5.374, 9.4743, 2.5474, 7.3754);
@@ -224,6 +378,35 @@ class grade_category_test extends grade_test {
         $category->droplow = 0;
         $category->apply_limit_rules($grades);
         $this->assertEqual(array(9.4743), $grades);
-    }*/
+    }
+
+    function test_grade_category_set_parent() {
+        $category = new grade_category($this->grade_categories[1]);
+        $this->assertTrue(method_exists($category, 'set_parent'));
+        // TODO: implement detailed tests
+
+        $course_category = grade_category::fetch_course_category($this->courseid);
+        $this->assertTrue($category->set_parent($course_category->id));
+        $this->assertEqual($course_category->id, $category->parent);
+    }
+
+    function test_grade_category_is_course_category() {
+        $category = grade_category::fetch_course_category($this->courseid);
+        $this->assertTrue(method_exists($category, 'is_course_category'));
+        $this->assertTrue($category->is_course_category());
+    }
+
+    function test_grade_category_fetch_course_category() {
+        $category = new grade_category();
+        $this->assertTrue(method_exists($category, 'fetch_course_category'));
+        $category = grade_category::fetch_course_category($this->courseid);
+        $this->assertTrue(empty($category->parent));
+    }
+
+    function test_grade_category_fetch_course_tree() {
+        $category = new grade_category();
+        $this->assertTrue(method_exists($category, 'fetch_course_tree'));
+        //TODO: add some tests
+    }
 }
 ?>