/** * Test main newenrolmentemail() function. */ public function test_version1importnewenrolmentemail() { global $CFG, $DB; // This is needed by the required files. require_once dirname(__FILE__) . '/other/rlip_importplugin_version1elis_fakeemail.php'; $importplugin = new rlip_importplugin_version1elis_fakeemail(); // Create Moodle course. $course = $this->getDataGenerator()->create_course(); // Enrol some students into Moodle course. $user2 = $this->getDataGenerator()->create_user(); $this->getDataGenerator()->enrol_user($user2->id, $course->id); $user3 = $this->getDataGenerator()->create_user(); $this->getDataGenerator()->enrol_user($user3->id, $course->id); // Enrol teachers into Moodle course. $teacherrole = $DB->get_record('role', array('shortname' => 'editingteacher')); $teacher = $this->getDataGenerator()->create_user(); $this->getDataGenerator()->enrol_user($teacher->id, $course->id, $teacherrole->id); $teacher2 = $this->getDataGenerator()->create_user(); $this->getDataGenerator()->enrol_user($teacher2->id, $course->id, $teacherrole->id); // Create ELIS class and ELIS user. $ecourse = new course(array('name' => 'Test Course', 'idnumber' => 'CRS100', 'syllabus' => '')); $ecourse->save(); $eclass = new pmclass(array('idnumber' => 'CLS100', 'courseid' => $ecourse->id)); $eclass->save(); $euser = new user(array('username' => 'testuser', 'idnumber' => 'testuser', 'firstname' => 'Test', 'lastname' => 'User', 'email' => '*****@*****.**', 'city' => 'Waterloo', 'country' => 'CA')); $euser->save(); $muser = $euser->get_moodleuser(); // Create student object for elis user/elis class. $student = new student(array('userid' => $euser->id, 'classid' => $eclass->id)); // Test false return when student "no_moodle_enrol" is set. $student->no_moodle_enrol = true; $result = $importplugin->newenrolmentemail($student); $this->assertFalse($result); $student->no_moodle_enrol = false; // Test false return when ELIS class is not linked to Moodle course. $DB->delete_records(classmoodlecourse::TABLE, array('classid' => $eclass->id, 'moodlecourseid' => $course->id)); $result = $importplugin->newenrolmentemail($student); $this->assertFalse($result); // Test false return when ELIS class is linked to a Moodle course, but Moodle course does not exist. $cmcid = $DB->insert_record(classmoodlecourse::TABLE, array('classid' => $eclass->id, 'moodlecourseid' => 999999999)); $result = $importplugin->newenrolmentemail($student); $this->assertFalse($result); $DB->update_record(classmoodlecourse::TABLE, array('id' => $cmcid, 'moodlecourseid' => $course->id)); // Test false return when ELIS user is not linked to Moodle user. $DB->delete_records(usermoodle::TABLE, array('cuserid' => $euser->id, 'muserid' => $muser->id)); $result = $importplugin->newenrolmentemail($student); $this->assertFalse($result); // Test false return when ELIS user is linked to Moodle user, but Moodle user does not exist. $usermoodleid = $DB->insert_record(usermoodle::TABLE, array('cuserid' => $euser->id, 'muserid' => 99999999)); $result = $importplugin->newenrolmentemail($student); $this->assertFalse($result); $DB->update_record(usermoodle::TABLE, array('id' => $usermoodleid, 'muserid' => $muser->id)); // Test false return when not enabled. set_config('newenrolmentemailenabled', '0', 'dhimport_version1elis'); set_config('newenrolmentemailsubject', 'Test Subject', 'dhimport_version1elis'); set_config('newenrolmentemailtemplate', 'Test Body', 'dhimport_version1elis'); set_config('newenrolmentemailfrom', 'teacher', 'dhimport_version1elis'); $result = $importplugin->newenrolmentemail($student); $this->assertFalse($result); // Test false return when enabled but empty template. set_config('newenrolmentemailenabled', '1', 'dhimport_version1elis'); set_config('newenrolmentemailsubject', 'Test Subject', 'dhimport_version1elis'); set_config('newenrolmentemailtemplate', '', 'dhimport_version1elis'); set_config('newenrolmentemailfrom', 'teacher', 'dhimport_version1elis'); $result = $importplugin->newenrolmentemail($student); $this->assertFalse($result); // Test success when enabled, has template text, and user has email. $testsubject = 'Test Subject'; $testbody = 'Test Body'; set_config('newenrolmentemailenabled', '1', 'dhimport_version1elis'); set_config('newenrolmentemailsubject', $testsubject, 'dhimport_version1elis'); set_config('newenrolmentemailtemplate', $testbody, 'dhimport_version1elis'); set_config('newenrolmentemailfrom', 'admin', 'dhimport_version1elis'); $result = $importplugin->newenrolmentemail($student); $this->assertNotEmpty($result); $this->assertInternalType('array', $result); $this->assertArrayHasKey('user', $result); $this->assertEquals($muser, $result['user']); $this->assertArrayHasKey('from', $result); $this->assertEquals(get_admin(), $result['from']); $this->assertArrayHasKey('subject', $result); $this->assertEquals($testsubject, $result['subject']); $this->assertArrayHasKey('body', $result); $this->assertEquals($testbody, $result['body']); // Test success and from is set to teacher when selected. $testsubject = 'Test Subject'; $testbody = 'Test Body'; set_config('newenrolmentemailenabled', '1', 'dhimport_version1elis'); set_config('newenrolmentemailsubject', $testsubject, 'dhimport_version1elis'); set_config('newenrolmentemailtemplate', $testbody, 'dhimport_version1elis'); set_config('newenrolmentemailfrom', 'teacher', 'dhimport_version1elis'); $result = $importplugin->newenrolmentemail($student); $this->assertNotEmpty($result); $this->assertInternalType('array', $result); $this->assertArrayHasKey('user', $result); $this->assertEquals($muser, $result['user']); $this->assertArrayHasKey('from', $result); $this->assertEquals($teacher, $result['from']); $this->assertArrayHasKey('subject', $result); $this->assertEquals($testsubject, $result['subject']); $this->assertArrayHasKey('body', $result); $this->assertEquals($testbody, $result['body']); // Test that subject is replaced by empty string when not present. $testsubject = null; $testbody = 'Test Body'; set_config('newenrolmentemailenabled', '1', 'dhimport_version1elis'); set_config('newenrolmentemailsubject', $testsubject, 'dhimport_version1elis'); set_config('newenrolmentemailtemplate', $testbody, 'dhimport_version1elis'); set_config('newenrolmentemailfrom', 'admin', 'dhimport_version1elis'); $result = $importplugin->newenrolmentemail($student); $this->assertNotEmpty($result); $this->assertInternalType('array', $result); $this->assertArrayHasKey('user', $result); $this->assertEquals($muser, $result['user']); $this->assertArrayHasKey('from', $result); $this->assertEquals(get_admin(), $result['from']); $this->assertArrayHasKey('subject', $result); $this->assertEquals('', $result['subject']); $this->assertArrayHasKey('body', $result); $this->assertEquals($testbody, $result['body']); // Full testing of replacement is done below, but just test that it's being done at all from the main function. $testsubject = 'Test Subject'; $testbody = 'Test Body %%user_username%%'; $expectedtestbody = 'Test Body ' . $muser->username; set_config('newenrolmentemailenabled', '1', 'dhimport_version1elis'); set_config('newenrolmentemailsubject', $testsubject, 'dhimport_version1elis'); set_config('newenrolmentemailtemplate', $testbody, 'dhimport_version1elis'); set_config('newenrolmentemailfrom', 'admin', 'dhimport_version1elis'); $result = $importplugin->newenrolmentemail($student); $this->assertNotEmpty($result); $this->assertInternalType('array', $result); $this->assertArrayHasKey('user', $result); $this->assertEquals($muser, $result['user']); $this->assertArrayHasKey('from', $result); $this->assertEquals(get_admin(), $result['from']); $this->assertArrayHasKey('subject', $result); $this->assertEquals($testsubject, $result['subject']); $this->assertArrayHasKey('body', $result); $this->assertEquals($expectedtestbody, $result['body']); }