diff options
Diffstat (limited to 'plugins/ScheduledReports/tests/Integration/ScheduledReportsTest.php')
-rw-r--r-- | plugins/ScheduledReports/tests/Integration/ScheduledReportsTest.php | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/plugins/ScheduledReports/tests/Integration/ScheduledReportsTest.php b/plugins/ScheduledReports/tests/Integration/ScheduledReportsTest.php new file mode 100644 index 0000000000..241e063aa0 --- /dev/null +++ b/plugins/ScheduledReports/tests/Integration/ScheduledReportsTest.php @@ -0,0 +1,163 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +namespace Piwik\Plugins\ScheduledReports\tests; +use Piwik\Access; +use Piwik\Db; +use Piwik\Piwik; +use Piwik\Plugins\ScheduledReports\API; +use Piwik\Plugins\ScheduledReports\ScheduledReports; +use Piwik\Tests\Fixture; + +/** + * @group ScheduledReports + * @group ScheduledReportsTest + * @group Plugins + */ +class ScheduledReportsTest extends \IntegrationTestCase +{ + /** + * @var ScheduledReports + */ + private $reports; + private $reportIds = array(); + + public function setUp() + { + parent::setUp(); + + $this->reports = new ScheduledReports(); + $this->setIdentity('userlogin'); + + for ($i = 1; $i <= 4; $i++) { + Fixture::createWebsite('2014-01-01 00:00:00'); + $this->addReport('userlogin', $i); + } + + $this->addReport('otherUser', 1); + $this->addReport('anotherUser', 2); + } + + public function test_deleteUserReportForSites_shouldNotRemoveAnythingIfNoSitesOrNoLogin() + { + $this->reports->deleteUserReportForSites('userLogin', array()); + + $this->assertHasReport('userlogin', 1); + $this->assertHasReport('userlogin', 2); + $this->assertHasReport('userlogin', 3); + $this->assertHasReport('userlogin', 4); + $this->assertHasReport('otherUser', 1); + $this->assertHasReport('anotherUser', 2); + + $this->reports->deleteUserReportForSites('', array(1, 2, 3, 4)); + + $this->assertHasReport('userlogin', 1); + $this->assertHasReport('userlogin', 2); + $this->assertHasReport('userlogin', 3); + $this->assertHasReport('userlogin', 4); + $this->assertHasReport('otherUser', 1); + $this->assertHasReport('anotherUser', 2); + } + + public function test_deleteUserReportForSites_shouldNotFailIfUserHasNoReports() + { + $this->reports->deleteUserReportForSites('unk', array()); + + $this->assertHasReport('userlogin', 1); + $this->assertHasReport('userlogin', 2); + $this->assertHasReport('userlogin', 3); + $this->assertHasReport('userlogin', 4); + $this->assertHasReport('otherUser', 1); + $this->assertHasReport('anotherUser', 2); + } + + public function test_deleteUserReportForSites_shouldRemoveOnlyReportsForGivenSitesAndLogin() + { + $this->reports->deleteUserReportForSites('userLogin', array(1, 2)); + + $this->assertHasNotReport('userlogin', 1); + $this->assertHasNotReport('userlogin', 2); + + $this->assertHasReport('userlogin', 3); + $this->assertHasReport('userlogin', 4); + $this->assertHasReport('otherUser', 1); + $this->assertHasReport('anotherUser', 2); + } + + public function test_ScheduledReports_shouldRemoveOnlyReportsForGivenSitesAndLogin_IfEventIsTriggered() + { + Piwik::postEvent('UsersManager.removeSiteAccess', array('userLogin', array(1, 2))); + + $this->assertHasNotReport('userlogin', 1); + $this->assertHasNotReport('userlogin', 2); + + $this->assertHasReport('userlogin', 3); + $this->assertHasReport('userlogin', 4); + $this->assertHasReport('otherUser', 1); + $this->assertHasReport('anotherUser', 2); + } + + public function test_deleteUserReport_shouldRemoveAllReportsOfASpecificUser() + { + $this->reports->deleteUserReport('userLogin'); + + $this->assertHasNotReport('userlogin', 1); + $this->assertHasNotReport('userlogin', 2); + $this->assertHasNotReport('userlogin', 3); + $this->assertHasNotReport('userlogin', 4); + + $this->assertHasReport('otherUser', 1); + $this->assertHasReport('anotherUser', 2); + } + + private function assertHasReport($login, $idSite) + { + $report = $this->getReport($login, $idSite); + + $this->assertNotEmpty($report, "Report for $login, $idSite should exist but does not"); + } + + private function assertHasNotReport($login, $idSite) + { + try { + $this->getReport($login, $idSite); + $this->fail("Report for $login, $idSite should not exist but does"); + } catch (\Exception $e) { + $this->assertContains("Requested report couldn't be found", $e->getMessage()); + } + } + + private function getReport($login, $idSite) + { + $this->setIdentity($login); + + return API::getInstance()->getReports($idSite, 'day', $this->reportIds[$login . '_' . $idSite]); + } + + private function addReport($login, $idSite) + { + $this->setIdentity($login); + + $reportType = 'email'; + $reportFormat = 'pdf'; + $reports = array(); + $parameters = array(ScheduledReports::DISPLAY_FORMAT_PARAMETER => ScheduledReports::DISPLAY_FORMAT_TABLES_ONLY); + + $reportId = API::getInstance()->addReport($idSite, 'description', 'day', 3, $reportType, $reportFormat, $reports, $parameters); + $this->reportIds[$login . '_' . $idSite] = $reportId; + } + + private function setIdentity($login) + { + $pseudoMockAccess = new \FakeAccess(); + $pseudoMockAccess::$identity = $login; + $pseudoMockAccess::$superUser = true; + Access::setSingletonInstance($pseudoMockAccess); + } + +} |