From ad33628220ca6cadad46ebb69e88a8005a5b0394 Mon Sep 17 00:00:00 2001 From: diosmosis <benaka@piwik.pro> Date: Mon, 29 Sep 2014 20:23:56 -0700 Subject: [PATCH] Fixing UI tests and adding tests for Access::doAsSuperUser. --- plugins/Installation/Controller.php | 6 ++- plugins/Login/PasswordResetter.php | 4 +- tests/PHPUnit/Integration/Core/AccessTest.php | 54 +++++++++++++++++++ 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/plugins/Installation/Controller.php b/plugins/Installation/Controller.php index 7d66116082..a26a29d182 100644 --- a/plugins/Installation/Controller.php +++ b/plugins/Installation/Controller.php @@ -306,9 +306,11 @@ class Controller extends \Piwik\Plugin\ControllerAdmin { $this->checkPiwikIsNotInstalled(); - $this->initObjectsToCallAPI(); + $siteIdsCount = Access::doAsSuperUser(function () { + return count(APISitesManager::getInstance()->getAllSitesId()); + }); - if (count(APISitesManager::getInstance()->getAllSitesId()) > 0) { + if ($siteIdsCount > 0) { // if there is a already a website, skip this step and trackingCode step $this->redirectToNextStep('trackingCode'); } diff --git a/plugins/Login/PasswordResetter.php b/plugins/Login/PasswordResetter.php index 3f3c384183..d2631abdf9 100644 --- a/plugins/Login/PasswordResetter.php +++ b/plugins/Login/PasswordResetter.php @@ -210,7 +210,7 @@ class PasswordResetter // reset password of user $usersManager = $this->usersManagerApi; - UsersManagerAPI::doAsSuperUser(function () use ($usersManager, $user, $resetPassword) { + Access::doAsSuperUser(function () use ($usersManager, $user, $resetPassword) { $usersManager->updateUser( $user['login'], $resetPassword, $email = false, $alias = false, $isPasswordHashed = true); }); @@ -360,7 +360,7 @@ class PasswordResetter protected function getUserInformation($loginOrMail) { $usersManager = $this->usersManagerApi; - return UsersManagerAPI::doAsSuperUser(function () use ($loginOrMail, $usersManager) { + return Access::doAsSuperUser(function () use ($loginOrMail, $usersManager) { $user = null; if ($usersManager->userExists($loginOrMail)) { $user = $usersManager->getUser($loginOrMail); diff --git a/tests/PHPUnit/Integration/Core/AccessTest.php b/tests/PHPUnit/Integration/Core/AccessTest.php index 87dc7cf4d5..5e95ed3326 100644 --- a/tests/PHPUnit/Integration/Core/AccessTest.php +++ b/tests/PHPUnit/Integration/Core/AccessTest.php @@ -309,4 +309,58 @@ class Core_AccessTest extends DatabaseTestCase $this->assertTrue($access->reloadAccess($mock)); $this->assertFalse($access->hasSuperUserAccess()); } + + public function test_doAsSuperUser_ChangesSuperUserAccessCorrectly() + { + Access::getInstance()->setSuperUserAccess(false); + + $this->assertFalse(Access::getInstance()->hasSuperUserAccess()); + + Access::doAsSuperUser(function () { + Core_AccessTest::assertTrue(Access::getInstance()->hasSuperUserAccess()); + }); + + $this->assertFalse(Access::getInstance()->hasSuperUserAccess()); + } + + public function test_doAsSuperUser_RemovesSuperUserAccess_IfExceptionThrown() + { + Access::getInstance()->setSuperUserAccess(false); + + $this->assertFalse(Access::getInstance()->hasSuperUserAccess()); + + try { + Access::doAsSuperUser(function () { + throw new Exception(); + }); + + $this->fail("Exception was not propagated by doAsSuperUser."); + } catch (Exception $ex) + { + // pass + } + + $this->assertFalse(Access::getInstance()->hasSuperUserAccess()); + } + + public function test_doAsSuperUser_ReturnsCallbackResult() + { + $result = Access::doAsSuperUser(function () { + return 24; + }); + $this->assertEquals(24, $result); + } + + public function test_reloadAccess_DoesNotRemoveSuperUserAccess_IfUsedInDoAsSuperUser() + { + Access::getInstance()->setSuperUserAccess(false); + + Access::doAsSuperUser(function () { + $access = Access::getInstance(); + + Core_AccessTest::assertTrue($access->hasSuperUserAccess()); + $access->reloadAccess(); + Core_AccessTest::assertTrue($access->hasSuperUserAccess()); + }); + } } \ No newline at end of file -- GitLab