Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.3.x will end 7 October 2024 (12 months).
  • Bug fixes for security issues in 4.3.x will end 21 April 2025 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.2.x is supported too.
   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 tool_mfa;
  18  
  19  /**
  20   * Tests for plugininfo.
  21   *
  22   * @package     tool_mfa
  23   * @author      Peter Burnett <peterburnett@catalyst-au.net>
  24   * @copyright   Catalyst IT
  25   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  26   */
  27  class plugininfo_factor_test extends \advanced_testcase {
  28  
  29      /**
  30       * Tests getting next user factor
  31       *
  32       * @covers ::get_next_user_login_factor
  33       * @covers ::setup_user_factor
  34       * @covers ::get_enabled_factors
  35       * @covers ::is_enabled
  36       * @covers ::has_setup
  37       * @covers ::get_active_user_factor_types
  38       */
  39      public function test_get_next_user_login_factor() {
  40  
  41          $this->resetAfterTest(true);
  42  
  43          // Create and login a user.
  44          $user = $this->getDataGenerator()->create_user();
  45          $this->setUser($user);
  46  
  47          // Test that with no enabled factors, fallback is returned.
  48          $this->assertEquals('fallback', \tool_mfa\plugininfo\factor::get_next_user_login_factor()->name);
  49  
  50          // Setup enabled totp factor for user.
  51          set_config('enabled', 1, 'factor_totp');
  52          $totpfactor = \tool_mfa\plugininfo\factor::get_factor('totp');
  53          $totpdata = [
  54              'secret' => 'fakekey',
  55              'devicename' => 'fakedevice',
  56          ];
  57          $this->assertNotEmpty($totpfactor->setup_user_factor((object) $totpdata));
  58  
  59          // Test that factor now appears (from STATE_UNKNOWN).
  60          $this->assertEquals('totp', \tool_mfa\plugininfo\factor::get_next_user_login_factor()->name);
  61  
  62          // Now pass this factor, check for fallback.
  63          $totpfactor->set_state(\tool_mfa\plugininfo\factor::STATE_PASS);
  64          $this->assertEquals('fallback', \tool_mfa\plugininfo\factor::get_next_user_login_factor()->name);
  65  
  66          // Add in a no-input factor.
  67          set_config('enabled', 1, 'factor_auth');
  68          $this->assertEquals(2, count(\tool_mfa\plugininfo\factor::get_enabled_factors()));
  69  
  70          $authfactor = \tool_mfa\plugininfo\factor::get_factor('auth');
  71          $this->assertTrue($authfactor->is_enabled());
  72          $this->assertFalse($authfactor->has_setup());
  73  
  74          // Check that the next factor is still the fallback factor.
  75          $this->assertEquals(2, count(\tool_mfa\plugininfo\factor::get_active_user_factor_types()));
  76          $this->assertEquals('fallback', \tool_mfa\plugininfo\factor::get_next_user_login_factor()->name);
  77      }
  78  }