135 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
namespace Magento\Customer\Model;
 | 
						|
 | 
						|
use Magento\Framework\App\PageCache\FormKey;
 | 
						|
use Magento\Framework\App\Response\Http as HttpResponse;
 | 
						|
use Magento\Framework\App\ResponseInterface;
 | 
						|
use Magento\Framework\Session\SidResolverInterface;
 | 
						|
use Magento\Framework\Stdlib\Cookie\CookieMetadataFactory;
 | 
						|
use Magento\Framework\Stdlib\Cookie\PublicCookieMetadata;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
 | 
						|
/**
 | 
						|
 * @magentoDataFixture Magento/Customer/_files/customer.php
 | 
						|
 * @magentoAppIsolation enabled
 | 
						|
 */
 | 
						|
class SessionTest extends \PHPUnit\Framework\TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var \Magento\Customer\Model\Session
 | 
						|
     */
 | 
						|
    protected $_customerSession;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var FormKey
 | 
						|
     */
 | 
						|
    protected $formKey;
 | 
						|
 | 
						|
    /** @var PublicCookieMetadata $cookieMetadata */
 | 
						|
    protected $cookieMetadata;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var HttpResponse
 | 
						|
     */
 | 
						|
    private $response;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->_customerSession = Bootstrap::getObjectManager()->create(
 | 
						|
            \Magento\Customer\Model\Session::class
 | 
						|
        );
 | 
						|
        /** @var CookieMetadataFactory $cookieMetadataFactory */
 | 
						|
        $cookieMetadataFactory = Bootstrap::getObjectManager()->get(CookieMetadataFactory::class);
 | 
						|
 | 
						|
        $this->cookieMetadata = $cookieMetadataFactory
 | 
						|
            ->createPublicCookieMetadata();
 | 
						|
        $this->cookieMetadata->setDomain($this->_customerSession->getCookieDomain());
 | 
						|
        $this->cookieMetadata->setPath($this->_customerSession->getCookiePath());
 | 
						|
        $this->cookieMetadata->setDuration($this->_customerSession->getCookieLifetime());
 | 
						|
 | 
						|
        $this->formKey = Bootstrap::getObjectManager()->get(FormKey::class);
 | 
						|
        $this->formKey->set(
 | 
						|
            'form_key',
 | 
						|
            $this->cookieMetadata
 | 
						|
        );
 | 
						|
        $this->response = Bootstrap::getObjectManager()->get(ResponseInterface::class);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testLoginById()
 | 
						|
    {
 | 
						|
        $this->assertTrue($this->_customerSession->loginById(1));
 | 
						|
        // fixture
 | 
						|
        $this->assertTrue($this->_customerSession->isLoggedIn());
 | 
						|
    }
 | 
						|
 | 
						|
    public function testLoginByIdCustomerDataLoadedCorrectly()
 | 
						|
    {
 | 
						|
        $fixtureCustomerId = 1;
 | 
						|
 | 
						|
        /** @var \Magento\Customer\Model\Session $customerSession */
 | 
						|
        $customerSession = Bootstrap::getObjectManager()->get(\Magento\Customer\Model\Session::class);
 | 
						|
        $customerSession->loginById($fixtureCustomerId);
 | 
						|
 | 
						|
        $customerData = $customerSession->getCustomerData();
 | 
						|
 | 
						|
        $this->assertEquals($fixtureCustomerId, $customerData->getId(), "Customer data was loaded incorrectly");
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Verifies that logging in flushes form_key
 | 
						|
     */
 | 
						|
    public function testLoginActionFlushesFormKey()
 | 
						|
    {
 | 
						|
        $beforeKey = $this->formKey->get();
 | 
						|
        $this->_customerSession->loginById(1);
 | 
						|
        $afterKey = $this->formKey->get();
 | 
						|
 | 
						|
        $this->assertNotEquals($beforeKey, $afterKey);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Verifies that logging out flushes form_key
 | 
						|
     */
 | 
						|
    public function testLogoutActionFlushesFormKey()
 | 
						|
    {
 | 
						|
        $this->_customerSession->loginById(1);
 | 
						|
 | 
						|
        $this->formKey->set(
 | 
						|
            'form_key',
 | 
						|
            $this->cookieMetadata
 | 
						|
        );
 | 
						|
 | 
						|
        $beforeKey = $this->formKey->get();
 | 
						|
        $this->_customerSession->logout();
 | 
						|
        $afterKey = $this->formKey->get();
 | 
						|
 | 
						|
        $this->assertNotEquals($beforeKey, $afterKey);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Check that SID is not used in redirects.
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     * @magentoConfigFixture current_store web/session/use_frontend_sid 1
 | 
						|
     */
 | 
						|
    public function testNoSid(): void
 | 
						|
    {
 | 
						|
        $this->_customerSession->authenticate();
 | 
						|
        $location = (string)$this->response->getHeader('Location');
 | 
						|
        $this->assertNotEmpty($location);
 | 
						|
        $this->assertStringNotContainsString(SidResolverInterface::SESSION_ID_QUERY_PARAM . '=', $location);
 | 
						|
        $beforeAuthUrl = $this->_customerSession->getData('before_auth_url');
 | 
						|
        $this->assertNotEmpty($beforeAuthUrl);
 | 
						|
        $this->assertStringNotContainsString(SidResolverInterface::SESSION_ID_QUERY_PARAM . '=', $beforeAuthUrl);
 | 
						|
 | 
						|
        $this->_customerSession->authenticate('/customer/account');
 | 
						|
        $location = (string)$this->response->getHeader('Location');
 | 
						|
        $this->assertNotEmpty($location);
 | 
						|
        $this->assertStringNotContainsString(SidResolverInterface::SESSION_ID_QUERY_PARAM . '=', $location);
 | 
						|
    }
 | 
						|
}
 |