Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authordiosmosis <diosmosis@users.noreply.github.com>2018-08-07 01:20:32 +0300
committerGitHub <noreply@github.com>2018-08-07 01:20:32 +0300
commit2e006803ee17a8d1a992085c6425eddaa84a25f5 (patch)
tree6798441780992ff6e1b3010aa98519c2c2af1f5b /tests
parentbb1b1b4b068fc40da896e7eedbad3b2914dc2468 (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.php69
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_admin_manage_users.png3
-rw-r--r--tests/UI/specs/UIIntegration_spec.js16
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");