/**
  * 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_version1_fakeemail.php';
     $importplugin = new rlip_importplugin_version1_fakeemail();
     $course = $this->getDataGenerator()->create_course();
     $user = $this->getDataGenerator()->create_user();
     // Enrol some students.
     $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.
     $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);
     // Test false return when empty user id or course id.
     $result = $importplugin->newenrolmentemail(null, $course->id);
     $this->assertFalse($result);
     $result = $importplugin->newenrolmentemail($user->id, null);
     $this->assertFalse($result);
     // Test false return when not enabled.
     set_config('newenrolmentemailenabled', '0', 'dhimport_version1');
     set_config('newenrolmentemailsubject', 'Test Subject', 'dhimport_version1');
     set_config('newenrolmentemailtemplate', 'Test Body', 'dhimport_version1');
     set_config('newenrolmentemailfrom', 'teacher', 'dhimport_version1');
     $result = $importplugin->newenrolmentemail($user->id, $course->id);
     $this->assertFalse($result);
     // Test false return when enabled but empty template.
     set_config('newenrolmentemailenabled', '1', 'dhimport_version1');
     set_config('newenrolmentemailsubject', 'Test Subject', 'dhimport_version1');
     set_config('newenrolmentemailtemplate', '', 'dhimport_version1');
     set_config('newenrolmentemailfrom', 'teacher', 'dhimport_version1');
     $result = $importplugin->newenrolmentemail($user->id, $course->id);
     $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_version1');
     set_config('newenrolmentemailsubject', $testsubject, 'dhimport_version1');
     set_config('newenrolmentemailtemplate', $testbody, 'dhimport_version1');
     set_config('newenrolmentemailfrom', 'admin', 'dhimport_version1');
     $result = $importplugin->newenrolmentemail($user->id, $course->id);
     $this->assertNotEmpty($result);
     $this->assertInternalType('array', $result);
     $this->assertArrayHasKey('user', $result);
     $this->assertEquals($user, $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_version1');
     set_config('newenrolmentemailsubject', $testsubject, 'dhimport_version1');
     set_config('newenrolmentemailtemplate', $testbody, 'dhimport_version1');
     set_config('newenrolmentemailfrom', 'teacher', 'dhimport_version1');
     $result = $importplugin->newenrolmentemail($user->id, $course->id);
     $this->assertNotEmpty($result);
     $this->assertInternalType('array', $result);
     $this->assertArrayHasKey('user', $result);
     $this->assertEquals($user, $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_version1');
     set_config('newenrolmentemailsubject', $testsubject, 'dhimport_version1');
     set_config('newenrolmentemailtemplate', $testbody, 'dhimport_version1');
     set_config('newenrolmentemailfrom', 'admin', 'dhimport_version1');
     $result = $importplugin->newenrolmentemail($user->id, $course->id);
     $this->assertNotEmpty($result);
     $this->assertInternalType('array', $result);
     $this->assertArrayHasKey('user', $result);
     $this->assertEquals($user, $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 ' . $user->username;
     set_config('newenrolmentemailenabled', '1', 'dhimport_version1');
     set_config('newenrolmentemailsubject', $testsubject, 'dhimport_version1');
     set_config('newenrolmentemailtemplate', $testbody, 'dhimport_version1');
     set_config('newenrolmentemailfrom', 'admin', 'dhimport_version1');
     $result = $importplugin->newenrolmentemail($user->id, $course->id);
     $this->assertNotEmpty($result);
     $this->assertInternalType('array', $result);
     $this->assertArrayHasKey('user', $result);
     $this->assertEquals($user, $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']);
 }