128 lines
4.6 KiB
PHP
Executable File
128 lines
4.6 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Customer\Model;
|
|
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
|
|
class VisitorTest extends \PHPUnit\Framework\TestCase
|
|
{
|
|
/**
|
|
* @magentoAppArea frontend
|
|
* @magentoDataFixture Magento/Customer/_files/customer.php
|
|
*/
|
|
public function testBindCustomerLogin()
|
|
{
|
|
/** @var \Magento\Customer\Model\Visitor $visitor */
|
|
$visitor = Bootstrap::getObjectManager()->get(\Magento\Customer\Model\Visitor::class);
|
|
$visitor->unsCustomerId();
|
|
$visitor->unsDoCustomerLogin();
|
|
|
|
$customer = $this->_loginCustomer('customer@example.com', 'password');
|
|
|
|
// Visitor has not customer ID yet
|
|
$this->assertTrue($visitor->getDoCustomerLogin());
|
|
$this->assertEquals($customer->getId(), $visitor->getCustomerId());
|
|
|
|
// Visitor already has customer ID
|
|
$visitor->unsDoCustomerLogin();
|
|
$this->_loginCustomer('customer@example.com', 'password');
|
|
$this->assertNull($visitor->getDoCustomerLogin());
|
|
}
|
|
|
|
/**
|
|
* @magentoAppArea frontend
|
|
* @magentoDataFixture Magento/Customer/_files/customer.php
|
|
*/
|
|
public function testBindCustomerLogout()
|
|
{
|
|
/** @var \Magento\Customer\Model\Visitor $visitor */
|
|
$visitor = Bootstrap::getObjectManager()->get(\Magento\Customer\Model\Visitor::class);
|
|
|
|
$this->_loginCustomer('customer@example.com', 'password');
|
|
$visitor->setCustomerId(1);
|
|
$visitor->unsDoCustomerLogout();
|
|
$this->_logoutCustomer(1);
|
|
|
|
// Visitor has customer ID => check that do_customer_logout flag is set
|
|
$this->assertTrue($visitor->getDoCustomerLogout());
|
|
|
|
$this->_loginCustomer('customer@example.com', 'password');
|
|
$visitor->unsCustomerId();
|
|
$visitor->unsDoCustomerLogout();
|
|
$this->_logoutCustomer(1);
|
|
|
|
// Visitor has no customer ID => check that do_customer_logout flag not changed
|
|
$this->assertNull($visitor->getDoCustomerLogout());
|
|
}
|
|
|
|
/**
|
|
* @magentoAppArea frontend
|
|
*/
|
|
public function testClean()
|
|
{
|
|
$customerIdNow = '1';
|
|
$createdAtNow = date('Y-m-d H:i:s', time());
|
|
$lastVisitNow = date('Y-m-d H:i:s', time());
|
|
$customerIdPast = null;
|
|
$createdAtPast = date('Y-m-d H:i:s', time() - 172800);
|
|
$lastVisitPast = date('Y-m-d H:i:s', time() - 172800);
|
|
|
|
/** @var \Magento\Customer\Model\Visitor $visitor */
|
|
$visitor = Bootstrap::getObjectManager()->get(\Magento\Customer\Model\Visitor::class);
|
|
$visitor->setCustomerId($customerIdPast);
|
|
$visitor->setCreatedAt($createdAtPast);
|
|
$visitor->setLastVisitAt($lastVisitPast);
|
|
$visitor->save();
|
|
$visitorIdPast = $visitor->getId();
|
|
$visitor->unsetData();
|
|
$visitor->setCustomerId($customerIdNow);
|
|
$visitor->setCreatedAt($createdAtNow);
|
|
$visitor->setLastVisitAt($lastVisitNow);
|
|
$visitor->save();
|
|
$visitorIdNow = $visitor->getId();
|
|
$visitor->unsetData();
|
|
|
|
$visitor->clean();
|
|
$visitor->load($visitorIdPast);
|
|
$this->assertEquals([], $visitor->getData());
|
|
$visitor->unsetData();
|
|
$visitor->load($visitorIdNow);
|
|
$result = $visitor->getData();
|
|
$this->assertEquals($visitorIdNow, $result['visitor_id']);
|
|
$this->assertEquals($customerIdNow, $result['customer_id']);
|
|
$this->assertGreaterThanOrEqual(strtotime($createdAtNow), strtotime($result['created_at']));
|
|
$this->assertEquals($lastVisitNow, $result['last_visit_at']);
|
|
$this->assertNull($result['session_id']);
|
|
}
|
|
|
|
/**
|
|
* Authenticate customer and return its DTO
|
|
* @param string $username
|
|
* @param string $password
|
|
* @return \Magento\Customer\Api\Data\CustomerInterface
|
|
*/
|
|
protected function _loginCustomer($username, $password)
|
|
{
|
|
/** @var \Magento\Customer\Api\AccountManagementInterface $accountManagement */
|
|
$accountManagement = Bootstrap::getObjectManager()->create(
|
|
\Magento\Customer\Api\AccountManagementInterface::class
|
|
);
|
|
return $accountManagement->authenticate($username, $password);
|
|
}
|
|
|
|
/**
|
|
* Log out customer
|
|
* @param int $customerId
|
|
*/
|
|
public function _logoutCustomer($customerId)
|
|
{
|
|
/** @var \Magento\Customer\Model\Session $customerSession */
|
|
$customerSession = Bootstrap::getObjectManager()->get(\Magento\Customer\Model\Session::class);
|
|
$customerSession->setCustomerId($customerId);
|
|
$customerSession->logout();
|
|
}
|
|
}
|