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(); } } } AnnotationsTest::$fixture = new TwoSitesWithAnnotations();