diff --git a/mod/lti/tests/generator/lib.php b/mod/lti/tests/generator/lib.php new file mode 100644 index 00000000000..b3d3480b146 --- /dev/null +++ b/mod/lti/tests/generator/lib.php @@ -0,0 +1,101 @@ +. + +/** + * mod_lti data generator + * + * @package mod_lti + * @category phpunit + * @copyright Copyright (c) 2012 Moodlerooms Inc. (http://www.moodlerooms.com) + * @author Mark Nielsen + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * Assignment module PHPUnit data generator class + * + * @package mod_lti + * @category phpunit + * @copyright Copyright (c) 2012 Moodlerooms Inc. (http://www.moodlerooms.com) + * @author Mark Nielsen + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class mod_lti_generator extends phpunit_module_generator { + + /** + * Create new lti module instance + * + * @param array|stdClass $record + * @param array $options + * @throws coding_exception + * @return stdClass activity record with extra cmid field + */ + public function create_instance($record = null, array $options = null) { + global $CFG; + + require_once("$CFG->dirroot/mod/lti/lib.php"); + + $this->instancecount++; + $i = $this->instancecount; + + $record = (object) (array) $record; + $options = (array) $options; + + if (empty($record->course)) { + throw new coding_exception('module generator requires $record->course'); + } + if (!isset($record->name)) { + $record->name = get_string('pluginname', 'lti').' '.$i; + } + if (!isset($record->intro)) { + $record->intro = 'Test lti '.$i; + } + if (!isset($record->introformat)) { + $record->introformat = FORMAT_MOODLE; + } + if (!isset($record->toolurl)) { + $record->toolurl = 'http://www.imsglobal.org/developers/LTI/test/v1p1/tool.php'; + } + if (!isset($record->resourcekey)) { + $record->resourcekey = '12345'; + } + if (!isset($record->password)) { + $record->password = 'secret'; + } + if (!isset($record->grade)) { + $record->grade = 100; + } + if (!isset($record->instructorchoicesendname)) { + $record->instructorchoicesendname = 1; + } + if (!isset($record->instructorchoicesendemailaddr)) { + $record->instructorchoicesendemailaddr = 1; + } + if (!isset($record->instructorchoiceacceptgrades)) { + $record->instructorchoiceacceptgrades = 1; + } + if (isset($options['idnumber'])) { + $record->cmidnumber = $options['idnumber']; + } else { + $record->cmidnumber = ''; + } + $record->coursemodule = $this->precreate_course_module($record->course, $options); + $id = lti_add_instance($record, null); + return $this->post_add_instance($id, $record->coursemodule); + } +} \ No newline at end of file diff --git a/mod/lti/tests/generator_test.php b/mod/lti/tests/generator_test.php new file mode 100644 index 00000000000..8a2bbcfe889 --- /dev/null +++ b/mod/lti/tests/generator_test.php @@ -0,0 +1,74 @@ +. + +/** + * PHPUnit data generator tests + * + * @package mod_lti + * @category phpunit + * @copyright Copyright (c) 2012 Moodlerooms Inc. (http://www.moodlerooms.com) + * @author Mark Nielsen + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * PHPUnit data generator testcase + * + * @package mod_lti + * @category phpunit + * @copyright Copyright (c) 2012 Moodlerooms Inc. (http://www.moodlerooms.com) + * @author Mark Nielsen + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class mod_lti_generator_testcase extends advanced_testcase { + public function test_generator() { + global $DB; + + $this->resetAfterTest(true); + + $this->assertEquals(0, $DB->count_records('lti')); + + $course = $this->getDataGenerator()->create_course(); + + /** @var mod_lti_generator $generator */ + $generator = $this->getDataGenerator()->get_plugin_generator('mod_lti'); + $this->assertInstanceOf('mod_lti_generator', $generator); + $this->assertEquals('lti', $generator->get_modulename()); + + $generator->create_instance(array('course' => $course->id)); + $generator->create_instance(array('course' => $course->id)); + $lti = $generator->create_instance(array('course' => $course->id)); + $this->assertEquals(3, $DB->count_records('lti')); + + $cm = get_coursemodule_from_instance('lti', $lti->id); + $this->assertEquals($lti->id, $cm->instance); + $this->assertEquals('lti', $cm->modname); + $this->assertEquals($course->id, $cm->course); + + $context = context_module::instance($cm->id); + $this->assertEquals($lti->cmid, $context->instanceid); + + // test gradebook integration using low level DB access - DO NOT USE IN PLUGIN CODE! + $lti = $generator->create_instance(array('course' => $course->id, 'assessed' => 1, 'scale' => 100)); + $gitem = $DB->get_record('grade_items', array('courseid' => $course->id, 'itemtype' => 'mod', 'itemmodule' => 'lti', 'iteminstance' => $lti->id)); + $this->assertNotEmpty($gitem); + $this->assertEquals(100, $gitem->grademax); + $this->assertEquals(0, $gitem->grademin); + $this->assertEquals(GRADE_TYPE_VALUE, $gitem->gradetype); + } +}