objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $this->auth = $this->objectManager->create(\Magento\Backend\Model\Auth::class); $this->authSession = $this->objectManager->create(\Magento\Backend\Model\Auth\Session::class); $this->adminSessionInfo = $this->objectManager->create(\Magento\Security\Model\AdminSessionInfo::class); $this->auth->setAuthStorage($this->authSession); $this->userExpirationManager = $this->objectManager->create(\Magento\Security\Model\UserExpirationManager::class); } /** * @magentoDataFixture Magento/Security/_files/expired_users.php */ public function testUserIsExpired() { $adminUserNameFromFixture = 'adminUserExpired'; $user = $this->loadUserByUsername($adminUserNameFromFixture); static::assertTrue($this->userExpirationManager->isUserExpired($user->getId())); } /** * @magentoDataFixture Magento/Security/_files/expired_users.php * @magentoAppIsolation enabled */ public function testDeactivateExpiredUsersWithExpiredUser() { $adminUsernameFromFixture = 'adminUserNotExpired'; $this->loginUser($adminUsernameFromFixture); $user = $this->loadUserByUsername($adminUsernameFromFixture); $adminSessionInfoId = $this->authSession->getAdminSessionInfoId(); $this->expireUser($user); $this->userExpirationManager->deactivateExpiredUsersById([$user->getId()]); $this->adminSessionInfo->load($adminSessionInfoId, 'id'); $user->reload(); $userExpirationModel = $this->loadExpiredUserModelByUser($user); static::assertEquals(0, $user->getIsActive()); static::assertNull($userExpirationModel->getId()); static::assertEquals(AdminSessionInfo::LOGGED_OUT, (int)$this->adminSessionInfo->getStatus()); } /** * @magentoDataFixture Magento/Security/_files/expired_users.php * @magentoAppIsolation enabled */ public function testDeactivateExpiredUsersWithNonExpiredUser() { $adminUsernameFromFixture = 'adminUserNotExpired'; $this->loginUser($adminUsernameFromFixture); $user = $this->loadUserByUsername($adminUsernameFromFixture); $adminSessionInfoId = $this->authSession->getAdminSessionInfoId(); $this->userExpirationManager->deactivateExpiredUsersById([$user->getId()]); $user->reload(); $userExpirationModel = $this->loadExpiredUserModelByUser($user); $this->adminSessionInfo->load($adminSessionInfoId, 'id'); static::assertEquals(1, $user->getIsActive()); static::assertEquals($user->getId(), $userExpirationModel->getId()); static::assertEquals(AdminSessionInfo::LOGGED_IN, (int)$this->adminSessionInfo->getStatus()); } /** * Test deactivating without inputting a user. * * @magentoDataFixture Magento/Security/_files/expired_users.php */ public function testDeactivateExpiredUsers() { $notExpiredUser = $this->loadUserByUsername('adminUserNotExpired'); $expiredUser = $this->loadUserByUsername('adminUserExpired'); $this->userExpirationManager->deactivateExpiredUsers(); $notExpiredUserExpirationModel = $this->loadExpiredUserModelByUser($notExpiredUser); $expiredUserExpirationModel = $this->loadExpiredUserModelByUser($expiredUser); static::assertNotNull($notExpiredUserExpirationModel->getId()); static::assertNull($expiredUserExpirationModel->getId()); $notExpiredUser->reload(); $expiredUser->reload(); static::assertEquals($notExpiredUser->getIsActive(), 1); static::assertEquals($expiredUser->getIsActive(), 0); } /** * Login the given user and return a user model. * * @param string $username * @throws \Magento\Framework\Exception\AuthenticationException */ private function loginUser(string $username) { $this->auth->login( $username, \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD ); } /** * @param $username * @return \Magento\User\Model\User */ private function loadUserByUsername(string $username): \Magento\User\Model\User { /** @var \Magento\User\Model\User $user */ $user = $this->objectManager->create(\Magento\User\Model\User::class); $user->loadByUsername($username); return $user; } /** * Expire the given user and return the UserExpiration model. * * @param \Magento\User\Model\User $user * @throws \Exception */ private function expireUser(\Magento\User\Model\User $user) { $expireDate = new \DateTime(); $expireDate->modify('-10 days'); /** @var \Magento\Security\Api\Data\UserExpirationInterface $userExpiration */ $userExpiration = $this->objectManager->create(\Magento\Security\Api\Data\UserExpirationInterface::class); $userExpiration->setId($user->getId()) ->setExpiresAt($expireDate->format('Y-m-d H:i:s')) ->save(); } /** * @param \Magento\User\Model\User $user * @return \Magento\Security\Model\UserExpiration */ private function loadExpiredUserModelByUser(\Magento\User\Model\User $user): \Magento\Security\Model\UserExpiration { /** @var \Magento\Security\Model\UserExpiration $expiredUserModel */ $expiredUserModel = $this->objectManager->create(\Magento\Security\Model\UserExpiration::class); $expiredUserModel->load($user->getId()); return $expiredUserModel; } }