|
Moodle
2.2.1
http://www.collinsharper.com
|
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 }