diff options
author | diosmosis <diosmosis@users.noreply.github.com> | 2018-08-07 01:20:32 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-07 01:20:32 +0300 |
commit | 2e006803ee17a8d1a992085c6425eddaa84a25f5 (patch) | |
tree | 6798441780992ff6e1b3010aa98519c2c2af1f5b /tests | |
parent | bb1b1b4b068fc40da896e7eedbad3b2914dc2468 (diff) |
Scalable UX for user management (#13158)
* Create empty components.
* Mock up users list pagination.
* Finish initial version of mockup.
* Tweak to UI
* More UI changes to new users manager screen.
* More UI changes
* Mock up user permission edits.
* More tweaks to user permission editing (on both edit form & in users table).
* add options
* Another iteration on the UsersManager UI.
* Update UsersManager UI again.
* Implementing parts of the UI, fixing issue w/ overlapping material selects, creating dropdown directives for dropdown w/ submenu using materializecss, change bulk actions to be dropdown button.
* Merge menu/submenu directives.
* More superuser UI only functionality.
* Fill out more logic of users manager UI + merging extra unneeded components/directives.
* More users manager UI only changes.
* Incomplete API method for new users list page.
* Fill in server side pagination logic w/ tests & generally get to work in UI.
* Make sure selects w/ placeholders can be unset.
* Add loading state to users list + fix pagination issues + resize pagination in case the numbers are large.
* Add last seen time to getUsersPlusAccessLevel() so it displays in UI.
* Add permission edit pagination AJAX query + server side code.
* Add "add access" button to user permission component.
* Change permissions column to role + remove superuser checkbox & merge w/ Role column.
* Delete user + bulk delete functionality.
* Get delete users to work when entire search is selected.
* Ask for confirmation before setting access in users list & implement access change logic.
* Get bulk access functionality on users list to work (w/ tests).
* Fix a bug in user table filtering + get permissions edit search to work.
* Complete logic for permissions edit.
* Change add user workflow so we do not have to save each permission edit in memory before saving whole user.
* Add/edit user functionality.
* Toggle superuser access functionality + some modal fixes.
* in users list display ajax loading notification so counter is not changed visibly before rows are loaded.
* initial review changes, disable functionality when viewing user is not superuser and some UI tweaks.
* Redo top controls for user permission edit and add slide up toast notification for when a site is added.
* Display warning in user permission edit if user has no access at all.
* Do not reload users after going back from user edit form.
* Force giving a new user access to a site when creating a user and make sure user list reloads if a user is modified, but does not realod if no user is modified.
* Add form help to the non-straightforward fields.
* Remove old usersmanager code & fix pagination bug.
* Add help icon explaining roles to users list + permission edit.
* Allow admin users to create other users + fix some regressions when making page-users-list not reload every time.
* Apply self review changes.
* Do not allow editing user details when an admin user edits a user.
* Starting on UI tests.
* Limit users displayed in page list to those that already have access to sites the current user is an admin of.
* Refactor bulk/single AJAX calls & redraw component boundaries (users manager component owns user search state, paged users list owns table/control state).
* Get add existing user modal to work.
* write most UI tests + modify fixture
* Fill out rest of UI test suite & get the rest to pass.
* fix couple regressions
* Get UI tests to pass and start on translation.
* adding translations
* try to fix some tests
* Fixing API tests.
* Fixing UsersManager tests.
* Fix UI tests.
* Add capabilities to new API output.
* remove non-existant file references.
* Add Write role to dropdowns.
* Select from proper join.
* tweak test
* Updating UI tests.
* Change styling of user permissions edit.
* Update screenshots
* Apply some PR feedback.
* apply some review feedback
* more review changes
* update file headers
* remove some TODOs
* fix some tests
* some more review fixes
* update test files
* Fix failing tests.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/PHPUnit/Integration/AccessTest.php | 69 | ||||
-rw-r--r-- | tests/UI/expected-screenshots/UIIntegrationTest_admin_manage_users.png | 3 | ||||
-rw-r--r-- | tests/UI/specs/UIIntegration_spec.js | 16 |
3 files changed, 69 insertions, 19 deletions
diff --git a/tests/PHPUnit/Integration/AccessTest.php b/tests/PHPUnit/Integration/AccessTest.php index 755d075b0e..dcb1aca0cf 100644 --- a/tests/PHPUnit/Integration/AccessTest.php +++ b/tests/PHPUnit/Integration/AccessTest.php @@ -13,6 +13,8 @@ use Piwik\Access; use Piwik\AuthResult; use Piwik\Db; use Piwik\NoAccessException; +use Piwik\Plugins\UsersManager\API as UsersManagerAPI; +use Piwik\Tests\Framework\Fixture; use Piwik\Tests\Framework\TestCase\IntegrationTestCase; /** @@ -524,6 +526,73 @@ class AccessTest extends IntegrationTestCase }); } + public function test_getAccessForSite_whenUserHasAdminAccess() + { + $idSite = Fixture::createWebsite('2010-01-02 00:00:00'); + UsersManagerAPI::getInstance()->addUser('testuser', 'testpass', 'testuser@email.com'); + UsersManagerAPI::getInstance()->setUserAccess('testuser', 'admin', $idSite); + + $this->switchUser('testuser'); + + Access::getInstance()->setSuperUserAccess(false); + $this->assertEquals('admin', Access::getInstance()->getRoleForSite($idSite)); + } + + public function test_getAccessForSite_whenUserHasViewAccess() + { + $idSite = Fixture::createWebsite('2010-01-03 00:00:00'); + UsersManagerAPI::getInstance()->addUser('testuser', 'testpass', 'testuser@email.com'); + UsersManagerAPI::getInstance()->setUserAccess('testuser', 'view', $idSite); + + $this->switchUser('testuser'); + + Access::getInstance()->setSuperUserAccess(false); + $this->assertEquals('view', Access::getInstance()->getRoleForSite($idSite)); + } + + public function test_getAccessForSite_whenUserHasWriteAccess() + { + $idSite = Fixture::createWebsite('2010-01-03 00:00:00'); + UsersManagerAPI::getInstance()->addUser('testuser', 'testpass', 'testuser@email.com'); + UsersManagerAPI::getInstance()->setUserAccess('testuser', 'write', $idSite); + + $this->switchUser('testuser'); + + Access::getInstance()->setSuperUserAccess(false); + $this->assertEquals('write', Access::getInstance()->getRoleForSite($idSite)); + } + + public function test_getAccessForSite_whenUserHasNoAccess() + { + $idSite = Fixture::createWebsite('2010-01-03 00:00:00'); + UsersManagerAPI::getInstance()->addUser('testuser', 'testpass', 'testuser@email.com'); + + $this->switchUser('testuser'); + + Access::getInstance()->setSuperUserAccess(false); + $this->assertEquals('noaccess', Access::getInstance()->getRoleForSite($idSite)); + } + + public function test_getAccessForSite_whenUserIsSuperUser() + { + $idSite = Fixture::createWebsite('2010-01-03 00:00:00'); + + Access::getInstance()->setSuperUserAccess(true); + $this->assertEquals('admin', Access::getInstance()->getRoleForSite($idSite)); + } + + private function switchUser($user) + { + $mock = $this->createPiwikAuthMockInstance(); + $mock->expects($this->once()) + ->method('authenticate') + ->will($this->returnValue(new AuthResult(AuthResult::SUCCESS, $user, 'token'))); + + Access::getInstance()->setSuperUserAccess(false); + Access::getInstance()->reloadAccess($mock); + Access::getInstance()->setSuperUserAccess(true); + } + private function buildAdminAccessForSiteIds($siteIds) { $access = array(); diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_manage_users.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_manage_users.png deleted file mode 100644 index f45de1af9d..0000000000 --- a/tests/UI/expected-screenshots/UIIntegrationTest_admin_manage_users.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:91f49fa3a1c6f7ae3dba489f76bdf76b7b84c650de3a5d6050707af5bc2dab46 -size 108793 diff --git a/tests/UI/specs/UIIntegration_spec.js b/tests/UI/specs/UIIntegration_spec.js index 2100dfad4a..1a2101554a 100644 --- a/tests/UI/specs/UIIntegration_spec.js +++ b/tests/UI/specs/UIIntegration_spec.js @@ -482,22 +482,6 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik? }, done); }); - it('should load the Manage > Users admin page correctly', function (done) { - expect.screenshot('admin_manage_users').to.be.captureSelector('.pageWrap', function (page) { - page.load("?" + generalParams + "&module=UsersManager&action=index"); - - // remove token auth which can be random - page.evaluate(function () { - $('td#token_auth').each(function () { - $(this).text(''); - }); - $('td#last_seen').each(function () { - $(this).text( '' ) - }); - }); - }, done); - }); - it('should load the user settings admin page correctly', function (done) { expect.screenshot('admin_user_settings').to.be.captureSelector('.pageWrap', function (page) { page.load("?" + generalParams + "&module=UsersManager&action=userSettings"); |