148 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
namespace Magento\Backend\Model;
 | 
						|
 | 
						|
use Magento\Framework\Data\Form\FormKey;
 | 
						|
use Magento\Framework\Exception\AuthenticationException;
 | 
						|
 | 
						|
/**
 | 
						|
 * Test class for \Magento\Backend\Model\Auth.
 | 
						|
 *
 | 
						|
 * @magentoAppArea adminhtml
 | 
						|
 * @magentoAppIsolation enabled
 | 
						|
 * @magentoDbIsolation enabled
 | 
						|
 */
 | 
						|
class AuthTest extends \PHPUnit\Framework\TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var \Magento\Backend\Model\Auth
 | 
						|
     */
 | 
						|
    protected $_model;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        parent::setUp();
 | 
						|
 | 
						|
        \Magento\TestFramework\Helper\Bootstrap::getInstance()
 | 
						|
            ->loadArea(\Magento\Backend\App\Area\FrontNameResolver::AREA_CODE);
 | 
						|
        $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
 | 
						|
            ->create(\Magento\Backend\Model\Auth::class);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider getLoginDataProvider
 | 
						|
     * @param string $userName
 | 
						|
     * @param string $password
 | 
						|
     */
 | 
						|
    public function testLoginFailed($userName, $password)
 | 
						|
    {
 | 
						|
        $this->expectException(\Magento\Framework\Exception\AuthenticationException::class);
 | 
						|
 | 
						|
        $this->_model->login($userName, $password);
 | 
						|
    }
 | 
						|
 | 
						|
    public function getLoginDataProvider()
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            'Invalid credentials' => ['not_exists', 'not_exists'],
 | 
						|
            'Empty credentials' => ['', 'not_exists']
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    public function testSetGetAuthStorage()
 | 
						|
    {
 | 
						|
        // by default \Magento\Backend\Model\Auth\Session class will instantiate as a Authentication Storage
 | 
						|
        $this->assertInstanceOf(\Magento\Backend\Model\Auth\Session::class, $this->_model->getAuthStorage());
 | 
						|
 | 
						|
        $mockStorage = $this->createMock(\Magento\Backend\Model\Auth\StorageInterface::class);
 | 
						|
        $this->_model->setAuthStorage($mockStorage);
 | 
						|
        $this->assertInstanceOf(\Magento\Backend\Model\Auth\StorageInterface::class, $this->_model->getAuthStorage());
 | 
						|
 | 
						|
        $incorrectStorage = new \StdClass();
 | 
						|
        try {
 | 
						|
            $this->_model->setAuthStorage($incorrectStorage);
 | 
						|
            $this->fail('Incorrect authentication storage setted.');
 | 
						|
        } catch (AuthenticationException $e) {
 | 
						|
            // in case of exception - Auth works correct
 | 
						|
            $this->assertNotEmpty($e->getMessage());
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function testGetCredentialStorageList()
 | 
						|
    {
 | 
						|
        $storage = $this->_model->getCredentialStorage();
 | 
						|
        $this->assertInstanceOf(\Magento\Backend\Model\Auth\Credential\StorageInterface::class, $storage);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testLoginSuccessful()
 | 
						|
    {
 | 
						|
        $this->_model->login(
 | 
						|
            \Magento\TestFramework\Bootstrap::ADMIN_NAME,
 | 
						|
            \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD
 | 
						|
        );
 | 
						|
        $this->assertInstanceOf(
 | 
						|
            \Magento\Backend\Model\Auth\Credential\StorageInterface::class,
 | 
						|
            $this->_model->getUser()
 | 
						|
        );
 | 
						|
        $this->assertGreaterThan(time() - 10, $this->_model->getAuthStorage()->getUpdatedAt());
 | 
						|
    }
 | 
						|
 | 
						|
    public function testLoginFlushesFormKey()
 | 
						|
    {
 | 
						|
        /** @var FormKey $dataFormKey */
 | 
						|
        $dataFormKey = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(FormKey::class);
 | 
						|
        $beforeKey = $dataFormKey->getFormKey();
 | 
						|
        $this->_model->login(
 | 
						|
            \Magento\TestFramework\Bootstrap::ADMIN_NAME,
 | 
						|
            \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD
 | 
						|
        );
 | 
						|
        $afterKey = $dataFormKey->getFormKey();
 | 
						|
        $this->assertNotEquals($beforeKey, $afterKey);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoAppIsolation enabled
 | 
						|
     */
 | 
						|
    public function testLogout()
 | 
						|
    {
 | 
						|
        $this->_model->login(
 | 
						|
            \Magento\TestFramework\Bootstrap::ADMIN_NAME,
 | 
						|
            \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD
 | 
						|
        );
 | 
						|
        $this->assertNotEmpty($this->_model->getAuthStorage()->getData());
 | 
						|
        $this->_model->logout();
 | 
						|
        $this->assertEmpty($this->_model->getAuthStorage()->getData());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Disabled form security in order to prevent exit from the app
 | 
						|
     * @magentoAdminConfigFixture admin/security/session_lifetime 100
 | 
						|
     */
 | 
						|
    public function testIsLoggedIn()
 | 
						|
    {
 | 
						|
        $this->_model->login(
 | 
						|
            \Magento\TestFramework\Bootstrap::ADMIN_NAME,
 | 
						|
            \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD
 | 
						|
        );
 | 
						|
        $this->assertTrue($this->_model->isLoggedIn());
 | 
						|
    }
 | 
						|
 | 
						|
    public function testGetUser()
 | 
						|
    {
 | 
						|
        $this->_model->login(
 | 
						|
            \Magento\TestFramework\Bootstrap::ADMIN_NAME,
 | 
						|
            \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD
 | 
						|
        );
 | 
						|
 | 
						|
        $this->assertNotNull($this->_model->getUser());
 | 
						|
        $this->assertGreaterThan(0, $this->_model->getUser()->getId());
 | 
						|
        $this->assertInstanceOf(
 | 
						|
            \Magento\Backend\Model\Auth\Credential\StorageInterface::class,
 | 
						|
            $this->_model->getUser()
 | 
						|
        );
 | 
						|
    }
 | 
						|
}
 |