We will work on Apr 26th (Saturday) and will be off from Apr 30th (Wednesday) until May 2nd (Friday) for public holiday in our country

Commit 53633a2d authored by Ivan Chepurnyi's avatar Ivan Chepurnyi

! New test helpers implementation

parent 9f4cc5a2
......@@ -27,6 +27,7 @@ use EcomDev_PHPUnit_Helper as TestHelper;
* @method EcomDev_PHPUnit_Mock_Proxy mockBlock($classAlias, array $methods = array(), array $constructorArgs = array())
* @method EcomDev_PHPUnit_Mock_Proxy mockHelper($classAlias, array $methods = array(), array $constructorArgs = array())
* @method EcomDev_PHPUnit_Mock_Proxy mockSession($classAlias, array $methods = array())
* @method EcomDev_PHPUnit_Mock_Proxy adminSession(array $resources = array())
*/
abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase
{
......
<?php
/**
* PHP Unit test suite for Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
*
* @category EcomDev
* @package EcomDev_PHPUnit
* @copyright Copyright (c) 2013 EcomDev BV (http://www.ecomdev.org)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* @author Ivan Chepurnyi <ivan.chepurnyi@ecomdev.org>
*/
use EcomDev_PHPUnit_Helper as TestHelper;
use EcomDev_PHPUnit_Test_Case_Util as TestUtil;
/**
* Helper for stubbing customer session
*
*
*/
class EcomDev_PHPUnit_Test_Case_Helper_Customer extends EcomDev_PHPUnit_Helper_Abstract
{
/**
......@@ -12,7 +36,11 @@ class EcomDev_PHPUnit_Test_Case_Helper_Customer extends EcomDev_PHPUnit_Helper_A
*/
public function helperCustomerSession($customerId, $storeId = null)
{
$customerSessionMock = $this->helperMockSession('customer/session', array('renewSession'));
$customerSessionMock = TestHelper::invoke(
'mockSession',
'customer/session',
array('renewSession')
);
if ($storeId === null) {
$storeId = TestUtil::app()->getAnyStoreView()->getCode();
......@@ -22,4 +50,4 @@ class EcomDev_PHPUnit_Test_Case_Helper_Customer extends EcomDev_PHPUnit_Helper_A
$customerSessionMock->loginById($customerId);
return $customerSessionMock;
}
}
\ No newline at end of file
}
......@@ -18,6 +18,10 @@
use EcomDev_PHPUnit_Test_Case_Util as TestUtil;
/**
* Session mocks helper
*
*/
class EcomDev_PHPUnit_Test_Case_Helper_Session
extends EcomDev_PHPUnit_Helper_Abstract
implements EcomDev_PHPUnit_Helper_Listener_Interface
......@@ -57,10 +61,17 @@ class EcomDev_PHPUnit_Test_Case_Helper_Session
$session = $this->helperMockSession('admin/session', array('refreshAcl'));
$user = $this->createUser();
$this->loadRules($user, $this->getAcl(), $resources);
$session->setAcl($this->getAcl());
$session->setUser($user);
return $session;
}
/**
* Returns an instance of ACL object that will be used for all
* admin stubs
*
* @return Mage_Admin_Model_Acl
*/
public function getAcl()
{
if ($this->acl === null) {
......@@ -70,42 +81,69 @@ class EcomDev_PHPUnit_Test_Case_Helper_Session
return $this->acl;
}
public function loadRules($user, $acl, array $allowedResources = array())
/**
* Loads role rules into ACL for admin user
*
* @param Mage_Admin_Model_User $user
* @param Mage_Admin_Model_Acl $acl
* @param array $allowedResources
*
* @return $this
*/
public function loadRules(Mage_Admin_Model_User $user, Mage_Admin_Model_Acl $acl, array $allowedResources = array())
{
$userRole = Mage::getModel('admin/acl_role_user', Mage_Admin_Model_Acl::ROLE_TYPE_USER . $user->getId());
$acl->addRole($userRole);
if (empty($allowedResources)) {
$acl->allow($userRole);
$acl->allow($userRole, $acl->getResources());
return $this;
}
$aclResources = $acl->getResources();
$allow = array();
foreach ($allowedResources as $resource) {
$childResources = array_filter(
$acl->getResources(),
$aclResources,
function ($entry) use ($resource) {
return strpos($entry, 'admin/' . $resource) === 0;
}
);
$allow = array_merge($allow, array($resource), $childResources);
$allow = array_merge($allow, $childResources);
}
$deny = array();
foreach ($acl->getResources() as $resource) {
foreach ($aclResources as $resource) {
if (!in_array($resource, $allow)) {
$deny[] = $resource;
}
}
$deny;
$acl->allow($userRole, $allow);
$acl->deny($userRole, $deny);
return $this;
}
/**
* Creates a new instance of user with unique id
*
* Used for stubbing admin user roles
*
* @param int $entropy
* @return Mage_Admin_Model_User
*/
public function createUser($entropy = 3)
{
$userId = floor(microtime(true)*pow(10, $entropy) - floor(time()/100)*100*pow(10, $entropy));
return Mage::getModel('admin/user')->setId($userId);
// Fix for EE gws functionality
$userRole = Mage::getModel('admin/roles');
$userRole->setGwsIsAll(1);
$user = Mage::getModel('admin/user');
$user->setId($userId);
EcomDev_Utils_Reflection::setRestrictedPropertyValue($user, '_role', $userRole);
return $user;
}
/**
......
......@@ -145,6 +145,7 @@
<helpers>
<mock>EcomDev_PHPUnit_Test_Case_Helper_Mock</mock>
<session>EcomDev_PHPUnit_Test_Case_Helper_Session</session>
<customer>EcomDev_PHPUnit_Test_Case_Helper_Customer</customer>
</helpers>
</suite>
</phpunit>
......
<?php
/**
* Tests for customer session creation
*
* @loadSharedFixture customers
*/
class EcomDev_PHPUnitTest_Test_Helper_Customer extends EcomDev_PHPUnit_Test_Case
{
/**
*
* @dataProvider dataProvider
*/
public function testCustomerSession($customerId)
{
$customerSession = $this->customerSession($customerId);
$expected = $this->expected('auto');
}
\ No newline at end of file
$this->assertEquals($expected->getIsLoggedIn(), $customerSession->isLoggedIn());
if ($expected->getName()) {
$this->assertEquals($expected->getName(), $customerSession->getCustomer()->getName());
}
}
}
......@@ -2,6 +2,10 @@
class EcomDev_PHPUnitTest_Test_Helper_Session extends EcomDev_PHPUnit_Test_Case_Controller
{
/**
* Tests stubbing of any session
*
*/
public function testMockSession()
{
$sessionMock = $this->mockSession('admin/session', array('getUserId'));
......@@ -19,7 +23,8 @@ class EcomDev_PHPUnitTest_Test_Helper_Session extends EcomDev_PHPUnit_Test_Case_
public function testAdminSessionAllRights()
{
$this->adminSession();
$this->assertTrue(Mage::getSingleton('admin/session')->isAllowed('catalog/product'));
$this->assertTrue(Mage::getSingleton('admin/session')->isLoggedIn());
$this->assertTrue(Mage::getSingleton('admin/session')->isAllowed('catalog/products'));
$this->assertTrue(Mage::getSingleton('admin/session')->isAllowed('sales/order'));
$this->assertTrue(Mage::getSingleton('admin/session')->isAllowed('system/config'));
}
......@@ -31,9 +36,9 @@ class EcomDev_PHPUnitTest_Test_Helper_Session extends EcomDev_PHPUnit_Test_Case_
public function testAdminSessionOnlyCatalog()
{
$this->adminSession(array('catalog'));
$this->assertTrue(Mage::getSingleton('admin/session')->isAllowed('catalog/product'));
$this->assertTrue(Mage::getSingleton('admin/session')->isAllowed('catalog/category'));
$this->assertTrue(Mage::getSingleton('admin/session')->isLoggedIn());
$this->assertTrue(Mage::getSingleton('admin/session')->isAllowed('catalog/products'));
$this->assertTrue(Mage::getSingleton('admin/session')->isAllowed('catalog/categories'));
$this->assertFalse(Mage::getSingleton('admin/session')->isAllowed('sales/order'));
$this->assertFalse(Mage::getSingleton('admin/session')->isAllowed('system/config'));
}
......@@ -44,10 +49,11 @@ class EcomDev_PHPUnitTest_Test_Helper_Session extends EcomDev_PHPUnit_Test_Case_
*/
public function testAdminSessionOnlyCatalogProduct()
{
$this->adminSession(array('catalog/product'));
$this->adminSession(array('catalog/products'));
$this->assertTrue(Mage::getSingleton('admin/session')->isAllowed('catalog/product'));
$this->assertFalse(Mage::getSingleton('admin/session')->isAllowed('catalog/category'));
$this->assertTrue(Mage::getSingleton('admin/session')->isLoggedIn());
$this->assertTrue(Mage::getSingleton('admin/session')->isAllowed('catalog/products'));
$this->assertFalse(Mage::getSingleton('admin/session')->isAllowed('catalog/categories'));
$this->assertFalse(Mage::getSingleton('admin/session')->isAllowed('sales/order'));
$this->assertFalse(Mage::getSingleton('admin/session')->isAllowed('system/config'));
}
......
john_doe:
- 1
jane_doe:
- 2
unknown_customer:
- 3
\ No newline at end of file
john_doe:
name: John Doe
is_logged_in: true
jane_doe:
name: Jane Doe
is_logged_in: true
unknown_customer:
is_logged_in: false
\ No newline at end of file
eav:
customer:
- entity_id: 1 # Customer with default billing and shipping addresses
attribute_set_id: 0 # Fix issue with customer entity
website_id: 1
store_id: 1
created_in: Default Store
group_id: 1
firstname: John
lastname: Doe
email: john@doe.com
pasword_hash: d1bcc360d05a6bdd7484784f43660c88:hG
default_billing: 1
default_shipping: 1
- entity_id: 2 # Customer without addresses
attribute_set_id: 0 # Fix issue with customer entity
website_id: 1
store_id: 1
created_in: Default Store
group_id: 1
firstname: Jane
lastname: Doe
email: jane@doe.com
pasword_hash: d1bcc360d05a6bdd7484784f43660c88:hG
customer_address:
- entity_id: 1 # Let him to be a guy from Nevada
attribute_set_id: 0 # Fix issue with customer address entity
customer_id: 1
parent_id: 1
firstname: John
lastname: Doe
country_id: US
region_id: 39
region_code: NV
region: Nevada
postcode: 89001
city: Alamo
telephone: 555-55-55
street: Address 123
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment