Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/lib/grade/simpletest/testgradeitem.php
Go to the documentation of this file.
00001 <?php
00002 
00004 //                                                                       //
00005 // NOTICE OF COPYRIGHT                                                   //
00006 //                                                                       //
00007 // Moodle - Modular Object-Oriented Dynamic Learning Environment         //
00008 //          http://moodle.org                                            //
00009 //                                                                       //
00010 // Copyright (C) 1999 onwards Martin Dougiamas  http://dougiamas.com     //
00011 //                                                                       //
00012 // This program is free software; you can redistribute it and/or modify  //
00013 // it under the terms of the GNU General Public License as published by  //
00014 // the Free Software Foundation; either version 2 of the License, or     //
00015 // (at your option) any later version.                                   //
00016 //                                                                       //
00017 // This program is distributed in the hope that it will be useful,       //
00018 // but WITHOUT ANY WARRANTY; without even the implied warranty of        //
00019 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         //
00020 // GNU General Public License for more details:                          //
00021 //                                                                       //
00022 //          http://www.gnu.org/copyleft/gpl.html                         //
00023 //                                                                       //
00025 
00034 if (!defined('MOODLE_INTERNAL')) {
00035     die('Direct access to this script is forbidden.');    
00036 }
00037 
00038 require_once($CFG->libdir.'/simpletest/fixtures/gradetest.php');
00039 
00040 Mock::generatePartial('grade_item', 'mock_grade_item_for_test_is_calculated', array('set_calculation'));
00041 
00042 @set_time_limit(0);
00043 
00044 class grade_item_test extends grade_test {
00045     function test_grade_item() {
00046         $this->sub_test_grade_item_construct();
00047         $this->sub_test_grade_item_insert();
00048         $this->sub_test_grade_item_delete();
00049         $this->sub_test_grade_item_update();
00050         $this->sub_test_grade_item_load_scale();
00051         $this->sub_test_grade_item_load_outcome();
00052         $this->sub_test_grade_item_qualifies_for_regrading();
00053         $this->sub_test_grade_item_force_regrading();
00054         $this->sub_test_grade_item_fetch();
00055         $this->sub_test_grade_item_fetch_all();
00056         $this->sub_test_grade_item_get_all_finals();
00057         $this->sub_test_grade_item_get_final();
00058         $this->sub_test_grade_item_get_sortorder();
00059         $this->sub_test_grade_item_set_sortorder();
00060         $this->sub_test_grade_item_move_after_sortorder();
00061         $this->sub_test_grade_item_get_name();
00062         $this->sub_test_grade_item_set_parent();
00063         $this->sub_test_grade_item_get_parent_category();
00064         $this->sub_test_grade_item_load_parent_category();
00065         $this->sub_test_grade_item_get_item_category();
00066         $this->sub_test_grade_item_load_item_category();
00067         $this->sub_test_grade_item_regrade_final_grades();
00068         $this->sub_test_grade_item_adjust_raw_grade();
00069         $this->sub_test_grade_item_set_locked();
00070         $this->sub_test_grade_item_is_locked();
00071         $this->sub_test_grade_item_set_hidden();
00072         $this->sub_test_grade_item_is_hidden();
00073         $this->sub_test_grade_item_is_category_item();
00074         $this->sub_test_grade_item_is_course_item();
00075         $this->sub_test_grade_item_fetch_course_item();
00076         $this->sub_test_grade_item_depends_on();
00077         $this->sub_test_grade_item_is_calculated();
00078         $this->sub_test_grade_item_set_calculation();
00079         $this->sub_test_grade_item_get_calculation();
00080         $this->sub_test_grade_item_compute();
00081     }
00082 
00083     function sub_test_grade_item_construct() {
00084         $params = new stdClass();
00085 
00086         $params->courseid = $this->courseid;
00087         $params->categoryid = $this->grade_categories[1]->id;
00088         $params->itemname = 'unittestgradeitem4';
00089         $params->itemtype = 'mod';
00090         $params->itemmodule = 'database';
00091         $params->iteminfo = 'Grade item used for unit testing';
00092 
00093         $grade_item = new grade_item($params, false);
00094 
00095         $this->assertEqual($params->courseid, $grade_item->courseid);
00096         $this->assertEqual($params->categoryid, $grade_item->categoryid);
00097         $this->assertEqual($params->itemmodule, $grade_item->itemmodule);
00098     }
00099 
00100     function sub_test_grade_item_insert() {
00101         $grade_item = new grade_item();
00102         $this->assertTrue(method_exists($grade_item, 'insert'));
00103 
00104         $grade_item->courseid = $this->courseid;
00105         $grade_item->categoryid = $this->grade_categories[1]->id;
00106         $grade_item->itemname = 'unittestgradeitem4';
00107         $grade_item->itemtype = 'mod';
00108         $grade_item->itemmodule = 'quiz';
00109         $grade_item->iteminfo = 'Grade item used for unit testing';
00110 
00111         $grade_item->insert();
00112 
00113         $last_grade_item = end($this->grade_items);
00114 
00115         $this->assertEqual($grade_item->id, $last_grade_item->id + 1);
00116         $this->assertEqual(11, $grade_item->sortorder);
00117 
00118         //keep our reference collection the same as what is in the database
00119         $this->grade_items[] = $grade_item;
00120     }
00121 
00122     function sub_test_grade_item_delete() {
00123         global $DB;
00124         $grade_item = new grade_item($this->grade_items[7]);//use a grade item not touched by previous (or future) tests
00125         $this->assertTrue(method_exists($grade_item, 'delete'));
00126 
00127         $this->assertTrue($grade_item->delete());
00128 
00129         $this->assertFalse($DB->get_record('grade_items', array('id' => $grade_item->id)));
00130 
00131         //keep our reference collection the same as the database
00132         unset($this->grade_items[7]);
00133     }
00134 
00135     function sub_test_grade_item_update() {
00136         global $DB;
00137         $grade_item = new grade_item($this->grade_items[0]);
00138         $this->assertTrue(method_exists($grade_item, 'update'));
00139 
00140         $grade_item->iteminfo = 'Updated info for this unittest grade_item';
00141 
00142         $this->assertTrue($grade_item->update());
00143 
00144         $grade_item->grademin = 14;
00145         $this->assertTrue($grade_item->qualifies_for_regrading());
00146         $this->assertTrue($grade_item->update());
00147 
00148         $iteminfo = $DB->get_field('grade_items', 'iteminfo', array('id' => $this->grade_items[0]->id));
00149         $this->assertEqual($grade_item->iteminfo, $iteminfo);
00150     }
00151 
00152     function sub_test_grade_item_load_scale() {
00153         $grade_item = new grade_item($this->grade_items[2]);
00154         $this->assertTrue(method_exists($grade_item, 'load_scale'));
00155         $scale = $grade_item->load_scale();
00156         $this->assertFalse(empty($grade_item->scale));
00157         $this->assertEqual($scale->id, $this->grade_items[2]->scaleid);
00158     }
00159 
00160     function sub_test_grade_item_load_outcome() {
00161         $grade_item = new grade_item($this->grade_items[0]);
00162         $this->assertTrue(method_exists($grade_item, 'load_outcome'));
00163         //TODO: add tests
00164     }
00165 
00166     function sub_test_grade_item_qualifies_for_regrading() {
00167         $grade_item = new grade_item($this->grade_items[1]);//use a grade item not touched by previous tests
00168         $this->assertTrue(method_exists($grade_item, 'qualifies_for_regrading'));
00169 
00170         $this->assertFalse($grade_item->qualifies_for_regrading());
00171 
00172         $grade_item->iteminfo = 'Updated info for this unittest grade_item';
00173 
00174         $this->assertFalse($grade_item->qualifies_for_regrading());
00175 
00176         $grade_item->grademin = 14;
00177 
00178         $this->assertTrue($grade_item->qualifies_for_regrading());
00179     }
00180 
00181     function sub_test_grade_item_force_regrading() {
00182         $grade_item = new grade_item($this->grade_items[2]);//use a grade item not touched by previous tests
00183         $this->assertTrue(method_exists($grade_item, 'force_regrading'));
00184 
00185         $this->assertEqual(0, $grade_item->needsupdate);
00186 
00187         $grade_item->force_regrading();
00188         $this->assertEqual(1, $grade_item->needsupdate);
00189         $grade_item->update_from_db();
00190         $this->assertEqual(1, $grade_item->needsupdate);
00191     }
00192 
00193     function sub_test_grade_item_fetch() {
00194         $grade_item = new grade_item();
00195         $this->assertTrue(method_exists($grade_item, 'fetch'));
00196 
00197         //not using $this->grade_items[0] as it's iteminfo was modified by sub_test_grade_item_qualifies_for_regrading()
00198         $grade_item = grade_item::fetch(array('id'=>$this->grade_items[1]->id));
00199         $this->assertEqual($this->grade_items[1]->id, $grade_item->id);
00200         $this->assertEqual($this->grade_items[1]->iteminfo, $grade_item->iteminfo);
00201 
00202         $grade_item = grade_item::fetch(array('itemtype'=>$this->grade_items[1]->itemtype, 'itemmodule'=>$this->grade_items[1]->itemmodule));
00203         $this->assertEqual($this->grade_items[1]->id, $grade_item->id);
00204         $this->assertEqual($this->grade_items[1]->iteminfo, $grade_item->iteminfo);
00205     }
00206 
00207     function sub_test_grade_item_fetch_all() {
00208         $grade_item = new grade_item();
00209         $this->assertTrue(method_exists($grade_item, 'fetch_all'));
00210 
00211         $grade_items = grade_item::fetch_all(array('courseid'=>$this->courseid));
00212         $this->assertEqual(count($this->grade_items), count($grade_items)-1);//-1 to account for the course grade item
00213     }
00214 
00215     // Retrieve all final scores for a given grade_item.
00216     function sub_test_grade_item_get_all_finals() {
00217         $grade_item = new grade_item($this->grade_items[0]);
00218         $this->assertTrue(method_exists($grade_item, 'get_final'));
00219 
00220         $final_grades = $grade_item->get_final();
00221         $this->assertEqual(3, count($final_grades));
00222     }
00223 
00224 
00225     // Retrieve all final scores for a specific userid.
00226     function sub_test_grade_item_get_final() {
00227         $grade_item = new grade_item($this->grade_items[0]);
00228         $this->assertTrue(method_exists($grade_item, 'get_final'));
00229         $final_grade = $grade_item->get_final($this->userid);
00230         $this->assertEqual($this->grade_grades[0]->finalgrade, $final_grade->finalgrade);
00231     }
00232 
00233     function sub_test_grade_item_get_sortorder() {
00234         $grade_item = new grade_item($this->grade_items[0]);
00235         $this->assertTrue(method_exists($grade_item, 'get_sortorder'));
00236         $sortorder = $grade_item->get_sortorder();
00237         $this->assertEqual($this->grade_items[0]->sortorder, $sortorder);
00238     }
00239 
00240     function sub_test_grade_item_set_sortorder() {
00241         $grade_item = new grade_item($this->grade_items[0]);
00242         $this->assertTrue(method_exists($grade_item, 'set_sortorder'));
00243         $grade_item->set_sortorder(999);
00244         $this->assertEqual($grade_item->sortorder, 999);
00245     }
00246 
00247     function sub_test_grade_item_move_after_sortorder() {
00248         $grade_item = new grade_item($this->grade_items[0]);
00249         $this->assertTrue(method_exists($grade_item, 'move_after_sortorder'));
00250         $grade_item->move_after_sortorder(5);
00251         $this->assertEqual($grade_item->sortorder, 6);
00252 
00253         $grade_item = grade_item::fetch(array('id'=>$this->grade_items[0]->id));
00254         $this->assertEqual($grade_item->sortorder, 6);
00255 
00256         $after = grade_item::fetch(array('id'=>$this->grade_items[6]->id));
00257         $this->assertEqual($after->sortorder, 8);
00258     }
00259 
00260     function sub_test_grade_item_get_name() {
00261         $grade_item = new grade_item($this->grade_items[0]);
00262         $this->assertTrue(method_exists($grade_item, 'get_name'));
00263 
00264         $name = $grade_item->get_name();
00265         $this->assertEqual($this->grade_items[0]->itemname, $name);
00266     }
00267 
00268     function sub_test_grade_item_set_parent() {
00269         $grade_item = new grade_item($this->grade_items[0]);
00270         $this->assertTrue(method_exists($grade_item, 'set_parent'));
00271 
00272         $old = $grade_item->get_parent_category();
00273         $new = new grade_category($this->grade_categories[3]);
00274         $new_item = $new->get_grade_item();
00275 
00276         $this->assertTrue($grade_item->set_parent($new->id));
00277 
00278         $new_item->update_from_db();
00279         $grade_item->update_from_db();
00280 
00281         $this->assertEqual($grade_item->categoryid, $new->id);
00282     }
00283 
00284     function sub_test_grade_item_get_parent_category() {
00285         $grade_item = new grade_item($this->grade_items[0]);
00286         $this->assertTrue(method_exists($grade_item, 'get_parent_category'));
00287 
00288         $category = $grade_item->get_parent_category();
00289         $this->assertEqual($this->grade_categories[1]->fullname, $category->fullname);
00290     }
00291 
00292     function sub_test_grade_item_load_parent_category() {
00293         $grade_item = new grade_item($this->grade_items[0]);
00294         $this->assertTrue(method_exists($grade_item, 'load_parent_category'));
00295 
00296         $category = $grade_item->load_parent_category();
00297         $this->assertEqual($this->grade_categories[1]->fullname, $category->fullname);
00298         $this->assertEqual($this->grade_categories[1]->fullname, $grade_item->parent_category->fullname);
00299     }
00300 
00301     function sub_test_grade_item_get_item_category() {
00302         $grade_item = new grade_item($this->grade_items[3]);
00303         $this->assertTrue(method_exists($grade_item, 'get_item_category'));
00304 
00305         $category = $grade_item->get_item_category();
00306         $this->assertEqual($this->grade_categories[0]->fullname, $category->fullname);
00307     }
00308 
00309     function sub_test_grade_item_load_item_category() {
00310         $grade_item = new grade_item($this->grade_items[3]);
00311         $this->assertTrue(method_exists($grade_item, 'load_item_category'));
00312 
00313         $category = $grade_item->load_item_category();
00314         $this->assertEqual($this->grade_categories[0]->fullname, $category->fullname);
00315         $this->assertEqual($this->grade_categories[0]->fullname, $grade_item->item_category->fullname);
00316     }
00317 
00318     // Test update of all final grades
00319     function sub_test_grade_item_regrade_final_grades() {
00320         $grade_item = new grade_item($this->grade_items[0]);
00321         $this->assertTrue(method_exists($grade_item, 'regrade_final_grades'));
00322         $this->assertEqual(true, $grade_item->regrade_final_grades());
00323         //TODO: add more tests
00324     }
00325 
00326     // Test the adjust_raw_grade method
00327     function sub_test_grade_item_adjust_raw_grade() {
00328         $grade_item = new grade_item($this->grade_items[0]);
00329         $this->assertTrue(method_exists($grade_item, 'adjust_raw_grade'));
00330         $grade_raw = new stdClass();
00331 
00332         $grade_raw->rawgrade = 40;
00333         $grade_raw->grademax = 100;
00334         $grade_raw->grademin = 0;
00335 
00336         $grade_item->multfactor = 1;
00337         $grade_item->plusfactor = 0;
00338         $grade_item->grademax = 50;
00339         $grade_item->grademin = 0;
00340 
00341         $original_grade_raw  = clone($grade_raw);
00342         $original_grade_item = clone($grade_item);
00343 
00344         $this->assertEqual(20, $grade_item->adjust_raw_grade($grade_raw->rawgrade, $grade_raw->grademin, $grade_raw->grademax));
00345 
00346         // Try a larger maximum grade
00347         $grade_item->grademax = 150;
00348         $grade_item->grademin = 0;
00349         $this->assertEqual(60, $grade_item->adjust_raw_grade($grade_raw->rawgrade, $grade_raw->grademin, $grade_raw->grademax));
00350 
00351         // Try larger minimum grade
00352         $grade_item->grademin = 50;
00353 
00354         $this->assertEqual(90, $grade_item->adjust_raw_grade($grade_raw->rawgrade, $grade_raw->grademin, $grade_raw->grademax));
00355 
00356         // Rescaling from a small scale (0-50) to a larger scale (0-100)
00357         $grade_raw->grademax = 50;
00358         $grade_raw->grademin = 0;
00359         $grade_item->grademax = 100;
00360         $grade_item->grademin = 0;
00361 
00362         $this->assertEqual(80, $grade_item->adjust_raw_grade($grade_raw->rawgrade, $grade_raw->grademin, $grade_raw->grademax));
00363 
00364         // Rescaling from a small scale (0-50) to a larger scale with offset (40-100)
00365         $grade_item->grademax = 100;
00366         $grade_item->grademin = 40;
00367 
00368         $this->assertEqual(88, $grade_item->adjust_raw_grade($grade_raw->rawgrade, $grade_raw->grademin, $grade_raw->grademax));
00369 
00370         // Try multfactor and plusfactor
00371         $grade_raw = clone($original_grade_raw);
00372         $grade_item = clone($original_grade_item);
00373         $grade_item->multfactor = 1.23;
00374         $grade_item->plusfactor = 3;
00375 
00376         $this->assertEqual(27.6, $grade_item->adjust_raw_grade($grade_raw->rawgrade, $grade_raw->grademin, $grade_raw->grademax));
00377 
00378         // Try multfactor below 0 and a negative plusfactor
00379         $grade_raw = clone($original_grade_raw);
00380         $grade_item = clone($original_grade_item);
00381         $grade_item->multfactor = 0.23;
00382         $grade_item->plusfactor = -3;
00383 
00384         $this->assertEqual(round(1.6), round($grade_item->adjust_raw_grade($grade_raw->rawgrade, $grade_raw->grademin, $grade_raw->grademax)));
00385     }
00386 
00387     // Test locking of grade items
00388     function sub_test_grade_item_set_locked() {
00389         
00390         //getting a grade_item from the DB as set_locked() will fail if the grade items needs to be updated
00391         //also needs to have at least one grade_grade or $grade_item->get_final(1) returns null
00392         //$grade_item = new grade_item($this->grade_items[8]);
00393         $grade_item = grade_item::fetch(array('id'=>$this->grade_items[8]->id));
00394 
00395         $this->assertTrue(method_exists($grade_item, 'set_locked'));
00396 
00397         $grade_grade = new grade_grade($grade_item->get_final(1));
00398         $this->assertTrue(empty($grade_item->locked));//not locked
00399         $this->assertTrue(empty($grade_grade->locked));//not locked
00400 
00401         $this->assertTrue($grade_item->set_locked(true, true, false));
00402         $grade_grade = new grade_grade($grade_item->get_final(1));
00403 
00404         $this->assertFalse(empty($grade_item->locked));//locked
00405         $this->assertFalse(empty($grade_grade->locked)); // individual grades should be locked too
00406 
00407         $this->assertTrue($grade_item->set_locked(false, true, false));
00408         $grade = new grade_grade($grade_item->get_final(1));
00409 
00410         $this->assertTrue(empty($grade_item->locked));
00411         $this->assertTrue(empty($grade->locked)); // individual grades should be unlocked too
00412     }
00413 
00414     function sub_test_grade_item_is_locked() {
00415         $grade_item = new grade_item($this->grade_items[10]);
00416         $this->assertTrue(method_exists($grade_item, 'is_locked'));
00417 
00418         $this->assertFalse($grade_item->is_locked());
00419         $this->assertFalse($grade_item->is_locked(1));
00420         $this->assertTrue($grade_item->set_locked(true, true, false));
00421         $this->assertTrue($grade_item->is_locked());
00422         $this->assertTrue($grade_item->is_locked(1));
00423     }
00424 
00425     // Test hiding of grade items
00426     function sub_test_grade_item_set_hidden() {
00427         $grade_item = new grade_item($this->grade_items[0]);
00428         $this->assertTrue(method_exists($grade_item, 'set_hidden'));
00429 
00430         $grade = new grade_grade($grade_item->get_final(1));
00431         $this->assertEqual(0, $grade_item->hidden);
00432         $this->assertEqual(0, $grade->hidden);
00433 
00434         $grade_item->set_hidden(666, true);
00435         $grade = new grade_grade($grade_item->get_final(1));
00436 
00437         $this->assertEqual(666, $grade_item->hidden);
00438         $this->assertEqual(666, $grade->hidden);
00439     }
00440 
00441     function sub_test_grade_item_is_hidden() {
00442         $grade_item = new grade_item($this->grade_items[0]);
00443         $this->assertTrue(method_exists($grade_item, 'is_hidden'));
00444 
00445         $this->assertFalse($grade_item->is_hidden());
00446         $this->assertFalse($grade_item->is_hidden(1));
00447 
00448         $grade_item->set_hidden(1);
00449         $this->assertTrue($grade_item->is_hidden());
00450         $this->assertTrue($grade_item->is_hidden(1));
00451 
00452         $grade_item->set_hidden(666);
00453         $this->assertFalse($grade_item->is_hidden());
00454         $this->assertFalse($grade_item->is_hidden(1));
00455 
00456         $grade_item->set_hidden(time()+666);
00457         $this->assertTrue($grade_item->is_hidden());
00458         $this->assertTrue($grade_item->is_hidden(1));
00459     }
00460 
00461     function sub_test_grade_item_is_category_item() {
00462         $grade_item = new grade_item($this->grade_items[3]);
00463         $this->assertTrue(method_exists($grade_item, 'is_category_item'));
00464         $this->assertTrue($grade_item->is_category_item());
00465     }
00466 
00467     function sub_test_grade_item_is_course_item() {
00468         $grade_item = grade_item::fetch_course_item($this->courseid);
00469         $this->assertTrue(method_exists($grade_item, 'is_course_item'));
00470         $this->assertTrue($grade_item->is_course_item());
00471     }
00472 
00473     function sub_test_grade_item_fetch_course_item() {
00474         $grade_item = grade_item::fetch_course_item($this->courseid);
00475         $this->assertTrue(method_exists($grade_item, 'fetch_course_item'));
00476         $this->assertTrue($grade_item->itemtype, 'course');
00477     }
00478 
00479     function sub_test_grade_item_depends_on() {
00480         $grade_item = new grade_item($this->grade_items[1]);
00481 
00482         // calculated grade dependency
00483         $deps = $grade_item->depends_on();
00484         sort($deps, SORT_NUMERIC); // for comparison
00485         $this->assertEqual(array($this->grade_items[0]->id), $deps);
00486 
00487         // simulate depends on returns none when locked
00488         $grade_item->locked = time();
00489         $grade_item->update();
00490         $deps = $grade_item->depends_on();
00491         sort($deps, SORT_NUMERIC); // for comparison
00492         $this->assertEqual(array(), $deps);
00493 
00494         // category dependency
00495         $grade_item = new grade_item($this->grade_items[3]);
00496         $deps = $grade_item->depends_on();
00497         sort($deps, SORT_NUMERIC); // for comparison
00498         $res = array($this->grade_items[4]->id, $this->grade_items[5]->id);
00499         $this->assertEqual($res, $deps);
00500     }
00501 
00502     function sub_test_grade_item_is_calculated() {
00503         $grade_item = new mock_grade_item_for_test_is_calculated($this);
00504         $grade_item->set_properties($grade_item, $this->grade_items[1]);
00505         $this->assertTrue(method_exists($grade_item, 'is_calculated'));
00506         $grade_itemsource = new grade_item($this->grade_items[0]);
00507         $normalizedformula = str_replace("[[$grade_itemsource->idnumber]]", "##gi$grade_itemsource->id##", $this->grade_items[1]->calculation);
00508 
00509         $grade_item->expectOnce('set_calculation', array($grade_item->calculation));
00510         $grade_item->setReturnValue('set_calculation', $normalizedformula);
00511         $this->assertTrue($grade_item->is_calculated());
00512     }
00513 
00514     function sub_test_grade_item_set_calculation() {
00515         $grade_item = new grade_item($this->grade_items[1]);
00516         $this->assertTrue(method_exists($grade_item, 'set_calculation'));
00517         $grade_itemsource = new grade_item($this->grade_items[0]);
00518 
00519         $grade_item->set_calculation('=[['.$grade_itemsource->idnumber.']]');
00520 
00521         $this->assertTrue(!empty($grade_item->needsupdate));
00522         $this->assertEqual('=##gi'.$grade_itemsource->id.'##', $grade_item->calculation);
00523     }
00524 
00525     function sub_test_grade_item_get_calculation() {
00526         $grade_item = new grade_item($this->grade_items[1]);
00527         $this->assertTrue(method_exists($grade_item, 'get_calculation'));
00528         $grade_itemsource = new grade_item($this->grade_items[0]);
00529 
00530         $denormalizedformula = str_replace('##gi'.$grade_itemsource->id.'##', '[['.$grade_itemsource->idnumber.']]', $this->grade_items[1]->calculation);
00531 
00532         $formula = $grade_item->get_calculation();
00533         $this->assertTrue(!empty($grade_item->needsupdate));
00534         $this->assertEqual($denormalizedformula, $formula);
00535     }
00536 
00537     function sub_test_grade_item_compute() {
00538         $grade_item = grade_item::fetch(array('id'=>$this->grade_items[1]->id));
00539         $this->assertTrue(method_exists($grade_item, 'compute'));
00540 
00541         //check the grade_grades in the array match those in the DB then delete $this->grade_items[1]'s grade_grades
00542         $this->grade_grades[3] = grade_grade::fetch(array('id'=>$this->grade_grades[3]->id));
00543         $grade_grade = grade_grade::fetch(array('id'=>$this->grade_grades[3]->id));
00544         $grade_grade->delete();
00545         
00546         $this->grade_grades[4] = grade_grade::fetch(array('id'=>$this->grade_grades[4]->id));
00547         $grade_grade = grade_grade::fetch(array('id'=>$this->grade_grades[4]->id));
00548         $grade_grade->delete();
00549         
00550         $this->grade_grades[5] = grade_grade::fetch(array('id'=>$this->grade_grades[5]->id));
00551         $grade_grade = grade_grade::fetch(array('id'=>$this->grade_grades[5]->id));
00552         $grade_grade->delete();
00553 
00554         //recalculate the grades (its a calculation so pulls values from other grade_items) and reinsert them
00555         $grade_item->compute();
00556         
00557         $grade_grade = grade_grade::fetch(array('userid'=>$this->grade_grades[3]->userid, 'itemid'=>$this->grade_grades[3]->itemid));
00558         $this->assertEqual($this->grade_grades[3]->finalgrade, $grade_grade->finalgrade);
00559         
00560         $grade_grade = grade_grade::fetch(array('userid'=>$this->grade_grades[4]->userid, 'itemid'=>$this->grade_grades[4]->itemid));
00561         $this->assertEqual($this->grade_grades[4]->finalgrade, $grade_grade->finalgrade);
00562         
00563         $grade_grade = grade_grade::fetch(array('userid'=>$this->grade_grades[5]->userid, 'itemid'=>$this->grade_grades[5]->itemid));
00564         $this->assertEqual($this->grade_grades[5]->finalgrade, $grade_grade->finalgrade);
00565 
00566     }
00567 
00568 }
 All Data Structures Namespaces Files Functions Variables Enumerations