PageRenderTime 55ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/grade/tests/fixtures/lib.php

https://gitlab.com/JrLucena/moodle
PHP | 983 lines | 723 code | 167 blank | 93 comment | 1 complexity | 3fbd3e9c396437d82cae722a2f300655 MD5 | raw file
  1. <?php
  2. // This file is part of Moodle - http://moodle.org/
  3. //
  4. // Moodle is free software: you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation, either version 3 of the License, or
  7. // (at your option) any later version.
  8. //
  9. // Moodle is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. // GNU General Public License for more details.
  13. //
  14. // You should have received a copy of the GNU General Public License
  15. // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
  16. /**
  17. * @package core_grades
  18. * @category phpunit
  19. * @copyright nicolas@moodle.com
  20. * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  21. */
  22. defined('MOODLE_INTERNAL') || die();
  23. global $CFG;
  24. require_once($CFG->libdir . '/adminlib.php');
  25. require_once($CFG->libdir . '/gradelib.php');
  26. /**
  27. * Shared code for all grade related tests.
  28. *
  29. * Here is a brief explanation of the test data set up in these unit tests.
  30. * category1 => array(category2 => array(grade_item1, grade_item2), category3 => array(grade_item3))
  31. * 3 users for 3 grade_items
  32. */
  33. abstract class grade_base_testcase extends advanced_testcase {
  34. protected $course;
  35. protected $activities = array();
  36. protected $grade_items = array();
  37. protected $grade_categories = array();
  38. protected $grade_grades = array();
  39. protected $grade_outcomes = array();
  40. protected $scale = array();
  41. protected $scalemax = array();
  42. protected $courseid;
  43. protected $userid;
  44. protected function setUp() {
  45. global $CFG;
  46. parent::setup();
  47. $this->resetAfterTest(true);
  48. $CFG->grade_droplow = -1;
  49. $CFG->grade_keephigh = -1;
  50. $CFG->grade_aggregation = -1;
  51. $CFG->grade_aggregateonlygraded = -1;
  52. $CFG->grade_aggregateoutcomes = -1;
  53. $this->course = $this->getDataGenerator()->create_course();
  54. $this->courseid = $this->course->id;
  55. $this->user[0] = $this->getDataGenerator()->create_user();
  56. $this->user[1] = $this->getDataGenerator()->create_user();
  57. $this->user[2] = $this->getDataGenerator()->create_user();
  58. $this->user[3] = $this->getDataGenerator()->create_user();
  59. $this->userid = $this->user[0]->id;
  60. $this->load_modules();
  61. $this->load_scales();
  62. $this->load_grade_categories();
  63. $this->load_grade_items();
  64. $this->load_grade_grades();
  65. $this->load_grade_outcomes();
  66. }
  67. private function load_modules() {
  68. $this->activities[0] = $this->getDataGenerator()->create_module('assign', array('course'=>$this->course->id));
  69. $this->course_module[0] = get_coursemodule_from_instance('assign', $this->activities[0]->id);
  70. $this->activities[1] = $this->getDataGenerator()->create_module('assign', array('course'=>$this->course->id));
  71. $this->course_module[1] = get_coursemodule_from_instance('assign', $this->activities[1]->id);
  72. $this->activities[2] = $this->getDataGenerator()->create_module('forum', array('course'=>$this->course->id));
  73. $this->course_module[2] = get_coursemodule_from_instance('forum', $this->activities[2]->id);
  74. $this->activities[3] = $this->getDataGenerator()->create_module('page', array('course'=>$this->course->id));
  75. $this->course_module[3] = get_coursemodule_from_instance('page', $this->activities[3]->id);
  76. $this->activities[4] = $this->getDataGenerator()->create_module('forum', array('course'=>$this->course->id));
  77. $this->course_module[4] = get_coursemodule_from_instance('forum', $this->activities[4]->id);
  78. $this->activities[5] = $this->getDataGenerator()->create_module('forum', array('course'=>$this->course->id));
  79. $this->course_module[5] = get_coursemodule_from_instance('forum', $this->activities[5]->id);
  80. $this->activities[6] = $this->getDataGenerator()->create_module('forum', array('course'=>$this->course->id));
  81. $this->course_module[6] = get_coursemodule_from_instance('forum', $this->activities[6]->id);
  82. $this->activities[7] = $this->getDataGenerator()->create_module('quiz', array('course'=>$this->course->id));
  83. $this->course_module[7] = get_coursemodule_from_instance('quiz', $this->activities[7]->id);
  84. }
  85. private function load_scales() {
  86. $scale = new stdClass();
  87. $scale->name = 'unittestscale1';
  88. $scale->courseid = $this->course->id;
  89. $scale->userid = $this->user[0]->id;
  90. $scale->scale = 'Way off topic, Not very helpful, Fairly neutral, Fairly helpful, Supportive, Some good information, Perfect answer!';
  91. $scale->description = 'This scale defines some of qualities that make posts helpful within the Moodle help forums.\n Your feedback will help others see how their posts are being received.';
  92. $this->scale[0] = $this->getDataGenerator()->create_scale($scale);
  93. $this->scalemax[0] = substr_count($scale->scale, ',');
  94. $scale = new stdClass();
  95. $scale->name = 'unittestscale2';
  96. $scale->courseid = $this->course->id;
  97. $scale->userid = $this->user[0]->id;
  98. $scale->scale = 'Distinction, Very Good, Good, Pass, Fail';
  99. $scale->description = 'This scale is used to mark standard assignments.';
  100. $this->scale[1] = $this->getDataGenerator()->create_scale($scale);
  101. $this->scalemax[1] = substr_count($scale->scale, ',');
  102. $scale = new stdClass();
  103. $scale->name = 'unittestscale3';
  104. $scale->courseid = $this->course->id;
  105. $scale->userid = $this->user[0]->id;
  106. $scale->scale = 'Loner, Contentious, Disinterested, Participative, Follower, Leader';
  107. $scale->description = 'Describes the level of teamwork of a student.';
  108. $temp = explode(',', $scale->scale);
  109. $scale->max = count($temp) -1;
  110. $this->scale[2] = $this->getDataGenerator()->create_scale($scale);
  111. $this->scalemax[2] = substr_count($scale->scale, ',');
  112. $scale = new stdClass();
  113. $scale->name = 'unittestscale4';
  114. $scale->courseid = $this->course->id;
  115. $scale->userid = $this->user[0]->id;
  116. $scale->scale = 'Does not understand theory, Understands theory but fails practice, Manages through, Excels';
  117. $scale->description = 'Level of expertise at a technical task, with a theoretical framework.';
  118. $temp = explode(',', $scale->scale);
  119. $scale->max = count($temp) -1;
  120. $this->scale[3] = $this->getDataGenerator()->create_scale($scale);
  121. $this->scalemax[3] = substr_count($scale->scale, ',');
  122. $scale = new stdClass();
  123. $scale->name = 'unittestscale5';
  124. $scale->courseid = $this->course->id;
  125. $scale->userid = $this->user[0]->id;
  126. $scale->scale = 'Insufficient, Acceptable, Excellent.';
  127. $scale->description = 'Description of skills.';
  128. $this->scale[4] = $this->getDataGenerator()->create_scale($scale);
  129. $this->scalemax[4] = substr_count($scale->scale, ',');
  130. }
  131. /**
  132. * Load grade_category data into the database, and adds the corresponding objects to this class' variable.
  133. * category structure:
  134. course category
  135. |
  136. +--------+-------------+-----------------------+
  137. | | |
  138. unittestcategory1 level1category unittestcategory7
  139. | |
  140. +--------+-------------+ +------------+---------------+
  141. | | | |
  142. unittestcategory2 unittestcategory3 unittestcategory5 unittestcategory6
  143. */
  144. private function load_grade_categories() {
  145. global $DB;
  146. $course_category = grade_category::fetch_course_category($this->course->id);
  147. $grade_category = new stdClass();
  148. $grade_category->fullname = 'unittestcategory1';
  149. $grade_category->courseid = $this->course->id;
  150. $grade_category->aggregation = GRADE_AGGREGATE_MEAN;
  151. $grade_category->aggregateonlygraded = 1;
  152. $grade_category->keephigh = 0;
  153. $grade_category->droplow = 0;
  154. $grade_category->parent = $course_category->id;
  155. $grade_category->timecreated = time();
  156. $grade_category->timemodified = time();
  157. $grade_category->depth = 2;
  158. $grade_category->id = $DB->insert_record('grade_categories', $grade_category);
  159. $grade_category->path = '/'.$course_category->id.'/'.$grade_category->id.'/';
  160. $DB->update_record('grade_categories', $grade_category);
  161. $this->grade_categories[0] = $grade_category;
  162. $grade_category = new stdClass();
  163. $grade_category->fullname = 'unittestcategory2';
  164. $grade_category->courseid = $this->course->id;
  165. $grade_category->aggregation = GRADE_AGGREGATE_MEAN;
  166. $grade_category->aggregateonlygraded = 1;
  167. $grade_category->keephigh = 0;
  168. $grade_category->droplow = 0;
  169. $grade_category->parent = $this->grade_categories[0]->id;
  170. $grade_category->timecreated = time();
  171. $grade_category->timemodified = time();
  172. $grade_category->depth = 3;
  173. $grade_category->id = $DB->insert_record('grade_categories', $grade_category);
  174. $grade_category->path = $this->grade_categories[0]->path.$grade_category->id.'/';
  175. $DB->update_record('grade_categories', $grade_category);
  176. $this->grade_categories[1] = $grade_category;
  177. $grade_category = new stdClass();
  178. $grade_category->fullname = 'unittestcategory3';
  179. $grade_category->courseid = $this->course->id;
  180. $grade_category->aggregation = GRADE_AGGREGATE_MEAN;
  181. $grade_category->aggregateonlygraded = 1;
  182. $grade_category->keephigh = 0;
  183. $grade_category->droplow = 0;
  184. $grade_category->parent = $this->grade_categories[0]->id;
  185. $grade_category->timecreated = time();
  186. $grade_category->timemodified = time();
  187. $grade_category->depth = 3;
  188. $grade_category->id = $DB->insert_record('grade_categories', $grade_category);
  189. $grade_category->path = $this->grade_categories[0]->path.$grade_category->id.'/';
  190. $DB->update_record('grade_categories', $grade_category);
  191. $this->grade_categories[2] = $grade_category;
  192. // A category with no parent, but grade_items as children.
  193. $grade_category = new stdClass();
  194. $grade_category->fullname = 'level1category';
  195. $grade_category->courseid = $this->course->id;
  196. $grade_category->aggregation = GRADE_AGGREGATE_MEAN;
  197. $grade_category->aggregateonlygraded = 1;
  198. $grade_category->keephigh = 0;
  199. $grade_category->droplow = 0;
  200. $grade_category->parent = $course_category->id;
  201. $grade_category->timecreated = time();
  202. $grade_category->timemodified = time();
  203. $grade_category->depth = 2;
  204. $grade_category->id = $DB->insert_record('grade_categories', $grade_category);
  205. $grade_category->path = '/'.$course_category->id.'/'.$grade_category->id.'/';
  206. $DB->update_record('grade_categories', $grade_category);
  207. $this->grade_categories[3] = $grade_category;
  208. $grade_category = new stdClass();
  209. $grade_category->fullname = 'unittestcategory7';
  210. $grade_category->courseid = $this->course->id;
  211. $grade_category->aggregation = GRADE_AGGREGATE_MEAN;
  212. $grade_category->aggregateonlygraded = 1;
  213. $grade_category->keephigh = 0;
  214. $grade_category->droplow = 0;
  215. $grade_category->parent = $course_category->id;
  216. $grade_category->timecreated = time();
  217. $grade_category->timemodified = time();
  218. $grade_category->depth = 2;
  219. $grade_category->id = $DB->insert_record('grade_categories', $grade_category);
  220. $grade_category->path = '/'.$course_category->id.'/'.$grade_category->id.'/';
  221. $DB->update_record('grade_categories', $grade_category);
  222. $this->grade_categories[4] = $grade_category;
  223. $grade_category = new stdClass();
  224. $grade_category->fullname = 'unittestcategory5';
  225. $grade_category->courseid = $this->course->id;
  226. $grade_category->aggregation = GRADE_AGGREGATE_MEAN;
  227. $grade_category->aggregateonlygraded = 1;
  228. $grade_category->keephigh = 0;
  229. $grade_category->droplow = 0;
  230. $grade_category->parent = $this->grade_categories[4]->id;
  231. $grade_category->timecreated = time();
  232. $grade_category->timemodified = time();
  233. $grade_category->depth = 3;
  234. $grade_category->id = $DB->insert_record('grade_categories', $grade_category);
  235. $grade_category->path = $this->grade_categories[4]->path.$grade_category->id.'/';
  236. $DB->update_record('grade_categories', $grade_category);
  237. $this->grade_categories[5] = $grade_category;
  238. $grade_category = new stdClass();
  239. $grade_category->fullname = 'unittestcategory6';
  240. $grade_category->courseid = $this->course->id;
  241. $grade_category->aggregation = GRADE_AGGREGATE_MEAN;
  242. $grade_category->aggregateonlygraded = 1;
  243. $grade_category->keephigh = 0;
  244. $grade_category->droplow = 0;
  245. $grade_category->parent = $this->grade_categories[4]->id;
  246. $grade_category->timecreated = time();
  247. $grade_category->timemodified = time();
  248. $grade_category->depth = 3;
  249. $grade_category->id = $DB->insert_record('grade_categories', $grade_category);
  250. $grade_category->path = $this->grade_categories[4]->path.$grade_category->id.'/';
  251. $DB->update_record('grade_categories', $grade_category);
  252. $this->grade_categories[6] = $grade_category;
  253. }
  254. /**
  255. * Load grade_item data into the database, and adds the corresponding objects to this class' variable.
  256. */
  257. protected function load_grade_items() {
  258. global $DB;
  259. // Purge all items created by module generators.
  260. $DB->delete_records('grade_items', array('itemtype'=>'mod'));
  261. $course_category = grade_category::fetch_course_category($this->course->id);
  262. // id = 0
  263. $grade_item = new stdClass();
  264. $grade_item->courseid = $this->course->id;
  265. $grade_item->categoryid = $this->grade_categories[1]->id;
  266. $grade_item->itemname = 'unittestgradeitem1';
  267. $grade_item->itemtype = 'mod';
  268. $grade_item->itemmodule = $this->course_module[0]->modname;
  269. $grade_item->iteminstance = $this->course_module[0]->instance;
  270. $grade_item->gradetype = GRADE_TYPE_VALUE;
  271. $grade_item->grademin = 30;
  272. $grade_item->grademax = 110;
  273. $grade_item->itemnumber = 1;
  274. $grade_item->idnumber = 'item id 0';
  275. $grade_item->iteminfo = 'Grade item 0 used for unit testing';
  276. $grade_item->timecreated = time();
  277. $grade_item->timemodified = time();
  278. $grade_item->sortorder = 3;
  279. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  280. $this->grade_items[0] = $grade_item;
  281. // id = 1
  282. $grade_item = new stdClass();
  283. $grade_item->courseid = $this->course->id;
  284. $grade_item->categoryid = $this->grade_categories[1]->id;
  285. $grade_item->itemname = 'unittestgradeitem2';
  286. $grade_item->itemtype = 'import';
  287. $grade_item->itemmodule = $this->course_module[1]->modname;
  288. $grade_item->iteminstance = $this->course_module[1]->instance;
  289. $grade_item->calculation = '= ##gi'.$this->grade_items[0]->id.'## + 30 + [[item id 0]] - [[item id 0]]';
  290. $grade_item->gradetype = GRADE_TYPE_VALUE;
  291. $grade_item->itemnumber = null;
  292. $grade_item->grademin = 0;
  293. $grade_item->grademax = 100;
  294. $grade_item->iteminfo = 'Grade item 1 used for unit testing';
  295. $grade_item->timecreated = time();
  296. $grade_item->timemodified = time();
  297. $grade_item->sortorder = 4;
  298. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  299. $this->grade_items[1] = $grade_item;
  300. // id = 2
  301. $grade_item = new stdClass();
  302. $grade_item->courseid = $this->course->id;
  303. $grade_item->categoryid = $this->grade_categories[2]->id;
  304. $grade_item->itemname = 'unittestgradeitem3';
  305. $grade_item->itemtype = 'mod';
  306. $grade_item->itemmodule = $this->course_module[2]->modname;
  307. $grade_item->iteminstance = $this->course_module[2]->instance;
  308. $grade_item->gradetype = GRADE_TYPE_SCALE;
  309. $grade_item->scaleid = $this->scale[0]->id;
  310. $grade_item->grademin = 0;
  311. $grade_item->grademax = $this->scalemax[0];
  312. $grade_item->iteminfo = 'Grade item 2 used for unit testing';
  313. $grade_item->timecreated = time();
  314. $grade_item->timemodified = time();
  315. $grade_item->sortorder = 6;
  316. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  317. $this->grade_items[2] = $grade_item;
  318. // Load grade_items associated with the 3 categories.
  319. // id = 3
  320. $grade_item = new stdClass();
  321. $grade_item->courseid = $this->course->id;
  322. $grade_item->iteminstance = $this->grade_categories[0]->id;
  323. $grade_item->itemname = 'unittestgradeitemcategory1';
  324. $grade_item->needsupdate = 0;
  325. $grade_item->itemtype = 'category';
  326. $grade_item->gradetype = GRADE_TYPE_VALUE;
  327. $grade_item->grademin = 0;
  328. $grade_item->grademax = 100;
  329. $grade_item->iteminfo = 'Grade item 3 used for unit testing';
  330. $grade_item->timecreated = time();
  331. $grade_item->timemodified = time();
  332. $grade_item->sortorder = 1;
  333. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  334. $this->grade_items[3] = $grade_item;
  335. // id = 4
  336. $grade_item = new stdClass();
  337. $grade_item->courseid = $this->course->id;
  338. $grade_item->iteminstance = $this->grade_categories[1]->id;
  339. $grade_item->itemname = 'unittestgradeitemcategory2';
  340. $grade_item->itemtype = 'category';
  341. $grade_item->gradetype = GRADE_TYPE_VALUE;
  342. $grade_item->needsupdate = 0;
  343. $grade_item->grademin = 0;
  344. $grade_item->grademax = 100;
  345. $grade_item->iteminfo = 'Grade item 4 used for unit testing';
  346. $grade_item->timecreated = time();
  347. $grade_item->timemodified = time();
  348. $grade_item->sortorder = 2;
  349. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  350. $this->grade_items[4] = $grade_item;
  351. // id = 5
  352. $grade_item = new stdClass();
  353. $grade_item->courseid = $this->course->id;
  354. $grade_item->iteminstance = $this->grade_categories[2]->id;
  355. $grade_item->itemname = 'unittestgradeitemcategory3';
  356. $grade_item->itemtype = 'category';
  357. $grade_item->gradetype = GRADE_TYPE_VALUE;
  358. $grade_item->needsupdate = true;
  359. $grade_item->grademin = 0;
  360. $grade_item->grademax = 100;
  361. $grade_item->iteminfo = 'Grade item 5 used for unit testing';
  362. $grade_item->timecreated = time();
  363. $grade_item->timemodified = time();
  364. $grade_item->sortorder = 5;
  365. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  366. $this->grade_items[5] = $grade_item;
  367. // Orphan grade_item.
  368. // id = 6
  369. $grade_item = new stdClass();
  370. $grade_item->courseid = $this->course->id;
  371. $grade_item->categoryid = $course_category->id;
  372. $grade_item->itemname = 'unittestorphangradeitem1';
  373. $grade_item->itemtype = 'mod';
  374. $grade_item->itemmodule = $this->course_module[4]->modname;
  375. $grade_item->iteminstance = $this->course_module[4]->instance;
  376. $grade_item->itemnumber = 0;
  377. $grade_item->gradetype = GRADE_TYPE_VALUE;
  378. $grade_item->grademin = 10;
  379. $grade_item->grademax = 120;
  380. $grade_item->locked = time();
  381. $grade_item->iteminfo = 'Orphan Grade 6 item used for unit testing';
  382. $grade_item->timecreated = time();
  383. $grade_item->timemodified = time();
  384. $grade_item->sortorder = 7;
  385. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  386. $this->grade_items[6] = $grade_item;
  387. // 2 grade items under level1category.
  388. // id = 7
  389. $grade_item = new stdClass();
  390. $grade_item->courseid = $this->course->id;
  391. $grade_item->categoryid = $this->grade_categories[3]->id;
  392. $grade_item->itemname = 'singleparentitem1';
  393. $grade_item->itemtype = 'mod';
  394. $grade_item->itemmodule = $this->course_module[5]->modname;
  395. $grade_item->iteminstance = $this->course_module[5]->instance;
  396. $grade_item->gradetype = GRADE_TYPE_SCALE;
  397. $grade_item->scaleid = $this->scale[0]->id;
  398. $grade_item->grademin = 0;
  399. $grade_item->grademax = $this->scalemax[0];
  400. $grade_item->iteminfo = 'Grade item 7 used for unit testing';
  401. $grade_item->timecreated = time();
  402. $grade_item->timemodified = time();
  403. $grade_item->sortorder = 9;
  404. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  405. $this->grade_items[7] = $grade_item;
  406. // id = 8
  407. $grade_item = new stdClass();
  408. $grade_item->courseid = $this->course->id;
  409. $grade_item->categoryid = $this->grade_categories[3]->id;
  410. $grade_item->itemname = 'singleparentitem2';
  411. $grade_item->itemtype = 'mod';
  412. $grade_item->itemmodule = $this->course_module[6]->modname;
  413. $grade_item->iteminstance = $this->course_module[6]->instance;
  414. $grade_item->gradetype = GRADE_TYPE_VALUE;
  415. $grade_item->grademin = 0;
  416. $grade_item->grademax = 100;
  417. $grade_item->iteminfo = 'Grade item 8 used for unit testing';
  418. $grade_item->timecreated = time();
  419. $grade_item->timemodified = time();
  420. $grade_item->sortorder = 10;
  421. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  422. $this->grade_items[8] = $grade_item;
  423. // Grade_item for level1category.
  424. // id = 9
  425. $grade_item = new stdClass();
  426. $grade_item->courseid = $this->course->id;
  427. $grade_item->itemname = 'grade_item for level1 category';
  428. $grade_item->itemtype = 'category';
  429. $grade_item->iteminstance = $this->grade_categories[3]->id;
  430. $grade_item->needsupdate = true;
  431. $grade_item->gradetype = GRADE_TYPE_VALUE;
  432. $grade_item->grademin = 0;
  433. $grade_item->grademax = 100;
  434. $grade_item->iteminfo = 'Orphan Grade item 9 used for unit testing';
  435. $grade_item->timecreated = time();
  436. $grade_item->timemodified = time();
  437. $grade_item->sortorder = 8;
  438. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  439. $this->grade_items[9] = $grade_item;
  440. // Manual grade_item.
  441. // id = 10
  442. $grade_item = new stdClass();
  443. $grade_item->courseid = $this->course->id;
  444. $grade_item->categoryid = $course_category->id;
  445. $grade_item->itemname = 'manual grade_item';
  446. $grade_item->itemtype = 'manual';
  447. $grade_item->itemnumber = 0;
  448. $grade_item->needsupdate = false;
  449. $grade_item->gradetype = GRADE_TYPE_VALUE;
  450. $grade_item->grademin = 0;
  451. $grade_item->grademax = 100;
  452. $grade_item->iteminfo = 'Manual grade item 10 used for unit testing';
  453. $grade_item->timecreated = time();
  454. $grade_item->timemodified = time();
  455. $grade_item->sortorder = 10;
  456. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  457. $this->grade_items[10] = $grade_item;
  458. // Quiz grade_item (course_module = 7).
  459. // id = 11
  460. $grade_item = new stdClass();
  461. $grade_item->courseid = $this->course->id;
  462. $grade_item->categoryid = $course_category->id;
  463. $grade_item->itemname = 'Quiz grade item';
  464. $grade_item->itemtype = 'mod';
  465. $grade_item->itemmodule = $this->course_module[7]->modname;
  466. $grade_item->iteminstance = $this->course_module[7]->instance;
  467. $grade_item->itemnumber = 0;
  468. $grade_item->gradetype = GRADE_TYPE_VALUE;
  469. $grade_item->grademin = 0;
  470. $grade_item->grademax = 100;
  471. $grade_item->locked = 0;
  472. $grade_item->iteminfo = 'Quiz grade item used for unit testing';
  473. $grade_item->timecreated = time();
  474. $grade_item->timemodified = time();
  475. $grade_item->sortorder = 11;
  476. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  477. $this->grade_items[11] = $grade_item;
  478. // id = 12
  479. $grade_item = new stdClass();
  480. $grade_item->courseid = $this->course->id;
  481. $grade_item->iteminstance = $this->grade_categories[4]->id;
  482. $grade_item->itemname = 'unittestgradeitemcategory7';
  483. $grade_item->itemtype = 'category';
  484. $grade_item->gradetype = GRADE_TYPE_VALUE;
  485. $grade_item->needsupdate = true;
  486. $grade_item->grademin = 0;
  487. $grade_item->grademax = 100;
  488. $grade_item->iteminfo = 'Grade item 12 used for unit testing';
  489. $grade_item->timecreated = time();
  490. $grade_item->timemodified = time();
  491. $grade_item->sortorder = 12;
  492. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  493. $this->grade_items[12] = $grade_item;
  494. // id = 13
  495. $grade_item = new stdClass();
  496. $grade_item->courseid = $this->course->id;
  497. $grade_item->iteminstance = $this->grade_categories[5]->id;
  498. $grade_item->itemname = 'unittestgradeitemcategory5';
  499. $grade_item->itemtype = 'category';
  500. $grade_item->gradetype = GRADE_TYPE_VALUE;
  501. $grade_item->needsupdate = true;
  502. $grade_item->grademin = 0;
  503. $grade_item->grademax = 100;
  504. $grade_item->iteminfo = 'Grade item 13 used for unit testing';
  505. $grade_item->timecreated = time();
  506. $grade_item->timemodified = time();
  507. $grade_item->sortorder = 13;
  508. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  509. $this->grade_items[13] = $grade_item;
  510. // id = 14
  511. $grade_item = new stdClass();
  512. $grade_item->courseid = $this->course->id;
  513. $grade_item->iteminstance = $this->grade_categories[6]->id;
  514. $grade_item->itemname = 'unittestgradeitemcategory6';
  515. $grade_item->itemtype = 'category';
  516. $grade_item->gradetype = GRADE_TYPE_VALUE;
  517. $grade_item->needsupdate = true;
  518. $grade_item->grademin = 0;
  519. $grade_item->grademax = 100;
  520. $grade_item->iteminfo = 'Grade item 14 used for unit testing';
  521. $grade_item->timecreated = time();
  522. $grade_item->timemodified = time();
  523. $grade_item->sortorder = 14;
  524. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  525. $this->grade_items[14] = $grade_item;
  526. // Manual grade_item
  527. // id = 15
  528. $grade_item = new stdClass();
  529. $grade_item->courseid = $this->course->id;
  530. $grade_item->categoryid = $this->grade_categories[5]->id;
  531. $grade_item->itemname = 'manual grade_item';
  532. $grade_item->itemtype = 'manual';
  533. $grade_item->itemnumber = 0;
  534. $grade_item->needsupdate = false;
  535. $grade_item->gradetype = GRADE_TYPE_VALUE;
  536. $grade_item->grademin = 0;
  537. $grade_item->grademax = 100;
  538. $grade_item->iteminfo = 'Manual grade item 15 used for unit testing';
  539. $grade_item->timecreated = time();
  540. $grade_item->timemodified = time();
  541. $grade_item->sortorder = 15;
  542. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  543. $this->grade_items[15] = $grade_item;
  544. // Manual grade_item
  545. // id = 16
  546. $grade_item = new stdClass();
  547. $grade_item->courseid = $this->course->id;
  548. $grade_item->categoryid = $this->grade_categories[6]->id;
  549. $grade_item->itemname = 'manual grade_item';
  550. $grade_item->itemtype = 'manual';
  551. $grade_item->itemnumber = 0;
  552. $grade_item->needsupdate = false;
  553. $grade_item->gradetype = GRADE_TYPE_SCALE;
  554. $grade_item->grademin = 0;
  555. $grade_item->grademax = 100;
  556. $grade_item->iteminfo = 'Manual grade item 16 used for unit testing';
  557. $grade_item->timecreated = time();
  558. $grade_item->timemodified = time();
  559. $grade_item->sortorder = 16;
  560. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  561. $this->grade_items[16] = $grade_item;
  562. // $this->grade_items[17] loaded in load_grade_outcomes() in order to use an outcome id.
  563. }
  564. /**
  565. * Load grade_grades data into the database, and adds the corresponding objects to this class' variable.
  566. */
  567. private function load_grade_grades() {
  568. global $DB;
  569. // This method is called once for each test method. Avoid adding things to $this->grade_grades multiple times.
  570. $this->grade_grades = array();
  571. // Grades for grade_item 1.
  572. $grade = new stdClass();
  573. $grade->itemid = $this->grade_items[0]->id;
  574. $grade->userid = $this->user[1]->id;
  575. $grade->rawgrade = 15; // too small
  576. $grade->finalgrade = 30;
  577. $grade->timecreated = time();
  578. $grade->timemodified = time();
  579. $grade->information = '1 of 17 grade_grades';
  580. $grade->informationformat = FORMAT_PLAIN;
  581. $grade->feedback = 'Good, but not good enough..';
  582. $grade->feedbackformat = FORMAT_PLAIN;
  583. $grade->id = $DB->insert_record('grade_grades', $grade);
  584. $this->grade_grades[0] = $grade;
  585. $grade = new stdClass();
  586. $grade->itemid = $this->grade_items[0]->id;
  587. $grade->userid = $this->user[2]->id;
  588. $grade->rawgrade = 40;
  589. $grade->finalgrade = 40;
  590. $grade->timecreated = time();
  591. $grade->timemodified = time();
  592. $grade->information = '2 of 17 grade_grades';
  593. $grade->id = $DB->insert_record('grade_grades', $grade);
  594. $this->grade_grades[1] = $grade;
  595. $grade = new stdClass();
  596. $grade->itemid = $this->grade_items[0]->id;
  597. $grade->userid = $this->user[3]->id;
  598. $grade->rawgrade = 170; // too big
  599. $grade->finalgrade = 110;
  600. $grade->timecreated = time();
  601. $grade->timemodified = time();
  602. $grade->information = '3 of 17 grade_grades';
  603. $grade->id = $DB->insert_record('grade_grades', $grade);
  604. $this->grade_grades[2] = $grade;
  605. // No raw grades for grade_item 2 - it is calculated.
  606. $grade = new stdClass();
  607. $grade->itemid = $this->grade_items[1]->id;
  608. $grade->userid = $this->user[1]->id;
  609. $grade->finalgrade = 60;
  610. $grade->timecreated = time();
  611. $grade->timemodified = time();
  612. $grade->information = '4 of 17 grade_grades';
  613. $grade->id = $DB->insert_record('grade_grades', $grade);
  614. $this->grade_grades[3] = $grade;
  615. $grade = new stdClass();
  616. $grade->itemid = $this->grade_items[1]->id;
  617. $grade->userid = $this->user[2]->id;
  618. $grade->finalgrade = 70;
  619. $grade->timecreated = time();
  620. $grade->timemodified = time();
  621. $grade->information = '5 of 17 grade_grades';
  622. $grade->id = $DB->insert_record('grade_grades', $grade);
  623. $this->grade_grades[4] = $grade;
  624. $grade = new stdClass();
  625. $grade->itemid = $this->grade_items[1]->id;
  626. $grade->userid = $this->user[3]->id;
  627. $grade->finalgrade = 100;
  628. $grade->timecreated = time();
  629. $grade->timemodified = time();
  630. $grade->information = '6 of 17 grade_grades';
  631. $grade->id = $DB->insert_record('grade_grades', $grade);
  632. $this->grade_grades[5] = $grade;
  633. // Grades for grade_item 3.
  634. $grade = new stdClass();
  635. $grade->itemid = $this->grade_items[2]->id;
  636. $grade->userid = $this->user[1]->id;
  637. $grade->rawgrade = 2;
  638. $grade->finalgrade = 6;
  639. $grade->scaleid = $this->scale[3]->id;
  640. $grade->timecreated = time();
  641. $grade->timemodified = time();
  642. $grade->information = '7 of 17 grade_grades';
  643. $grade->id = $DB->insert_record('grade_grades', $grade);
  644. $this->grade_grades[6] = $grade;
  645. $grade = new stdClass();
  646. $grade->itemid = $this->grade_items[2]->id;
  647. $grade->userid = $this->user[2]->id;
  648. $grade->rawgrade = 3;
  649. $grade->finalgrade = 2;
  650. $grade->scaleid = $this->scale[3]->id;
  651. $grade->timecreated = time();
  652. $grade->timemodified = time();
  653. $grade->information = '8 of 17 grade_grades';
  654. $grade->id = $DB->insert_record('grade_grades', $grade);
  655. $this->grade_grades[] = $grade;
  656. $grade = new stdClass();
  657. $grade->itemid = $this->grade_items[2]->id;
  658. $grade->userid = $this->user[3]->id;
  659. $grade->rawgrade = 1;
  660. $grade->finalgrade = 3;
  661. $grade->scaleid = $this->scale[3]->id;
  662. $grade->timecreated = time();
  663. $grade->timemodified = time();
  664. $grade->information = '9 of 17 grade_grades';
  665. $grade->id = $DB->insert_record('grade_grades', $grade);
  666. $this->grade_grades[] = $grade;
  667. // Grades for grade_item 7.
  668. $grade = new stdClass();
  669. $grade->itemid = $this->grade_items[6]->id;
  670. $grade->userid = $this->user[1]->id;
  671. $grade->rawgrade = 97;
  672. $grade->finalgrade = 69;
  673. $grade->timecreated = time();
  674. $grade->timemodified = time();
  675. $grade->information = '10 of 17 grade_grades';
  676. $grade->id = $DB->insert_record('grade_grades', $grade);
  677. $this->grade_grades[] = $grade;
  678. $grade = new stdClass();
  679. $grade->itemid = $this->grade_items[6]->id;
  680. $grade->userid = $this->user[2]->id;
  681. $grade->rawgrade = 49;
  682. $grade->finalgrade = 87;
  683. $grade->timecreated = time();
  684. $grade->timemodified = time();
  685. $grade->information = '11 of 17 grade_grades';
  686. $grade->id = $DB->insert_record('grade_grades', $grade);
  687. $this->grade_grades[] = $grade;
  688. $grade = new stdClass();
  689. $grade->itemid = $this->grade_items[6]->id;
  690. $grade->userid = $this->user[3]->id;
  691. $grade->rawgrade = 67;
  692. $grade->finalgrade = 94;
  693. $grade->timecreated = time();
  694. $grade->timemodified = time();
  695. $grade->information = '12 of 17 grade_grades';
  696. $grade->id = $DB->insert_record('grade_grades', $grade);
  697. $this->grade_grades[] = $grade;
  698. // Grades for grade_item 8.
  699. $grade = new stdClass();
  700. $grade->itemid = $this->grade_items[7]->id;
  701. $grade->userid = $this->user[2]->id;
  702. $grade->rawgrade = 3;
  703. $grade->finalgrade = 3;
  704. $grade->timecreated = time();
  705. $grade->timemodified = time();
  706. $grade->information = '13 of 17 grade_grades';
  707. $grade->id = $DB->insert_record('grade_grades', $grade);
  708. $this->grade_grades[] = $grade;
  709. $grade = new stdClass();
  710. $grade->itemid = $this->grade_items[7]->id;
  711. $grade->userid = $this->user[3]->id;
  712. $grade->rawgrade = 6;
  713. $grade->finalgrade = 6;
  714. $grade->timecreated = time();
  715. $grade->timemodified = time();
  716. $grade->information = '14 of 17 grade_grades';
  717. $grade->id = $DB->insert_record('grade_grades', $grade);
  718. $this->grade_grades[] = $grade;
  719. // Grades for grade_item 9.
  720. $grade = new stdClass();
  721. $grade->itemid = $this->grade_items[8]->id;
  722. $grade->userid = $this->user[1]->id;
  723. $grade->rawgrade = 20;
  724. $grade->finalgrade = 20;
  725. $grade->timecreated = time();
  726. $grade->timemodified = time();
  727. $grade->information = '15 of 17 grade_grades';
  728. $grade->id = $DB->insert_record('grade_grades', $grade);
  729. $this->grade_grades[] = $grade;
  730. $grade = new stdClass();
  731. $grade->itemid = $this->grade_items[8]->id;
  732. $grade->userid = $this->user[2]->id;
  733. $grade->rawgrade = 50;
  734. $grade->finalgrade = 50;
  735. $grade->timecreated = time();
  736. $grade->timemodified = time();
  737. $grade->information = '16 of 17 grade_grades';
  738. $grade->id = $DB->insert_record('grade_grades', $grade);
  739. $this->grade_grades[] = $grade;
  740. $grade = new stdClass();
  741. $grade->itemid = $this->grade_items[8]->id;
  742. $grade->userid = $this->user[3]->id;
  743. $grade->rawgrade = 100;
  744. $grade->finalgrade = 100;
  745. $grade->timecreated = time();
  746. $grade->timemodified = time();
  747. $grade->information = '17 of 17 grade_grades';
  748. $grade->id = $DB->insert_record('grade_grades', $grade);
  749. $this->grade_grades[] = $grade;
  750. }
  751. /**
  752. * Load grade_outcome data into the database, and adds the corresponding objects to this class' variable.
  753. */
  754. private function load_grade_outcomes() {
  755. global $DB;
  756. // This method is called once for each test method. Avoid adding things to $this->grade_outcomes multiple times.
  757. $this->grade_outcomes = array();
  758. // Calculation for grade_item 1.
  759. $grade_outcome = new stdClass();
  760. $grade_outcome->fullname = 'Team work';
  761. $grade_outcome->shortname = 'Team work';
  762. $grade_outcome->fullname = 'Team work outcome';
  763. $grade_outcome->timecreated = time();
  764. $grade_outcome->timemodified = time();
  765. $grade_outcome->scaleid = $this->scale[2]->id;
  766. $grade_outcome->id = $DB->insert_record('grade_outcomes', $grade_outcome);
  767. $this->grade_outcomes[] = $grade_outcome;
  768. // Calculation for grade_item 2.
  769. $grade_outcome = new stdClass();
  770. $grade_outcome->fullname = 'Complete circuit board';
  771. $grade_outcome->shortname = 'Complete circuit board';
  772. $grade_outcome->fullname = 'Complete circuit board';
  773. $grade_outcome->timecreated = time();
  774. $grade_outcome->timemodified = time();
  775. $grade_outcome->scaleid = $this->scale[3]->id;
  776. $grade_outcome->id = $DB->insert_record('grade_outcomes', $grade_outcome);
  777. $this->grade_outcomes[] = $grade_outcome;
  778. // Calculation for grade_item 3.
  779. $grade_outcome = new stdClass();
  780. $grade_outcome->fullname = 'Debug Java program';
  781. $grade_outcome->shortname = 'Debug Java program';
  782. $grade_outcome->fullname = 'Debug Java program';
  783. $grade_outcome->timecreated = time();
  784. $grade_outcome->timemodified = time();
  785. $grade_outcome->scaleid = $this->scale[4]->id;
  786. $grade_outcome->id = $DB->insert_record('grade_outcomes', $grade_outcome);
  787. $this->grade_outcomes[] = $grade_outcome;
  788. // Manual grade_item with outcome
  789. // id = 17
  790. $grade_item = new stdClass();
  791. $grade_item->courseid = $this->course->id;
  792. $grade_item->categoryid = $this->grade_categories[6]->id;
  793. $grade_item->itemname = 'manual grade_item';
  794. $grade_item->itemtype = 'manual';
  795. $grade_item->itemnumber = 0;
  796. $grade_item->needsupdate = false;
  797. $grade_item->gradetype = GRADE_TYPE_SCALE;
  798. $grade_item->grademin = 0;
  799. $grade_item->grademax = 100;
  800. $grade_item->iteminfo = 'Manual grade item 16 with outcome used for unit testing';
  801. $grade_item->timecreated = time();
  802. $grade_item->timemodified = time();
  803. $grade_item->outcomeid = $this->grade_outcomes[2]->id;
  804. $grade_item->sortorder = 17;
  805. $grade_item->id = $DB->insert_record('grade_items', $grade_item);
  806. $this->grade_items[17] = $grade_item;
  807. }
  808. }
  809. /**
  810. * Allow calling protected method.
  811. */
  812. class test_grade_grade_flatten_dependencies_array extends grade_grade {
  813. public static function test_flatten_dependencies_array(&$a,&$b) {
  814. return self::flatten_dependencies_array($a, $b);
  815. }
  816. }