Skip to content

Commit 458b71b

Browse files
committed
Merge remote-tracking branch 'origin/MC-30224' into 2.4-develop-pr1
2 parents 6ccba68 + 721e74e commit 458b71b

File tree

2 files changed

+79
-15
lines changed
  • app/code/Magento/User/Model/ResourceModel
  • dev/tests/integration/testsuite/Magento/User/Model/ResourceModel

2 files changed

+79
-15
lines changed

app/code/Magento/User/Model/ResourceModel/User.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Magento\Authorization\Model\UserContextInterface;
1414
use Magento\Framework\Acl\Data\CacheInterface;
1515
use Magento\Framework\App\ObjectManager;
16+
use Magento\Framework\Exception\LocalizedException;
1617
use Magento\User\Model\Backend\Config\ObserverConfig;
1718
use Magento\User\Model\User as ModelUser;
1819

@@ -249,27 +250,33 @@ protected function _afterLoad(\Magento\Framework\Model\AbstractModel $user)
249250
*
250251
* @param \Magento\Framework\Model\AbstractModel $user
251252
* @return bool
252-
* @throws \Magento\Framework\Exception\LocalizedException
253+
* @throws LocalizedException
253254
*/
254255
public function delete(\Magento\Framework\Model\AbstractModel $user)
255256
{
257+
$uid = $user->getId();
258+
if (!$uid) {
259+
return false;
260+
}
261+
256262
$this->_beforeDelete($user);
257263
$connection = $this->getConnection();
258-
259-
$uid = $user->getId();
260264
$connection->beginTransaction();
261265
try {
262266
$connection->delete($this->getMainTable(), ['user_id = ?' => $uid]);
263267
$connection->delete(
264268
$this->getTable('authorization_role'),
265269
['user_id = ?' => $uid, 'user_type = ?' => UserContextInterface::USER_TYPE_ADMIN]
266270
);
267-
} catch (\Magento\Framework\Exception\LocalizedException $e) {
271+
} catch (LocalizedException $e) {
268272
$connection->rollBack();
273+
269274
return false;
270275
}
276+
271277
$connection->commit();
272278
$this->_afterDelete($user);
279+
273280
return true;
274281
}
275282

dev/tests/integration/testsuite/Magento/User/Model/ResourceModel/UserTest.php

Lines changed: 68 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,40 +3,60 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
namespace Magento\User\Model\ResourceModel;
79

10+
use Magento\Authorization\Model\ResourceModel\Role\Collection as UserRoleCollection;
11+
use Magento\Authorization\Model\ResourceModel\Role\CollectionFactory as UserRoleCollectionFactory;
12+
use Magento\Authorization\Model\UserContextInterface;
813
use Magento\TestFramework\Helper\Bootstrap;
9-
use Magento\User\Model\User;
1014
use Magento\User\Model\ResourceModel\User as UserResourceModel;
15+
use Magento\User\Model\User;
16+
use Magento\User\Model\UserFactory;
1117

1218
/**
1319
* @magentoAppArea adminhtml
1420
*/
1521
class UserTest extends \PHPUnit\Framework\TestCase
1622
{
17-
/** @var UserResourceModel */
23+
/**
24+
* @var UserResourceModel
25+
*/
1826
private $model;
1927

28+
/**
29+
* @var UserRoleCollectionFactory
30+
*/
31+
private $userRoleCollectionFactory;
32+
33+
/**
34+
* @var UserFactory
35+
*/
36+
private $userFactory;
37+
38+
/**
39+
* @inheritdoc
40+
*/
2041
protected function setUp()
2142
{
22-
$this->model = Bootstrap::getObjectManager()->get(
23-
UserResourceModel::class
24-
);
43+
$this->model = Bootstrap::getObjectManager()->get(UserResourceModel::class);
44+
$this->userRoleCollectionFactory = Bootstrap::getObjectManager()->get(UserRoleCollectionFactory::class);
45+
$this->userFactory = Bootstrap::getObjectManager()->get(UserFactory::class);
2546
}
2647

2748
/**
2849
* Tests if latest password is stored after user creating
2950
* when password lifetime config value is zero (disabled as fact)
3051
*
52+
* @return void
3153
* @magentoConfigFixture current_store admin/security/password_lifetime 0
3254
* @magentoDataFixture Magento/User/_files/dummy_user.php
3355
*/
34-
public function testGetLatestPasswordWhenZeroPasswordLifetime()
56+
public function testGetLatestPasswordWhenZeroPasswordLifetime(): void
3557
{
3658
/** @var User $user */
37-
$user = Bootstrap::getObjectManager()->create(
38-
User::class
39-
);
59+
$user = $this->userFactory->create();
4060
$user->loadByUsername('dummy_username');
4161
$latestPassword = $this->model->getLatestPassword($user->getId());
4262

@@ -46,12 +66,49 @@ public function testGetLatestPasswordWhenZeroPasswordLifetime()
4666
);
4767
}
4868

49-
public function testCountAll()
69+
/**
70+
* Test that user role is not deleted after deleting empty user.
71+
*
72+
* @return void
73+
*/
74+
public function testDelete(): void
75+
{
76+
$this->checkRoleCollectionSize();
77+
/** @var User $user */
78+
$user = $this->userFactory->create();
79+
$this->model->delete($user);
80+
$this->checkRoleCollectionSize();
81+
}
82+
83+
/**
84+
* Ensure that role collection size is correct.
85+
*
86+
* @return void
87+
*/
88+
private function checkRoleCollectionSize(): void
89+
{
90+
/** @var UserRoleCollection $roleCollection */
91+
$roleCollection = $this->userRoleCollectionFactory->create();
92+
$roleCollection->setUserFilter(0, UserContextInterface::USER_TYPE_ADMIN);
93+
$this->assertEquals(1, $roleCollection->getSize());
94+
}
95+
96+
/**
97+
* Check total user count.
98+
*
99+
* @return void
100+
*/
101+
public function testCountAll(): void
50102
{
51103
$this->assertSame(1, $this->model->countAll());
52104
}
53105

54-
public function testGetValidationRulesBeforeSave()
106+
/**
107+
* Check validation rules has correct type.
108+
*
109+
* @return void
110+
*/
111+
public function testGetValidationRulesBeforeSave(): void
55112
{
56113
$rules = $this->model->getValidationRulesBeforeSave();
57114
$this->assertInstanceOf('Zend_Validate_Interface', $rules);

0 commit comments

Comments
 (0)