Newer
Older
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
use Piwik\Access;
use Piwik\AuthResult;
Thomas Steur
a validé
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
Thomas Steur
a validé
/**
* Class Core_AccessTest
*
* @group Core
*/
Thomas Steur
a validé
class Core_AccessTest extends IntegrationTestCase
{
public function setUp()
{
parent::setUp();
}
public function testGetListAccess()
{
$accessList = Access::getListAccess();
$shouldBe = array('noaccess', 'view', 'admin', 'superuser');
$this->assertEquals($shouldBe, $accessList);
}
public function testGetTokenAuthWithEmptyAccess()
{
$this->assertNull($access->getTokenAuth());
}
public function testGetLoginWithEmptyAccess()
{
$this->assertNull($access->getLogin());
}
Thomas Steur
a validé
public function testHasSuperUserAccessWithEmptyAccess()
{
$this->assertFalse($access->hasSuperUserAccess());
}
Thomas Steur
a validé
public function testHasSuperUserAccessWithSuperUserAccess()
{
$access = Access::getInstance();
Thomas Steur
a validé
$access->setSuperUserAccess(true);
$this->assertTrue($access->hasSuperUserAccess());
}
public function test_GetLogin_UserIsNotAnonymous_WhenSuperUserAccess()
{
$access = Access::getInstance();
$access->setSuperUserAccess(true);
$this->assertNotEmpty($access->getLogin());
$this->assertNotSame('anonymous', $access->getLogin());
}
public function test_GetLogin_UserIsAnonymous_WhenNoSuperUserAccess()
{
$access = Access::getInstance();
$access->setSuperUserAccess(false);
$this->assertNull($access->getLogin());
}
Thomas Steur
a validé
public function testHasSuperUserAccessWithNoSuperUserAccess()
{
$access = Access::getInstance();
Thomas Steur
a validé
$access->setSuperUserAccess(false);
$this->assertFalse($access->hasSuperUserAccess());
}
public function testGetSitesIdWithAtLeastViewAccessWithEmptyAccess()
{
$this->assertEmpty($access->getSitesIdWithAtLeastViewAccess());
}
public function testGetSitesIdWithAdminAccessWithEmptyAccess()
{
$this->assertEmpty($access->getSitesIdWithAdminAccess());
}
public function testGetSitesIdWithViewAccessWithEmptyAccess()
{
$this->assertEmpty($access->getSitesIdWithViewAccess());
}
/**
* @expectedException Piwik\NoAccessException
*/
Thomas Steur
a validé
public function testCheckUserHasSuperUserAccessWithEmptyAccess()
{
$access = new Access();
$access->checkUserHasSuperUserAccess();
}
Thomas Steur
a validé
public function testCheckUserHasSuperUserAccessWithSuperUserAccess()
{
$access = Access::getInstance();
Thomas Steur
a validé
$access->setSuperUserAccess(true);
$access->checkUserHasSuperUserAccess();
}
/**
* @expectedException Piwik\NoAccessException
*/
public function testCheckUserHasSomeAdminAccessWithEmptyAccess()
{
$access = new Access();
$access->checkUserHasSomeAdminAccess();
}
public function testCheckUserHasSomeAdminAccessWithSuperUserAccess()
{
$access = Access::getInstance();
Thomas Steur
a validé
$access->setSuperUserAccess(true);
$access->checkUserHasSomeAdminAccess();
}
public function testCheckUserHasSomeAdminAccessWithSomeAccess()
{
$mock = $this->getMock(
array('getSitesIdWithAdminAccess')
$mock->expects($this->once())
->method('getSitesIdWithAdminAccess')
->will($this->returnValue(array(2, 9)));
$mock->checkUserHasSomeAdminAccess();
}
/**
* @expectedException Piwik\NoAccessException
*/
public function testCheckUserHasSomeViewAccessWithEmptyAccess()
{
$access = new Access();
$access->checkUserHasSomeViewAccess();
}
public function testCheckUserHasSomeViewAccessWithSuperUserAccess()
{
$access = Access::getInstance();
Thomas Steur
a validé
$access->setSuperUserAccess(true);
$access->checkUserHasSomeViewAccess();
}
public function testCheckUserHasSomeViewAccessWithSomeAccess()
{
$mock = $this->getMock(
array('getSitesIdWithAtLeastViewAccess')
$mock->expects($this->once())
->method('getSitesIdWithAtLeastViewAccess')
->will($this->returnValue(array(1, 2, 3, 4)));
$mock->checkUserHasSomeViewAccess();
}
/**
* @expectedException Piwik\NoAccessException
*/
public function testCheckUserHasViewAccessWithEmptyAccessNoSiteIdsGiven()
{
$access = new Access();
$access->checkUserHasViewAccess(array());
}
public function testCheckUserHasViewAccessWithSuperUserAccess()
{
$access = Access::getInstance();
Thomas Steur
a validé
$access->setSuperUserAccess(true);
$access->checkUserHasViewAccess(array());
}
public function testCheckUserHasViewAccessWithSomeAccessSuccessIdSitesAsString()
{
$mock = $this->getMock(
array('getSitesIdWithAtLeastViewAccess')
$mock->expects($this->once())
->method('getSitesIdWithAtLeastViewAccess')
->will($this->returnValue(array(1, 2, 3, 4)));
$mock->checkUserHasViewAccess('1,3');
}
public function testCheckUserHasViewAccessWithSomeAccessSuccessAllSites()
{
$mock = $this->getMock(
array('getSitesIdWithAtLeastViewAccess')
$mock->expects($this->any())
->method('getSitesIdWithAtLeastViewAccess')
->will($this->returnValue(array(1, 2, 3, 4)));
$mock->checkUserHasViewAccess('all');
}
/**
* @expectedException Piwik\NoAccessException
*/
public function testCheckUserHasViewAccessWithSomeAccessFailure()
{
$mock = $this->getMock(
array('getSitesIdWithAtLeastViewAccess')
$mock->expects($this->once())
->method('getSitesIdWithAtLeastViewAccess')
->will($this->returnValue(array(1, 2, 3, 4)));
$mock->checkUserHasViewAccess(array(1, 5));
}
public function testCheckUserHasAdminAccessWithSuperUserAccess()
{
$access = Access::getInstance();
Thomas Steur
a validé
$access->setSuperUserAccess(true);
$access->checkUserHasAdminAccess(array());
}
/**
* @expectedException Piwik\NoAccessException
*/
public function testCheckUserHasAdminAccessWithEmptyAccessNoSiteIdsGiven()
{
$access = new Access();
$access->checkUserHasViewAccess(array());
}
public function testCheckUserHasAdminAccessWithSomeAccessSuccessIdSitesAsString()
{
$mock = $this->getMock(
array('getSitesIdWithAdminAccess')
$mock->expects($this->once())
->method('getSitesIdWithAdminAccess')
->will($this->returnValue(array(1, 2, 3, 4)));
$mock->checkUserHasAdminAccess('1,3');
}
public function testCheckUserHasAdminAccessWithSomeAccessSuccessAllSites()
{
$mock = $this->getMock(
array('getSitesIdWithAdminAccess', 'getSitesIdWithAtLeastViewAccess')
$mock->expects($this->any())
->method('getSitesIdWithAdminAccess')
->will($this->returnValue(array(1, 2, 3, 4)));
$mock->expects($this->any())
->method('getSitesIdWithAtLeastViewAccess')
->will($this->returnValue(array(1, 2, 3, 4)));
$mock->checkUserHasAdminAccess('all');
}
/**
* @expectedException Piwik\NoAccessException
*/
public function testCheckUserHasAdminAccessWithSomeAccessFailure()
{
$mock = $this->getMock(
array('getSitesIdWithAdminAccess')
$mock->expects($this->once())
->method('getSitesIdWithAdminAccess')
->will($this->returnValue(array(1, 2, 3, 4)));
$mock->checkUserHasAdminAccess(array(1, 5));
}
public function testReloadAccessWithEmptyAuth()
{
$access = new Access();
$this->assertFalse($access->reloadAccess(null));
}
public function testReloadAccessWithEmptyAuthSuperUser()
{
$access = Access::getInstance();
Thomas Steur
a validé
$access->setSuperUserAccess(true);
$this->assertTrue($access->reloadAccess(null));
}
public function testReloadAccessWithMockedAuthValid()
{
$mock = $this->getMock('\\Piwik\\Auth', array('authenticate', 'getName', 'getTokenAuthSecret', 'getLogin', 'setTokenAuth', 'setLogin',
$mock->expects($this->once())
->method('authenticate')
->will($this->returnValue(new AuthResult(AuthResult::SUCCESS, 'login', 'token')));
mattab
a validé
$mock->expects($this->any())->method('getName')->will($this->returnValue("test name"));
$access = Access::getInstance();
$this->assertTrue($access->reloadAccess($mock));
$this->assertFalse($access->hasSuperUserAccess());
}
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
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());
});
}