diff options
Diffstat (limited to 'plugins/UsersManager/tests/Integration/UsersManagerTest.php')
-rw-r--r-- | plugins/UsersManager/tests/Integration/UsersManagerTest.php | 273 |
1 files changed, 150 insertions, 123 deletions
diff --git a/plugins/UsersManager/tests/Integration/UsersManagerTest.php b/plugins/UsersManager/tests/Integration/UsersManagerTest.php index 49059acc10..92188ea024 100644 --- a/plugins/UsersManager/tests/Integration/UsersManagerTest.php +++ b/plugins/UsersManager/tests/Integration/UsersManagerTest.php @@ -13,18 +13,15 @@ use Piwik\Access; use Piwik\Auth\Password; use Piwik\Date; use Piwik\Option; -use Piwik\Piwik; use Piwik\Plugins\SitesManager\API as APISitesManager; use Piwik\Plugins\UsersManager\API; use Piwik\Plugins\UsersManager\Model; use Piwik\Plugins\UsersManager\NewsletterSignup; use Piwik\Plugins\UsersManager\UsersManager; use Piwik\Plugins\UsersManager\UserUpdater; -use Piwik\SettingsPiwik; use Piwik\Tests\Framework\Fixture; use Piwik\Tests\Framework\Mock\FakeAccess; use Piwik\Tests\Framework\TestCase\IntegrationTestCase; -use Piwik\View; /** @@ -66,7 +63,7 @@ class UsersManagerTest extends IntegrationTestCase FakeAccess::$superUserLogin = 'superusertest'; $this->backupIdentity = FakeAccess::$identity; - $this->api = API::getInstance(); + $this->api = API::getInstance(); $this->model = new Model(); } @@ -109,10 +106,13 @@ class UsersManagerTest extends IntegrationTestCase unset($userAfter['idchange_last_viewed']); unset($userAfter['password']); unset($userAfter['invite_status']); - + unset($userAfter['invite_token']); + unset($userAfter['invite_expired_at']); + unset($userAfter['invite_accept_at']); + unset($userAfter['invited_by']); // implicitly checks password! - $user['email'] = $newEmail; + $user['email'] = $newEmail; $user['superuser_access'] = 0; $user['twofactor_secret'] = ''; @@ -130,9 +130,11 @@ class UsersManagerTest extends IntegrationTestCase $this->expectExceptionMessage('UsersManager_ExceptionInvalidPassword'); $login = "login"; - $user = array('login' => $login, - 'password' => "geqgeagae", - 'email' => "test@test.com"); + $user = array( + 'login' => $login, + 'password' => "geqgeagae", + 'email' => "test@test.com", + ); $this->api->addUser($user['login'], $user['password'], $user['email']); @@ -150,10 +152,10 @@ class UsersManagerTest extends IntegrationTestCase public function getAddUserInvalidLoginData() { return array( - array(9, "password", "email@email.com"), // wrong login / integer => exception - array("gegag'ggea'", "password", "email@email.com"), // wrong login / too short => exception - array("gegag11gge&", "password", "email@email.com"), // wrong login / too long => exception - array("geg'ag11gge@", "password", "email@email.com"), // wrong login / bad characters => exception + array(9, "password", "email@email.com"), // wrong login / integer => exception + array("gegag'ggea'", "password", "email@email.com"), // wrong login / too short => exception + array("gegag11gge&", "password", "email@email.com"), // wrong login / too long => exception + array("geg'ag11gge@", "password", "email@email.com"), // wrong login / bad characters => exception ); } @@ -177,6 +179,25 @@ class UsersManagerTest extends IntegrationTestCase $this->api->addUser("test", "password2", "em2ail@email.com"); } + public function testAddUserExistingEmail() + { + $this->expectException(\Exception::class); + $this->expectExceptionMessage('UsersManager_ExceptionEmailExists'); + + $this->api->addUser("test", "password", "email@email.com"); + $this->api->addUser("test2", "password2", "email@email.com"); + } + + + public function testAddUserExistingEmailAsUserName() + { + $this->expectException(\Exception::class); + $this->expectExceptionMessage('UsersManager_ExceptionEmailExistsAsLogin'); + + $this->api->addUser("email@email.com", "password", "email2@email.com"); + $this->api->addUser("test2", "password2", "email@email.com"); + } + /** * @see https://github.com/piwik/piwik/issues/8548 */ @@ -195,8 +216,8 @@ class UsersManagerTest extends IntegrationTestCase public function getWrongPasswordTestData() { return array( - array("geggeqgeqag", "pas", "email@email.com"), // too short -> exception - array("geggeqgeqag", "", "email@email.com"), // empty -> exception + array("geggeqgeqag", "pas", "email@email.com"), // too short -> exception + array("geggeqgeqag", "", "email@email.com"), // empty -> exception ); } @@ -225,7 +246,9 @@ class UsersManagerTest extends IntegrationTestCase public function testAddUserLongPassword() { $login = "geggeqgeqag"; - $this->api->addUser($login, "geqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaeg", "mgeagi@geq.com"); + $this->api->addUser($login, + "geqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaeg", + "mgeagi@geq.com"); $user = $this->api->getUser($login); $this->assertEquals($login, $user['login']); } @@ -245,7 +268,7 @@ class UsersManagerTest extends IntegrationTestCase // check that the date registered is correct $this->assertTrue($time <= strtotime($user['date_registered']) && strtotime($user['date_registered']) <= time(), - "the date_registered " . strtotime($user['date_registered']) . " is different from the time() " . time()); + "the date_registered " . strtotime($user['date_registered']) . " is different from the time() " . time()); // check that password and token are properly set $this->assertEquals(60, strlen($user['password'])); @@ -280,7 +303,7 @@ class UsersManagerTest extends IntegrationTestCase $access = $this->api->getSitesAccessFromUser($login); $this->assertEquals([ - ['site' => 1, 'access' => 'view'], + ['site' => 1, 'access' => 'view'], ], $access); } @@ -295,7 +318,8 @@ class UsersManagerTest extends IntegrationTestCase $this->api->addUser('userLogin2', 'password', 'userlogin2@email.com'); } - public function test_addUser_shouldNotAllowAdminUsersToCreateUsersWithAccessToSite_ThatAdminUserDoesNotHaveAccessTo() + public function test_addUser_shouldNotAllowAdminUsersToCreateUsersWithAccessToSite_ThatAdminUserDoesNotHaveAccessTo( + ) { $this->expectException(\Exception::class); $this->expectExceptionMessage('checkUserHasAdminAccess Fake exception'); @@ -440,17 +464,32 @@ class UsersManagerTest extends IntegrationTestCase $this->api->addUser("geggeqge632ge56a4qag", "geqgegeagae", "tesggt@tesgt.com"); $this->api->addUser("geggeqgeqagqegg", "geqgeaggggae", "tesgggt@tesgt.com"); - Option::set('UsersManager.lastSeen.gegg4564eqgeqag',$now = time()); + Option::set('UsersManager.lastSeen.gegg4564eqgeqag', $now = time()); $users = $this->api->getUsers(); $users = $this->_removeNonTestableFieldsFromUsers($users); - $user1 = array('login' => "gegg4564eqgeqag", 'email' => "tegst@tesgt.com", 'superuser_access' => 0, 'uses_2fa' => false, 'last_seen' => Date::getDatetimeFromTimestamp($now)); - $user2 = array('login' => "geggeqge632ge56a4qag", 'email' => "tesggt@tesgt.com", 'superuser_access' => 0, 'uses_2fa' => false); - $user3 = array('login' => "geggeqgeqagqegg", 'email' => "tesgggt@tesgt.com", 'superuser_access' => 0, 'uses_2fa' => false); + $user1 = array('login' => "gegg4564eqgeqag", + 'email' => "tegst@tesgt.com", + 'superuser_access' => 0, + 'uses_2fa' => false, + 'last_seen' => Date::getDatetimeFromTimestamp($now) + ); + $user2 = array('login' => "geggeqge632ge56a4qag", + 'email' => "tesggt@tesgt.com", + 'superuser_access' => 0, + 'uses_2fa' => false + ); + $user3 = array('login' => "geggeqgeqagqegg", + 'email' => "tesgggt@tesgt.com", + 'superuser_access' => 0, + 'uses_2fa' => false + ); $expectedUsers = array($user1, $user2, $user3); $this->assertEquals($expectedUsers, $users); - $this->assertEquals(array($user1), $this->_removeNonTestableFieldsFromUsers($this->api->getUsers('gegg4564eqgeqag'))); - $this->assertEquals(array($user1, $user2), $this->_removeNonTestableFieldsFromUsers($this->api->getUsers('gegg4564eqgeqag,geggeqge632ge56a4qag'))); + $this->assertEquals(array($user1), + $this->_removeNonTestableFieldsFromUsers($this->api->getUsers('gegg4564eqgeqag'))); + $this->assertEquals(array($user1, $user2), + $this->_removeNonTestableFieldsFromUsers($this->api->getUsers('gegg4564eqgeqag,geggeqge632ge56a4qag'))); } public function testGetUsers_withViewAccess_shouldThrowAnException() @@ -475,6 +514,10 @@ class UsersManagerTest extends IntegrationTestCase unset($user['date_registered']); unset($user['ts_password_modified']); unset($user['invite_status']); + unset($user['invite_expired_at']); + unset($user['invite_token']); + unset($user['invite_accept_at']); + unset($user['invited_by']); } return $users; } @@ -518,7 +561,7 @@ class UsersManagerTest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('checkUserHasSomeAdminAccess Fake exception'); - FakeAccess::clearAccess($superUser = false, $admin =array(), $view = array(1)); + FakeAccess::clearAccess($superUser = false, $admin = array(), $view = array(1)); $this->api->getUserLoginFromUserEmail('tegst@tesgt.com'); } @@ -527,7 +570,7 @@ class UsersManagerTest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist'); - FakeAccess::clearAccess($superUser = false, $admin =array(1), $view = array()); + FakeAccess::clearAccess($superUser = false, $admin = array(1), $view = array()); $this->api->setUserAccess("nologin", "view", 1); } @@ -537,7 +580,7 @@ class UsersManagerTest extends IntegrationTestCase $this->expectExceptionMessage('UsersManager_ExceptionAccessValues'); $this->api->addUser("gegg4564eqgeqag", "geqgegagae", "tegst@tesgt.com"); - FakeAccess::clearAccess($superUser = false, $admin =array(1), $view = array()); + FakeAccess::clearAccess($superUser = false, $admin = array(1), $view = array()); $this->api->setUserAccess("gegg4564eqgeqag", "viewnotknown", 1); } @@ -547,7 +590,7 @@ class UsersManagerTest extends IntegrationTestCase $this->expectExceptionMessage('UsersManager_ExceptionAccessValues'); $this->api->addUser("gegg4564eqgeqag", "geqgegagae", "tegst@tesgt.com"); - FakeAccess::clearAccess($superUser = false, $admin =array(1), $view = array()); + FakeAccess::clearAccess($superUser = false, $admin = array(1), $view = array()); $this->api->setUserAccess("gegg4564eqgeqag", "superuser", 1); } @@ -556,7 +599,7 @@ class UsersManagerTest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist'); - FakeAccess::clearAccess($superUser = false, $admin =array(1), $view = array()); + FakeAccess::clearAccess($superUser = false, $admin = array(1), $view = array()); $this->api->setUserAccess('superusertest', 'view', 1); } @@ -769,7 +812,7 @@ class UsersManagerTest extends IntegrationTestCase $pwd = $this->createCurrentUser(); - FakeAccess::$superUser= false; + FakeAccess::$superUser = false; $this->api->setSuperUserAccess('nologin', false, $pwd); } @@ -901,9 +944,11 @@ class UsersManagerTest extends IntegrationTestCase $this->expectExceptionMessage('UsersManager_ConfirmWithPassword'); $login = "login"; - $user = array('login' => $login, - 'password' => "geqgeagae", - 'email' => "test@test.com"); + $user = array( + 'login' => $login, + 'password' => "geqgeagae", + 'email' => "test@test.com" + ); $this->api->addUser($user['login'], $user['password'], $user['email']); @@ -917,9 +962,11 @@ class UsersManagerTest extends IntegrationTestCase $this->expectExceptionMessage('UsersManager_CurrentPasswordNotCorrect'); $login = "login"; - $user = array('login' => $login, - 'password' => "geqgeagae", - 'email' => "test@test.com"); + $user = array( + 'login' => $login, + 'password' => "geqgeagae", + 'email' => "test@test.com" + ); $this->api->addUser($user['login'], $user['password'], $user['email']); @@ -933,9 +980,11 @@ class UsersManagerTest extends IntegrationTestCase $this->expectExceptionMessage('UsersManager_CurrentPasswordNotCorrect'); $login = "login"; - $user = array('login' => $login, - 'password' => "geqgeagae", - 'email' => "test@test.com"); + $user = array( + 'login' => $login, + 'password' => "geqgeagae", + 'email' => "test@test.com" + ); $this->api->addUser($user['login'], $user['password'], $user['email']); // currently logged in is a super user and not "login". therefore the password of "login" won't work @@ -948,9 +997,11 @@ class UsersManagerTest extends IntegrationTestCase public function testUpdateUserNoEmail() { $login = "login"; - $user = array('login' => $login, - 'password' => "geqgeagae", - 'email' => "test@test.com"); + $user = array( + 'login' => $login, + 'password' => "geqgeagae", + 'email' => "test@test.com" + ); $this->api->addUser($user['login'], $user['password'], $user['email']); @@ -990,9 +1041,11 @@ class UsersManagerTest extends IntegrationTestCase public function testUpdateUser() { $login = "login"; - $user = array('login' => $login, - 'password' => "geqgeagae", - 'email' => "test@test.com"); + $user = array( + 'login' => $login, + 'password' => "geqgeagae", + 'email' => "test@test.com" + ); $this->api->addUser($user['login'], $user['password'], $user['email']); @@ -1011,9 +1064,11 @@ class UsersManagerTest extends IntegrationTestCase public function testGetUserByEmail() { - $user = array('login' => "login", - 'password' => "geqgeagae", - 'email' => "test@test.com"); + $user = array( + 'login' => "login", + 'password' => "geqgeagae", + 'email' => "test@test.com" + ); $this->api->addUser($user['login'], $user['password'], $user['email']); @@ -1038,23 +1093,24 @@ class UsersManagerTest extends IntegrationTestCase $this->addSites(1); $roles = $this->api->getAvailableRoles(); $expected = array( - array ( - 'id' => 'view', - 'name' => 'UsersManager_PrivView', - 'description' => 'UsersManager_PrivViewDescription', - 'helpUrl' => 'https://matomo.org/faq/general/faq_70/' - ), array ( - 'id' => 'write', - 'name' => 'UsersManager_PrivWrite', - 'description' => 'UsersManager_PrivWriteDescription', - 'helpUrl' => 'https://matomo.org/faq/general/faq_26910' - ), - array ( - 'id' => 'admin', - 'name' => 'UsersManager_PrivAdmin', - 'description' => 'UsersManager_PrivAdminDescription', - 'helpUrl' => 'https://matomo.org/faq/general/faq_69/', - ) + array( + 'id' => 'view', + 'name' => 'UsersManager_PrivView', + 'description' => 'UsersManager_PrivViewDescription', + 'helpUrl' => 'https://matomo.org/faq/general/faq_70/' + ), + array( + 'id' => 'write', + 'name' => 'UsersManager_PrivWrite', + 'description' => 'UsersManager_PrivWriteDescription', + 'helpUrl' => 'https://matomo.org/faq/general/faq_26910' + ), + array( + 'id' => 'admin', + 'name' => 'UsersManager_PrivAdmin', + 'description' => 'UsersManager_PrivAdminDescription', + 'helpUrl' => 'https://matomo.org/faq/general/faq_69/', + ) ); $this->assertEquals($expected, $roles); } @@ -1063,30 +1119,30 @@ class UsersManagerTest extends IntegrationTestCase { $this->addSites(1); $this->assertSame(array( - 0 => array( - 'id' => 'tagmanager_write', - 'name' => 'UsersManager_PrivWrite', - 'description' => 'TagManager_CapabilityWriteDescription', - 'helpUrl' => '', - 'includedInRoles' => array ('write', 'admin'), - 'category' => 'TagManager_TagManager', - ), - 1 => array ( - 'id' => 'tagmanager_publish_live_container', - 'name' => 'TagManager_CapabilityPublishLiveContainer', - 'description' => 'TagManager_CapabilityPublishLiveContainerDescription', - 'helpUrl' => '', - 'includedInRoles' => array ('admin'), - 'category' => 'TagManager_TagManager', - ), - 2 => array ( - 'id' => 'tagmanager_use_custom_templates', - 'name' => 'TagManager_CapabilityUseCustomTemplates', - 'description' => 'TagManager_CapabilityUseCustomTemplateDescription', - 'helpUrl' => '', - 'includedInRoles' => array ('admin'), - 'category' => 'TagManager_TagManager', - ) + 0 => array( + 'id' => 'tagmanager_write', + 'name' => 'UsersManager_PrivWrite', + 'description' => 'TagManager_CapabilityWriteDescription', + 'helpUrl' => '', + 'includedInRoles' => array('write', 'admin'), + 'category' => 'TagManager_TagManager', + ), + 1 => array( + 'id' => 'tagmanager_publish_live_container', + 'name' => 'TagManager_CapabilityPublishLiveContainer', + 'description' => 'TagManager_CapabilityPublishLiveContainerDescription', + 'helpUrl' => '', + 'includedInRoles' => array('admin'), + 'category' => 'TagManager_TagManager', + ), + 2 => array( + 'id' => 'tagmanager_use_custom_templates', + 'name' => 'TagManager_CapabilityUseCustomTemplates', + 'description' => 'TagManager_CapabilityUseCustomTemplateDescription', + 'helpUrl' => '', + 'includedInRoles' => array('admin'), + 'category' => 'TagManager_TagManager', + ) ), $this->api->getAvailableCapabilities()); } @@ -1104,43 +1160,14 @@ class UsersManagerTest extends IntegrationTestCase $this->assertNotEmpty($user['invite_status']); } - public function testInviteUserEmail() - { - $view = new View('@UsersManager/_userInviteEmail.twig'); - $view->login = "test"; - $view->emailAddress = "test@test.com";; - $view->idSite = 1; - $view->siteName = 'test'; - $view->token = "thisisatoken"; - - // content line for email body - $view->content =Piwik::translate('CoreAdminHome_UserInviteSubject', - ["<strong>test</strong>", "<strong>test</strong>"]); - - //notes for email footer - $view->notes = Piwik::translate('CoreAdminHome_UserInviteNotes', ['test','test']); - $host = SettingsPiwik::getPiwikUrl(); - $content = <<<END -<p>General_HelloUser</p> -<p>CoreAdminHome_UserInviteSubject</p> -<a target="_blank" href="$host?module=Login&action=acceptInvitation&token=thisisatoken" ->CoreAdminHome_AcceptInvite</a> | -<a target="_blank" href="$host?module=Login&action=declineInvitation&token=thisisatoken" ->CoreAdminHome_DeclineInvite</a> -<p><b>Notes:</b>CoreAdminHome_UserInviteNotes</p> -END; - $this->assertEquals($content, $view->render()); - - } - - private function addSites($numberOfSites) { $idSites = array(); for ($index = 0; $index < $numberOfSites; $index++) { - $name = "test" . ($index + 1); - $idSites[] = APISitesManager::getInstance()->addSite($name, array("http://piwik.net", "http://piwik.com/test/")); + $name = "test" . ($index + 1); + $idSites[] = APISitesManager::getInstance()->addSite($name, + array("http://piwik.net", "http://piwik.com/test/")); } return $idSites; @@ -1149,7 +1176,7 @@ END; public function provideContainerConfig() { return array( - 'Piwik\Access' => new FakeAccess() + 'Piwik\Access' => new FakeAccess() ); } |