diff options
author | Stefan Giehl <stefan@piwik.org> | 2018-05-20 22:14:10 +0300 |
---|---|---|
committer | diosmosis <diosmosis@users.noreply.github.com> | 2018-05-20 22:14:10 +0300 |
commit | 509ac2f1085e74c6a44253248f9f2fc3ac54d337 (patch) | |
tree | 785e3898de3c0be2ebddb7a6682f1de31c7c4318 /plugins/Annotations/tests/System/AnnotationsTest.php | |
parent | 682cc40c9106e20b97d86a663d0f2c2714e32303 (diff) |
Improve and split tests (#12822)
* Speed up some tests by not using IntegrationTestCase
* fix test
* split system tests into plugin & core
* adjust travis submodule
* Move Annotations system test to plugin
* Move Transitions system test to plugin
* fix tests
* move PurgeDataTest to PrivacyManager plugin
* Move some tests to Goal plugin
* fix test
* submodule update
* Move tests to ecommerce plugin
* adds a caching to prevent some duplicate api calls
Diffstat (limited to 'plugins/Annotations/tests/System/AnnotationsTest.php')
-rw-r--r-- | plugins/Annotations/tests/System/AnnotationsTest.php | 289 |
1 files changed, 289 insertions, 0 deletions
diff --git a/plugins/Annotations/tests/System/AnnotationsTest.php b/plugins/Annotations/tests/System/AnnotationsTest.php new file mode 100644 index 0000000000..d385d33426 --- /dev/null +++ b/plugins/Annotations/tests/System/AnnotationsTest.php @@ -0,0 +1,289 @@ +<?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\Annotations\tests\System; + +use Piwik\API\Request; +use Piwik\Plugins\Annotations\API; +use Piwik\Tests\Framework\Mock\FakeAccess; +use Piwik\Tests\Framework\TestCase\SystemTestCase; +use Piwik\Tests\Fixtures\TwoSitesWithAnnotations; +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 + FakeAccess::$superUser = false; + FakeAccess::$idSitesAdmin = $hasAdminAccess ? array(self::$fixture->idSite1) : array(); + FakeAccess::$idSitesView = $hasViewAccess ? array(self::$fixture->idSite1) : array(); + + if ($checkException) { + try { + $request = new Request($request); + $request->process(); + $this->fail($failMessage); + } catch (Exception $ex) { + // pass + } + } else { + $request = new Request($request); + $request->process(); + + } + } + + public static function getPathToTestDirectory() + { + return dirname(__FILE__); + } +} + +AnnotationsTest::$fixture = new TwoSitesWithAnnotations();
\ No newline at end of file |