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 namespace factor_email; 18 19 /** 20 * Tests for email factor. 21 * 22 * @covers \factor_email\factor 23 * @package factor_email 24 * @copyright 2023 Stevani Andolo <stevani@hotmail.com.au> 25 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 26 */ 27 class factor_test extends \advanced_testcase { 28 29 /** 30 * Tests checking verification code 31 * 32 * @covers ::check_verification_code 33 * @covers ::post_pass_state 34 */ 35 public function test_check_verification_code() { 36 global $DB, $USER; 37 $this->resetAfterTest(true); 38 39 $emailfactorclass = new \factor_email\factor('email'); 40 $rc = new \ReflectionClass($emailfactorclass::class); 41 $rcm = $rc->getMethod('check_verification_code'); 42 $rcm->setAccessible(true); 43 44 // Assigned email to be used in getting the email factor. 45 $USER->email = 'user@mail.com'; 46 47 set_config('enabled', 1, 'factor_email'); 48 49 // Testing with current timecreated. 50 $newcode = random_int(100000, 999999); 51 $instanceid = $DB->insert_record('tool_mfa', [ 52 'userid' => $USER->id, 53 'factor' => 'email', 54 'secret' => $newcode, 55 'label' => 'unittest', 56 'timecreated' => time(), 57 'timemodified' => time(), 58 'lastverified' => time(), 59 'revoked' => 0, 60 ]); 61 62 $data = $DB->get_record('tool_mfa', ['id' => $instanceid]); 63 $this->assertTrue($rcm->invoke($emailfactorclass, $data->secret)); 64 65 // Update the data to test with really old timecreated. 66 $DB->update_record('tool_mfa', [ 67 'id' => $instanceid, 68 'timecreated' => time() - 1689657581, 69 'timemodified' => time() - 1689657581, 70 'lastverified' => time() - 1689657581, 71 'revoked' => 0, 72 ]); 73 74 $data = $DB->get_record('tool_mfa', ['id' => $instanceid]); 75 $this->assertFalse($rcm->invoke($emailfactorclass, $data->secret)); 76 77 // Cleans up email records once MFA passed. 78 $rcm = $rc->getMethod('post_pass_state'); 79 $rcm->setAccessible(true); 80 $rcm->invoke($emailfactorclass); 81 82 // Check if the email records have been deleted. 83 $data = $DB->count_records('tool_mfa', ['factor' => 'email']); 84 $this->assertEquals(0, $data); 85 } 86 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body