userPreferences = new UserPreferences(); $this->setSuperUser(); $identity = FakeAccess::$identity; FakeAccess::$identity = 'foo'; // avoids error user already exists when it doesn't APIUsersManager::getInstance()->addUser($identity, '22111214k4,mdwsetUserPreference( 'foo', APIUsersManager::PREFERENCE_DEFAULT_REPORT, '1' ); } /** * @expectedException \Exception * @expectedExceptionMessage Not supported preference name */ public function test_getDefaultReport_WhenWrongPreference() { APIUsersManager::getInstance()->setUserPreference( Piwik::getCurrentUserLogin(), 'foo', '1' ); } public function test_getDefaultReport_ShouldReturnFalseByDefault() { $this->assertEquals(false, $this->userPreferences->getDefaultReport()); } public function test_getDefaultReport_ShouldReturnTheRawValueIfNotNumeric() { $this->setDefaultReport('MultiSites'); $this->assertEquals('MultiSites', $this->userPreferences->getDefaultReport()); } public function test_getDefaultReport_ShouldNotReturnSiteIdIfNoPermissionForSite() { $this->createSite(); $this->setDefaultReport(1); $this->setAnonymous(); $this->assertEquals(false, $this->userPreferences->getDefaultReport()); } public function test_getDefaultReport_ShouldReturnSiteIdIfPermissionForSite() { $this->createSite(); $this->setDefaultReport(1); $this->assertEquals(1, $this->userPreferences->getDefaultReport()); } public function test_getDefaultWebsiteId_ShouldReturnFalseByDefault() { $this->assertEquals(false, $this->userPreferences->getDefaultWebsiteId()); } public function test_getDefaultWebsiteId_ShouldReturnASiteIfOneExistsAndHasAccess() { $this->createSite(); $this->assertEquals(1, $this->userPreferences->getDefaultWebsiteId()); } public function test_getDefaultWebsiteId_ShouldReturnFalseIfASiteExistsButHasNoAccess() { $this->createSite(); $this->setAnonymous(); $this->assertEquals(false, $this->userPreferences->getDefaultWebsiteId()); } public function test_getDefaultWebsiteId_ShouldReturnASiteEvenIfMultiSitesIsDefaultReport() { $this->setDefaultReport('MultiSites'); $this->createSite(); $this->assertEquals(1, $this->userPreferences->getDefaultWebsiteId()); } /** * @dataProvider provideDefaultDates */ public function test_getDefaultDateAndPeriod($defaultDate, $expectedDate, $expectedPeriod) { $this->setDefaultDate($defaultDate); $this->assertEquals($expectedDate, $this->userPreferences->getDefaultDate()); $this->assertEquals($expectedPeriod, $this->userPreferences->getDefaultPeriod()); } public function provideDefaultDates() { return array( 'today' => array('today', 'today', 'day'), 'yesterday' => array('yesterday', 'yesterday', 'day'), 'month' => array('month', 'today', 'month'), 'week' => array('week', 'today', 'week'), 'last7' => array('last7', 'last7', 'range'), 'last30' => array('last30', 'last30', 'range'), ); } public function test_getDefaultPeriod_ShouldOnlyReturnAllowedPeriods() { // Only allow for week period Config::getInstance()->General['enabled_periods_UI'] = 'week'; Config::getInstance()->General['default_period'] = 'week'; Config::getInstance()->General['default_day'] = 'yesterday'; $this->setDefaultDate('today'); // Should be system defaults $this->assertEquals('week', $this->userPreferences->getDefaultPeriod()); $this->assertEquals('yesterday', $this->userPreferences->getDefaultDate()); } public function test_getDefaultDate_ShouldOnlyReturnDateInAllowedPeriods() { // Only allow for week period Config::getInstance()->General['enabled_periods_UI'] = 'day'; Config::getInstance()->General['default_period'] = 'day'; $this->setDefaultDate('last7'); $this->assertEquals('yesterday', $this->userPreferences->getDefaultDate()); } private function setSuperUser() { FakeAccess::$superUser = true; } private function setAnonymous() { FakeAccess::clearAccess(); } private function createSite() { Fixture::createWebsite('2013-01-23 01:23:45'); } private function setDefaultReport($defaultReport) { APIUsersManager::getInstance()->setUserPreference( Piwik::getCurrentUserLogin(), APIUsersManager::PREFERENCE_DEFAULT_REPORT, $defaultReport ); } private function setDefaultDate($date) { APIUsersManager::getInstance()->setUserPreference( Piwik::getCurrentUserLogin(), APIUsersManager::PREFERENCE_DEFAULT_REPORT_DATE, $date ); } public function provideContainerConfig() { return array( 'Piwik\Access' => new FakeAccess() ); } }