diff options
author | Thomas Steur <thomas.steur@googlemail.com> | 2014-10-05 15:05:47 +0400 |
---|---|---|
committer | Thomas Steur <thomas.steur@googlemail.com> | 2014-10-05 15:05:47 +0400 |
commit | 5a1eab97f54b44f57356b4276b9c9df2a8eef51b (patch) | |
tree | 83864ece2806ccf6e6bb49abf3fd65de92c13ad8 /tests/PHPUnit/System/AnnotationsTest.php | |
parent | 19bcd2d262343eae9d553378e4c66ce7e033b4d8 (diff) |
refs #5940 put tests in correct folders, better testsuite names, some tests still fail and I cannot figure out why
Diffstat (limited to 'tests/PHPUnit/System/AnnotationsTest.php')
-rwxr-xr-x | tests/PHPUnit/System/AnnotationsTest.php | 287 |
1 files changed, 287 insertions, 0 deletions
diff --git a/tests/PHPUnit/System/AnnotationsTest.php b/tests/PHPUnit/System/AnnotationsTest.php new file mode 100755 index 0000000000..9acf8c7e27 --- /dev/null +++ b/tests/PHPUnit/System/AnnotationsTest.php @@ -0,0 +1,287 @@ +<?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\Tests\System; + +use Piwik\Access; +use Piwik\API\Request; +use Piwik\Plugins\Annotations\API; +use Piwik\Tests\SystemTestCase; +use Piwik\Tests\Fixtures\TwoSitesWithAnnotations; +use FakeAccess; +use Exception; + +/** + * @group Plugins + * @group AnnotationsTest + */ +class AnnotationsTest extends SystemTestCase +{ + public static $fixture = null; + + public static function getOutputPrefix() + { + return 'annotations'; + } + + public function getApiForTesting() + { + $idSite1 = self::$fixture->idSite1; + + return array( + + // get + array('Annotations.get', array('idSite' => $idSite1, + 'date' => '2012-01-01', + 'periods' => 'day', + 'otherRequestParameters' => array('idNote' => 1))), + + // getAll + array('Annotations.getAll', array('idSite' => $idSite1, + 'date' => '2011-12-01', + 'periods' => array('day', 'week', 'month'))), + array('Annotations.getAll', array('idSite' => $idSite1, + 'date' => '2012-01-01', + 'periods' => array('year'))), + array('Annotations.getAll', array('idSite' => $idSite1, + 'date' => '2012-03-01', + 'periods' => array('week'), + 'otherRequestParameters' => array('lastN' => 6), + 'testSuffix' => '_lastN')), + array('Annotations.getAll', array('idSite' => $idSite1, + 'date' => '2012-01-15,2012-02-15', + 'periods' => array('range'), + 'otherRequestParameters' => array('lastN' => 6), + 'testSuffix' => '_range')), + array('Annotations.getAll', array('idSite' => 'all', + 'date' => '2012-01-01', + 'periods' => array('month'), + 'testSuffix' => '_multipleSites')), + + // getAnnotationCountForDates + array('Annotations.getAnnotationCountForDates', array('idSite' => $idSite1, + 'date' => '2011-12-01', + 'periods' => array('day', 'week', 'month'))), + array('Annotations.getAnnotationCountForDates', array('idSite' => $idSite1, + 'date' => '2012-01-01', + 'periods' => array('year'))), + array('Annotations.getAnnotationCountForDates', array('idSite' => $idSite1, + 'date' => '2012-03-01', + 'periods' => array('week'), + 'otherRequestParameters' => array('lastN' => 6), + 'testSuffix' => '_lastN')), + array('Annotations.getAnnotationCountForDates', array('idSite' => $idSite1, + 'date' => '2012-01-15,2012-02-15', + 'periods' => array('range'), + 'otherRequestParameters' => array('lastN' => 6), + 'testSuffix' => '_range')), + array('Annotations.getAnnotationCountForDates', array('idSite' => 'all', + 'date' => '2012-01-01', + 'periods' => array('month'), + 'testSuffix' => '_multipleSites')), + ); + } + + /** + * @dataProvider getApiForTesting + */ + public function testApi($api, $params) + { + $this->runApiTests($api, $params); + } + + public function testAddMultipleSitesFail() + { + try { + API::getInstance()->add("1,2,3", "2012-01-01", "whatever"); + $this->fail("add should fail when given multiple sites in idSite"); + } catch (Exception $ex) { + // pass + } + } + + public function testAddInvalidDateFail() + { + try { + API::getInstance()->add(self::$fixture->idSite1, "invaliddate", "whatever"); + $this->fail("add should fail when given invalid date"); + } catch (Exception $ex) { + // pass + } + } + + public function testSaveMultipleSitesFail() + { + try { + API::getInstance()->save("1,2,3", 0); + $this->fail("save should fail when given multiple sites"); + } catch (Exception $ex) { + // pass + } + } + + public function testSaveInvalidDateFail() + { + try { + API::getInstance()->save(self::$fixture->idSite1, 0, "invaliddate"); + $this->fail("save should fail when given an invalid date"); + } catch (Exception $ex) { + // pass + } + } + + public function testSaveInvalidNoteIdFail() + { + try { + API::getInstance()->save(self::$fixture->idSite1, -1); + $this->fail("save should fail when given an invalid note id"); + } catch (Exception $ex) { + // pass + } + } + + public function testDeleteMultipleSitesFail() + { + try { + API::getInstance()->delete("1,2,3", 0); + $this->fail("delete should fail when given multiple site IDs"); + } catch (Exception $ex) { + // pass + } + } + + public function testDeleteInvalidNoteIdFail() + { + try { + API::getInstance()->delete(self::$fixture->idSite1, -1); + $this->fail("delete should fail when given an invalid site ID"); + } catch (Exception $ex) { + // pass + } + } + + public function testGetMultipleSitesFail() + { + try { + API::getInstance()->get("1,2,3", 0); + $this->fail("get should fail when given multiple site IDs"); + } catch (Exception $ex) { + // pass + } + } + + public function testGetInvalidNoteIdFail() + { + try { + API::getInstance()->get(self::$fixture->idSite1, -1); + $this->fail("get should fail when given an invalid note ID"); + } catch (Exception $ex) { + // pass + } + } + + public function testSaveSuccess() + { + API::getInstance()->save( + self::$fixture->idSite1, 0, $date = '2011-04-01', $note = 'new note text', $starred = 1); + + $expectedAnnotation = array( + 'date' => '2011-04-01', + 'note' => 'new note text', + 'starred' => 1, + 'user' => 'superUserLogin', + 'idNote' => 0, + 'canEditOrDelete' => true + ); + $this->assertEquals($expectedAnnotation, API::getInstance()->get(self::$fixture->idSite1, 0)); + } + + public function testSaveNoChangesSuccess() + { + API::getInstance()->save(self::$fixture->idSite1, 1); + + $expectedAnnotation = array( + 'date' => '2011-12-02', + 'note' => '1: Site 1 annotation for 2011-12-02', + 'starred' => 0, + 'user' => 'superUserLogin', + 'idNote' => 1, + 'canEditOrDelete' => true + ); + $this->assertEquals($expectedAnnotation, API::getInstance()->get(self::$fixture->idSite1, 1)); + } + + public function testDeleteSuccess() + { + API::getInstance()->delete(self::$fixture->idSite1, 1); + + try { + API::getInstance()->get(self::$fixture->idSite1, 1); + $this->fail("failed to delete annotation"); + } catch (Exception $ex) { + // pass + } + } + + public function getPermissionsFailData() + { + return array( + // getAll + array(false, false, "module=API&method=Annotations.getAll&idSite=1&date=2012-01-01&period=year", true, "getAll should throw if user does not have view access"), + + // get + array(false, false, "module=API&method=Annotations.get&idSite=1&idNote=0", true, "get should throw if user does not have view access"), + + // getAnnotationCountForDates + array(false, false, "module=API&method=Annotations.getAnnotationCountForDates&idSite=1&date=2012-01-01&period=year", true, "getAnnotationCountForDates should throw if user does not have view access"), + + // add + array(false, false, "module=API&method=Annotations.add&idSite=1&date=2011-02-01¬e=whatever", true, "add should throw if user does not have view access"), + array(false, true, "module=API&method=Annotations.add&idSite=1&date=2011-02-01¬e=whatever2", false, "add should not throw if user has view access"), + array(true, true, "module=API&method=Annotations.add&idSite=1&date=2011-02-01¬e=whatever3", false, "add should not throw if user has admin access"), + + // save + array(false, false, "module=API&method=Annotations.save&idSite=1&idNote=0&date=2011-03-01¬e=newnote", true, "save should throw if user does not have view access"), + array(false, true, "module=API&method=Annotations.save&idSite=1&idNote=0&date=2011-03-01¬e=newnote", true, "save should throw if user has view access but did not edit note"), + array(true, true, "module=API&method=Annotations.save&idSite=1&idNote=0&date=2011-03-01¬e=newnote", false, "save should not throw if user has admin access"), + + // delete + array(false, false, "module=API&method=Annotations.delete&idSite=1&idNote=0", true, "delete should throw if user does not have view access"), + array(false, true, "module=API&method=Annotations.delete&idSite=1&idNote=0", true, "delete should throw if user does not have view access"), + array(true, true, "module=API&method=Annotations.delete&idSite=1&idNote=0", false, "delete should not throw if user has admin access"), + ); + } + + /** + * @dataProvider getPermissionsFailData + */ + public function testMethodPermissions($hasAdminAccess, $hasViewAccess, $request, $checkException, $failMessage) + { + // create fake access that denies user access + $access = new FakeAccess(); + FakeAccess::$superUser = false; + FakeAccess::$idSitesAdmin = $hasAdminAccess ? array(self::$fixture->idSite1) : array(); + FakeAccess::$idSitesView = $hasViewAccess ? array(self::$fixture->idSite1) : array(); + Access::setSingletonInstance($access); + + if ($checkException) { + try { + $request = new Request($request); + $request->process(); + $this->fail($failMessage); + } catch (Exception $ex) { + // pass + } + } else { + $request = new Request($request); + $request->process(); + + } + } +} + +AnnotationsTest::$fixture = new TwoSitesWithAnnotations();
\ No newline at end of file |