From 34088ad0578b203029af1032786ed8ba9f36529b Mon Sep 17 00:00:00 2001 From: Ankit Agarwal Date: Wed, 2 Oct 2013 16:19:41 +0800 Subject: [PATCH] MDL-40053 events: Generator for core_notes --- notes/tests/generator/lib.php | 127 +++++++++++++++++++++++++++++++++ notes/tests/generator_test.php | 82 +++++++++++++++++++++ 2 files changed, 209 insertions(+) create mode 100644 notes/tests/generator/lib.php create mode 100644 notes/tests/generator_test.php diff --git a/notes/tests/generator/lib.php b/notes/tests/generator/lib.php new file mode 100644 index 00000000000..a280a7161d0 --- /dev/null +++ b/notes/tests/generator/lib.php @@ -0,0 +1,127 @@ +. + +/** + * core_notes data generator. + * + * @package core_notes + * @category test + * @copyright 2013 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * core_notes data generator class. + * + * @package core_notes + * @category test + * @copyright 2013 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class core_notes_generator extends component_generator_base { + + /** + * @var number of created instances + */ + protected $instancecount = 0; + + /** + * To be called from data reset code only, + * do not use in tests. + * @return void + */ + public function reset() { + $this->instancecount = 0; + } + + /** + * Create a new note. + * + * @param array|stdClass $record + * @throws coding_exception + * @return stdClass activity record with extra cmid field + */ + public function create_instance($record = null) { + global $CFG, $USER; + require_once("$CFG->dirroot/notes/lib.php"); + + $this->instancecount++; + $i = $this->instancecount; + $record = (object)(array)$record; + + if (empty($record->courseid)) { + throw new coding_exception('Module generator requires $record->courseid.'); + } + if (empty($record->userid)) { + throw new coding_exception('Module generator requires $record->userid.'); + } + if (!isset($record->module)) { + $record->module = 'notes'; + } + if (!isset($record->groupid)) { + $record->groupid = 0; + } + if (!isset($record->moduleid)) { + $record->moduleid = 0; + } + if (!isset($record->coursemoduleid)) { + $record->coursemoduleid = 0; + } + if (!isset($record->subject)) { + $record->subject = ''; + } + if (!isset($record->summary)) { + $record->summary = null; + } + if (!isset($record->content)) { + $record->content = "This is test generated note - $i ."; + } + if (!isset($record->uniquehash)) { + $record->uniquehash = ''; + } + if (!isset($record->rating)) { + $record->rating = 0; + } + if (!isset($record->format)) { + $record->format = FORMAT_PLAIN; + } + if (!isset($record->summaryformat)) { + $record->summaryformat = FORMAT_MOODLE; + } + if (!isset($record->attachment)) { + $record->attachment = null; + } + if (!isset($record->publishstate)) { + $record->publishstate = NOTES_STATE_SITE; + } + if (!isset($record->lastmodified)) { + $record->lastmodified = time(); + } + if (!isset($record->created)) { + $record->created = time(); + } + if (!isset($record->usermodified)) { + $record->usermodified = $USER->id; + } + + note_save($record); + return $record; + } + +} + diff --git a/notes/tests/generator_test.php b/notes/tests/generator_test.php new file mode 100644 index 00000000000..cf9df9af0af --- /dev/null +++ b/notes/tests/generator_test.php @@ -0,0 +1,82 @@ +. + +/** + * Generator tests. + * + * @package core_notes + * @copyright 2013 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * Generator tests class. + * + * @package core_notes + * @copyright 2013 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class core_notes_generator_testcase extends advanced_testcase { + + /** Test create_instance method */ + public function test_create_instance() { + global $DB; + $this->resetAfterTest(); + $this->setAdminUser(); + + $course = $this->getDataGenerator()->create_course(); + $user = $this->getDataGenerator()->create_user(); + $gen = $this->getDataGenerator()->get_plugin_generator('core_notes'); + + $this->assertFalse($DB->record_exists('post', array('courseid' => $course->id))); + $note = $gen->create_instance(array('courseid' => $course->id, 'userid' => $user->id)); + $this->assertEquals(1, $DB->count_records('post', array('courseid' => $course->id, 'userid' => $user->id))); + $this->assertTrue($DB->record_exists('post', array('id' => $note->id))); + + $params = array('courseid' => $course->id, 'userid' => $user->id, 'publishstate' => NOTES_STATE_DRAFT); + $note = $gen->create_instance($params); + $this->assertEquals(2, $DB->count_records('post', array('courseid' => $course->id, 'userid' => $user->id))); + $this->assertEquals(NOTES_STATE_DRAFT, $DB->get_field_select('post', 'publishstate', 'id = :id', + array('id' => $note->id))); + } + + /** Test Exceptions thrown by create_instance method */ + public function test_create_instance_exceptions() { + $this->resetAfterTest(); + + $gen = $this->getDataGenerator()->get_plugin_generator('core_notes'); + + // Test not setting userid. + try { + $gen->create_instance(array('courseid' => 2)); + $this->fail('A note should not be allowed to be created without associcated userid'); + } catch (coding_exception $e) { + $this->assertContains('Module generator requires $record->userid', $e->getMessage()); + } + + // Test not setting courseid. + try { + $gen->create_instance(array('userid' => 2)); + $this->fail('A note should not be allowed to be created without associcated courseid'); + } catch (coding_exception $e) { + $this->assertContains('Module generator requires $record->courseid', $e->getMessage()); + } + } + +} +