From ec345f7a1343769abdf3f5920a0732b24726b733 Mon Sep 17 00:00:00 2001 From: Mark Pemberton Date: Fri, 13 May 2011 14:26:51 -0400 Subject: new privatekey2 branch with privatekey changes --- tests/BookmarkTest.php | 46 +++++++ tests/TestBase.php | 13 +- tests/UserTest.php | 333 ++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 386 insertions(+), 6 deletions(-) (limited to 'tests') diff --git a/tests/BookmarkTest.php b/tests/BookmarkTest.php index b50dab2..44a82d9 100644 --- a/tests/BookmarkTest.php +++ b/tests/BookmarkTest.php @@ -1330,5 +1330,51 @@ class BookmarkTest extends TestBase + /** + * Test private bookmarks + * + * @return void + */ + public function testPrivateBookmarks() + { + $uid = $this->addUser(); + /* create private bookmark */ + $this->bs->addBookmark( + 'http://test', 'test', 'desc', 'note', + 2,//private + array(), null, null, false, false, $uid + ); + /* create public bookmark */ + $this->bs->addBookmark( + 'http://example.org', 'title', 'desc', 'priv', + 0,//public + array(), null, null, false, false, $uid + ); + + $this->assertEquals(1, $this->bs->countBookmarks($uid, 'public')); + $this->assertEquals(1, $this->bs->countBookmarks($uid, 'private')); + $this->assertEquals(0, $this->bs->countBookmarks($uid, 'shared')); + $this->assertEquals(2, $this->bs->countBookmarks($uid, 'all')); + + $this->us->setCurrentUserId($uid); + $bookmarks = $this->bs->getBookmarks(); + // first record should be private bookmark + $b0 = $bookmarks['bookmarks'][0]; + $this->assertEquals('test', $b0['bTitle']); + // second record should be public bookmark + $b0 = $bookmarks['bookmarks'][1]; + $this->assertEquals('title', $b0['bTitle']); + + // test non authenticated query + $this->us->setCurrentUserId(null); + $bookmarks = $this->bs->getBookmarks(); + // should only result in one link - public + $b2 = $bookmarks['bookmarks'][0]; + $this->assertEquals('title', $b2['bTitle']); + // there should be no second record + $this->assertEquals(1,count($bookmarks['bookmarks'])); + + } + } ?> diff --git a/tests/TestBase.php b/tests/TestBase.php index 095f32d..1331ec6 100644 --- a/tests/TestBase.php +++ b/tests/TestBase.php @@ -78,14 +78,15 @@ class TestBase extends PHPUnit_Framework_TestCase * * @param string $username Username * @param string $password Password + * @param string $pkey Private Key * * @return integer ID of user * * @uses addUserData() */ - protected function addUser($username = null, $password = null) + protected function addUser($username = null, $password = null, $pkey = null) { - return reset($this->addUserData($username, $password)); + return reset($this->addUserData($username, $password, $pkey)); } @@ -95,10 +96,11 @@ class TestBase extends PHPUnit_Framework_TestCase * * @param string $username Username * @param string $password Password + * @param string $pkey Private Key * * @return array ID of user, Name of user, password of user */ - protected function addUserData($username = null, $password = null) + protected function addUserData($username = null, $password = null, $pkey = null) { $us = SemanticScuttle_Service_Factory::get('User'); $rand = rand(); @@ -113,7 +115,8 @@ class TestBase extends PHPUnit_Framework_TestCase $uid = $us->addUser( $username, $password, - 'unittest-' . $rand . '@example.org' + 'unittest-' . $rand . '@example.org', + $pkey ); return array($uid, $username, $password); } @@ -148,4 +151,4 @@ class TestBase extends PHPUnit_Framework_TestCase } } -?> \ No newline at end of file +?> diff --git a/tests/UserTest.php b/tests/UserTest.php index 2f57112..230167d 100644 --- a/tests/UserTest.php +++ b/tests/UserTest.php @@ -34,6 +34,157 @@ class UserTest extends TestBase + /** + * @covers SemanticScuttle_Service_User::addUser + */ + public function testAddUserPrivateKey() + { + $name = substr(md5(uniqid()), 0, 6); + $pkey = 'my-privatekey'; + $id = $this->us->addUser( + $name, uniqid(), 'foo@example.org', $pkey + ); + $this->assertNotEquals(false, $id); + $this->assertInternalType('integer', $id); + + $arUser = $this->us->getUserByPrivateKey($pkey); + $this->assertNotEquals(false, $arUser, 'user not found by private key'); + $this->assertEquals($id, $arUser['uId'], 'wrong user loaded'); + } + + + /** + * @covers SemanticScuttle_Service_User::updateUser + */ + public function testUpdateUserFalseWhenIdNotNumeric() + { + $this->assertFalse( + $this->us->updateUser('foo', null, null, null, null, null) + ); + } + + + /** + * @covers SemanticScuttle_Service_User::updateUser + */ + public function testUpdateUserPrivateKeyNewKeyEnabled() + { + $pkey = 'testUpdateUserPrivateKeyNewKey12'; + $uid = $this->addUser(); + + $this->assertTrue( + $this->us->updateUser( + $uid, 'password', 'name', 'test@example.org', '', '', + $pkey, true + ) + ); + $arUser = $this->us->getUser($uid); + $this->assertInternalType('array', $arUser); + $this->assertEquals($pkey, $arUser['privateKey']); + } + + + /** + * @covers SemanticScuttle_Service_User::updateUser + */ + public function testUpdateUserPrivateKeyNewKeyDisabled() + { + $pkey = 'testUpdateUserPrivateKeyNewKeyDi'; + $uid = $this->addUser(); + + $this->assertTrue( + $this->us->updateUser( + $uid, 'password', 'name', 'test@example.org', '', '', + $pkey, false + ) + ); + $arUser = $this->us->getUser($uid); + $this->assertInternalType('array', $arUser); + $this->assertEquals( + '-' . $pkey, $arUser['privateKey'], + 'private key did not get disabled' + ); + } + + + /** + * Passing an empty string / NULL as key but enabling it + * should automatically create a new key. + * + * @covers SemanticScuttle_Service_User::updateUser + */ + public function testUpdateUserPrivateKeyNoKeyEnabled() + { + $pkey = 'testUpdateUserPrivateKeyNoKeyEna'; + $uid = $this->addUser(); + + $this->assertTrue( + $this->us->updateUser( + $uid, 'password', 'name', 'test@example.org', '', '', + null, true + ) + ); + $arUser = $this->us->getUser($uid); + $this->assertInternalType('array', $arUser); + $this->assertNotEquals( + '', $arUser['privateKey'], 'private key was not created' + ); + } + + + /** + * Passing an empty string / NULL as key and disabling it + * should keep no key + * + * @covers SemanticScuttle_Service_User::updateUser + */ + public function testUpdateUserPrivateKeyNoKeyDisabled() + { + $pkey = 'testUpdateUserPrivateKeyNoKeyDis'; + $uid = $this->addUser(); + + $this->assertTrue( + $this->us->updateUser( + $uid, 'password', 'name', 'test@example.org', '', '', + null, false + ) + ); + $arUser = $this->us->getUser($uid); + $this->assertInternalType('array', $arUser); + $this->assertEquals( + '', $arUser['privateKey'], 'private key was set' + ); + } + + + /** + * Passing an empty string / NULL as key and disabling it + * should keep no key + * + * @covers SemanticScuttle_Service_User::updateUser + */ + public function testUpdateUserPrivateKeyExistingKeyEnabled() + { + $pkey = '12345678901234567890123456789012'; + $uid = $this->addUser(); + + $this->assertTrue( + $this->us->updateUser( + $uid, 'password', 'name', 'test@example.org', '', '', + '-' . $pkey, true + ) + ); + $arUser = $this->us->getUser($uid); + $this->assertInternalType('array', $arUser); + $this->assertEquals( + $pkey, $arUser['privateKey'], 'private key was not enabled' + ); + } + + //FIXME: verify I cannot re-use private key of different user + + + /** * Test that setting the current user ID is permanent. * and that the current user array is the same ID @@ -176,5 +327,185 @@ class UserTest extends TestBase ); } + + public function testGetUserByPrivateKeyEmptyKey() + { + $arUser = $this->us->getUserByPrivateKey(null); + $this->assertFalse($arUser); + } + + + public function testGetUserByPrivateKeyInvalid() + { + $arUser = $this->us->getUserByPrivateKey('foobar'); + $this->assertFalse($arUser); + + $arUser = $this->us->getUserByPrivateKey('%'); + $this->assertFalse($arUser); + } + + + public function testGetUserByPrivateKeyValidKey() + { + $pkey = $this->us->getNewPrivateKey(); + $uId = $this->addUser(null, null, $pkey); + + $arUser = $this->us->getUserByPrivateKey($pkey); + $this->assertInternalType('array', $arUser); + $this->assertArrayHasKey('uId', $arUser); + $this->assertArrayHasKey('username', $arUser); + + $this->assertEquals($uId, $arUser['uId']); + } + + + /** + * @covers SemanticScuttle_Service_User::privateKeyExists + */ + public function testPrivateKeyExistsEmpty() + { + $this->assertFalse($this->us->privateKeyExists(null)); + $this->assertFalse($this->us->privateKeyExists('')); + } + + + /** + * @covers SemanticScuttle_Service_User::privateKeyExists + */ + public function testPrivateKeyExistsInvalid() + { + $this->assertFalse($this->us->privateKeyExists('-1')); + } + + + /** + * @covers SemanticScuttle_Service_User::privateKeyExists + */ + public function testPrivateKeyExists() + { + $randKey = $this->us->getNewPrivateKey(); + $this->assertFalse($this->us->privateKeyExists($randKey)); + $uid = $this->addUser(null, null, $randKey); + + $this->us->setCurrentUserId($uid); + $this->assertEquals($uid, $this->us->getCurrentUserId()); + + $this->assertTrue($this->us->privateKeyExists($randKey)); + } + + + /** + * @covers SemanticScuttle_Service_User::isPrivateKeyValid + */ + public function testIsPrivateKeyValid() + { + $this->assertFalse( + $this->us->isPrivateKeyValid(null), + 'NULL is an invalid private key' + ); + + $randKey = $this->us->getNewPrivateKey(); + $this->assertTrue( + $this->us->isPrivateKeyValid($randKey), + 'generated key should be valid' + ); + + $randKey2 = '-'.$this->us->getNewPrivateKey(); + $this->assertFalse( + $this->us->isPrivateKeyValid($randKey2), + 'disabled privatekey should return false' + ); + } + + + public function testLoginPrivateKeyInvalid() + { + /* normal user with enabled privatekey */ + $randKey = $this->us->getNewPrivateKey(); + $uid1 = $this->addUser('testusername', 'passw0rd', $randKey); + /* user that has disabled privatekey */ + $randKey2 = '-'.$this->us->getNewPrivateKey(); + $uid2 = $this->addUser('seconduser', 'passw0RD', $randKey2); + + /* test invalid private key */ + $this->assertFalse( + $this->us->loginPrivateKey('02848248084082408240824802408248') + ); + } + + + public function testLoginPrivateKeyValidEnabledKey() + { + /* normal user with enabled privatekey */ + $randKey = $this->us->getNewPrivateKey(); + $uid1 = $this->addUser('testusername', 'passw0rd', $randKey); + /* user that has disabled privatekey */ + $randKey2 = '-'.$this->us->getNewPrivateKey(); + $uid2 = $this->addUser('seconduser', 'passw0RD', $randKey2); + + + /* test valid credentials with private key enabled */ + $this->assertTrue( + $this->us->loginPrivateKey($randKey) + ); + } + + + public function testLoginPrivateKeyInvalidEnabledKey() + { + /* normal user with enabled privatekey */ + $randKey = $this->us->getNewPrivateKey(); + $uid1 = $this->addUser('testusername', 'passw0rd', $randKey); + /* user that has disabled privatekey */ + $randKey2 = '-'.$this->us->getNewPrivateKey(); + $uid2 = $this->addUser('seconduser', 'passw0RD', $randKey2); + + + /* test valid credentials with private key enabled but invalid key */ + $this->assertFalse( + $this->us->loginPrivateKey('123') + ); + } + + + public function testLoginPrivateKeyValidDisabledKey() + { + /* normal user with enabled privatekey */ + $randKey = $this->us->getNewPrivateKey(); + $uid1 = $this->addUser('testusername', 'passw0rd', $randKey); + /* user that has disabled privatekey */ + $randKey2 = '-'.$this->us->getNewPrivateKey(); + $uid2 = $this->addUser('seconduser', 'passw0RD', $randKey2); + + /* confirm user exists so future fails should be due to randkey */ + $this->assertTrue( + $this->us->login('seconduser', 'passw0RD', false) + ); + + /* test valid credentials with private key disabled */ + $this->assertFalse( + $this->us->loginPrivateKey($randKey2) + ); + } + + + public function testLoginPrivateKeyInvalidDisabled() + { + /* normal user with enabled privatekey */ + $randKey = $this->us->getNewPrivateKey(); + $uid1 = $this->addUser('testusername', 'passw0rd', $randKey); + /* user that has disabled privatekey */ + $randKey2 = '-'.$this->us->getNewPrivateKey(); + $uid2 = $this->addUser('seconduser', 'passw0RD', $randKey2); + + /* test valid credentials with private key disabled and invalid key */ + $this->assertFalse( + $this->us->loginPrivateKey('-1') + ); + $this->assertFalse( + $this->us->loginPrivateKey(null) + ); + } + } -?> \ No newline at end of file +?> -- cgit v1.2.3-54-g00ecf From 5203848b12ccda0009409e08165bfa2d9d34a837 Mon Sep 17 00:00:00 2001 From: Mark Pemberton Date: Thu, 19 May 2011 19:40:22 -0400 Subject: revert getBookmarks() back to original --- src/SemanticScuttle/Service/Bookmark.php | 50 ++++++++++++-------------------- tests/Tag2TagTest.php | 1 + 2 files changed, 20 insertions(+), 31 deletions(-) (limited to 'tests') diff --git a/src/SemanticScuttle/Service/Bookmark.php b/src/SemanticScuttle/Service/Bookmark.php index 232f9d0..17ab7ba 100644 --- a/src/SemanticScuttle/Service/Bookmark.php +++ b/src/SemanticScuttle/Service/Bookmark.php @@ -718,7 +718,7 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService // All public bookmarks, user's own bookmarks // and any shared with user $privacy = ' AND ((B.bStatus = 0) OR (B.uId = '. $sId .')'; - $watchnames = $userservice->getWatchNames($sId); + $watchnames = $userservice->getWatchNames($sId, true); foreach ($watchnames as $watchuser) { $privacy .= ' OR (U.username = "'. $watchuser .'" AND B.bStatus = 1)'; } @@ -728,15 +728,14 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService $privacy = ' AND B.bStatus = 0'; } - $tagcount = 0; // Set up the tags, if need be. - if (!is_array($tags) && !is_null($tags) && $tags<>"") { + if (!is_array($tags) && !is_null($tags)) { $tags = explode('+', trim($tags)); + } - $tagcount = count($tags); - for ($i = 0; $i < $tagcount; $i ++) { - $tags[$i] = trim($tags[$i]); - } + $tagcount = count($tags); + for ($i = 0; $i < $tagcount; $i ++) { + $tags[$i] = trim($tags[$i]); } // Set up the SQL query. @@ -821,34 +820,23 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService // Handle the parts of the query that depend on any tags that are present. $query_4 = ''; - if ($tagcount > 0) { - $query_2 .= ', '. $b2tservice->getTableName() .' AS T0'; + for ($i = 0; $i < $tagcount; $i ++) { + $query_2 .= ', '. $b2tservice->getTableName() .' AS T'. $i; $query_4 .= ' AND ('; - - $tagArray = array(); - for ($i = 0; $i < $tagcount; $i ++) { - $tmpTag = $this->db->sql_escape($tags[$i]); - $allLinkedTags = $tag2tagservice->getAllLinkedTags( - $tmpTag, '>', $user - ); - while (is_array($allLinkedTags) && count($allLinkedTags)>0) { - $tmpValue = array_pop($allLinkedTags); - if (in_array($tmpValue, $tagArray) == false) { - $tagArray[] = $tmpValue; - } - } + $allLinkedTags = $tag2tagservice->getAllLinkedTags( + $this->db->sql_escape($tags[$i]), '>', $user + ); - if (in_array($tmpTag, $tagArray) == false) { - $tagArray[] = $tmpTag; - } - } - // loop through array of possible tags - foreach ($tagArray as $k => $v) { - $query_4 .= ' T0.tag = "'. $v .'" OR'; + while (is_array($allLinkedTags) && count($allLinkedTags)>0) { + $query_4 .= ' T'. $i .'.tag = "'. array_pop($allLinkedTags) .'"'; + $query_4 .= ' OR'; } - $query_4 = substr($query_4,0,-3); - $query_4 .= ') AND T0.bId = B.bId'; + + $query_4 .= ' T'. $i .'.tag = "'. $this->db->sql_escape($tags[$i]) .'"'; + + $query_4 .= ') AND T'. $i .'.bId = B.bId'; + //die($query_4); } // Search terms diff --git a/tests/Tag2TagTest.php b/tests/Tag2TagTest.php index 0b73864..58556f1 100644 --- a/tests/Tag2TagTest.php +++ b/tests/Tag2TagTest.php @@ -332,6 +332,7 @@ class Tag2TagTest extends TestBase $this->assertSame('B3', $results['bookmarks'][0]['bTitle']); $results = $bs->getBookmarks(0, NULL, 1, 'aa+ee'); + $this->assertSame(1, intval($results['total'])); $this->assertSame('B2', $results['bookmarks'][0]['bTitle']); -- cgit v1.2.3-54-g00ecf From e0149e24e2b5fac3b875fda468b18fbe2b6b1218 Mon Sep 17 00:00:00 2001 From: Mark Pemberton Date: Sat, 21 May 2011 14:36:29 -0400 Subject: Resolve some failed bookmark and tag tests --- data/templates/bookmarks.tpl.php | 4 ++-- tests/AllTests.php | 3 ++- tests/Api/PostsAddTest.php | 4 ++-- tests/Bookmark2TagTest.php | 6 +++--- www/index.php | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) (limited to 'tests') diff --git a/data/templates/bookmarks.tpl.php b/data/templates/bookmarks.tpl.php index 55d6a0f..42aaa95 100644 --- a/data/templates/bookmarks.tpl.php +++ b/data/templates/bookmarks.tpl.php @@ -220,8 +220,8 @@ if ($currenttag!= '') { $size = count($rsschannels); for ($i = 0; $i < $size; $i++) { $brss = '' - . '' . htmlspecialchars($rsschannels[$i][0]) .'' + . ' title="' . $rsschannels[$i][0] . '">' + . '' . $rsschannels[$i][0] .'' . ''; } diff --git a/tests/AllTests.php b/tests/AllTests.php index 9e825e8..92f8960 100644 --- a/tests/AllTests.php +++ b/tests/AllTests.php @@ -46,6 +46,7 @@ class AllTests extends PHPUnit_Framework_TestSuite $suite->addTestFile($tdir . '/VoteTest.php'); $suite->addTestFile($tdir . '/UserTest.php'); $suite->addTestFile($tdir . '/Api/ExportCsvTest.php'); + $suite->addTestFile($tdir . '/Api/OpenSearchTest.php'); $suite->addTestFile($tdir . '/Api/PostsAddTest.php'); $suite->addTestFile($tdir . '/Api/PostsDeleteTest.php'); $suite->addTestFile($tdir . '/Api/PostsUpdateTest.php'); @@ -58,4 +59,4 @@ class AllTests extends PHPUnit_Framework_TestSuite { } } -?> \ No newline at end of file +?> diff --git a/tests/Api/PostsAddTest.php b/tests/Api/PostsAddTest.php index 02e2b38..e6d0531 100644 --- a/tests/Api/PostsAddTest.php +++ b/tests/Api/PostsAddTest.php @@ -108,7 +108,7 @@ TXT; $this->assertEquals($bmUrl, $bm['bAddress']); $this->assertEquals($bmTitle, $bm['bTitle']); - $this->assertEquals($bmDescription, $bm['bDescription']); + $this->assertEquals($bmDescription, stripslashes($bm['bDescription'])); $this->assertEquals($bmTags, $bm['tags']); $this->assertEquals( gmdate('Y-m-d H:i:s', strtotime($bmDatetime)), @@ -170,7 +170,7 @@ TXT; $this->assertEquals($bmUrl, $bm['bAddress']); $this->assertEquals($bmTitle, $bm['bTitle']); - $this->assertEquals($bmDescription, $bm['bDescription']); + $this->assertEquals($bmDescription, stripslashes($bm['bDescription'])); $this->assertEquals($bmTags, $bm['tags']); $this->assertEquals( gmdate('Y-m-d H:i:s', strtotime($bmDatetime)), diff --git a/tests/Bookmark2TagTest.php b/tests/Bookmark2TagTest.php index 789540f..66a6e1f 100644 --- a/tests/Bookmark2TagTest.php +++ b/tests/Bookmark2TagTest.php @@ -290,8 +290,8 @@ class Bookmark2TagTest extends TestBase $arTags = $this->b2ts->getPopularTags(null, 10, null, 1); $this->assertInternalType('array', $arTags); $this->assertEquals(3, count($arTags)); - $this->assertContains(array('tag' => 'one', 'bCount' => '2'), $arTags); - $this->assertContains(array('tag' => 'two', 'bCount' => '1'), $arTags); + $this->assertContains(array('tag' => 'one', 'bCount' => '3'), $arTags); + $this->assertContains(array('tag' => 'two', 'bCount' => '2'), $arTags); $this->assertContains(array('tag' => 'thr', 'bCount' => '1'), $arTags); $arTags = $this->b2ts->getPopularTags(null, 10, null, 2); @@ -608,4 +608,4 @@ class Bookmark2TagTest extends TestBase $this->assertContains(array('tag' => 'usable', 'bCount' => '2'), $arTags); } } -?> \ No newline at end of file +?> diff --git a/www/index.php b/www/index.php index 0977923..931d64d 100644 --- a/www/index.php +++ b/www/index.php @@ -42,7 +42,7 @@ if (GET_ACTION == "logout") { // Header variables $tplVars['loadjs'] = true; $tplVars['rsschannels'] = array( -array(sprintf(T_('%s: Recent bookmarks'), $sitename), createURL('rss').'?sort='.getSortOrder()) +array(sprintf(T_('%s: Recent bookmarks'), htmlspecialchars($sitename)), createURL('rss').'?sort='.getSortOrder()) ); if ($userservice->isLoggedOn()) { -- cgit v1.2.3-54-g00ecf From 342d1c3205c2f2ae9d918f66e28e8ffa153c2854 Mon Sep 17 00:00:00 2001 From: Mark Pemberton Date: Sat, 21 May 2011 22:06:44 -0400 Subject: Altered tests to be more timezone friendly --- src/SemanticScuttle/Service/Bookmark.php | 2 +- tests/Api/PostsAddTest.php | 4 ++-- tests/Bookmark2TagTest.php | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) (limited to 'tests') diff --git a/src/SemanticScuttle/Service/Bookmark.php b/src/SemanticScuttle/Service/Bookmark.php index 17ab7ba..f69b4d1 100644 --- a/src/SemanticScuttle/Service/Bookmark.php +++ b/src/SemanticScuttle/Service/Bookmark.php @@ -486,7 +486,7 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService } else { $time = strtotime($date); } - $datetime = gmdate('Y-m-d H:i:s', $time); + $datetime = date('Y-m-d H:i:s', $time); if ($short === '') { $short = null; diff --git a/tests/Api/PostsAddTest.php b/tests/Api/PostsAddTest.php index e6d0531..2613a87 100644 --- a/tests/Api/PostsAddTest.php +++ b/tests/Api/PostsAddTest.php @@ -111,7 +111,7 @@ TXT; $this->assertEquals($bmDescription, stripslashes($bm['bDescription'])); $this->assertEquals($bmTags, $bm['tags']); $this->assertEquals( - gmdate('Y-m-d H:i:s', strtotime($bmDatetime)), + date('Y-m-d H:i:s', strtotime($bmDatetime)), $bm['bDatetime'] ); } @@ -173,7 +173,7 @@ TXT; $this->assertEquals($bmDescription, stripslashes($bm['bDescription'])); $this->assertEquals($bmTags, $bm['tags']); $this->assertEquals( - gmdate('Y-m-d H:i:s', strtotime($bmDatetime)), + date('Y-m-d H:i:s', strtotime($bmDatetime)), $bm['bDatetime'] ); } diff --git a/tests/Bookmark2TagTest.php b/tests/Bookmark2TagTest.php index 66a6e1f..0236a5f 100644 --- a/tests/Bookmark2TagTest.php +++ b/tests/Bookmark2TagTest.php @@ -282,16 +282,16 @@ class Bookmark2TagTest extends TestBase public function testGetPopularTagsDays() { $user = $this->addUser(); - $this->addTagBookmark($user, array('one', 'two'), 'today'); - $this->addTagBookmark($user, array('one', 'thr'), 'today'); - $this->addTagBookmark($user, array('one', 'two'), '-1 day 1 hour'); - $this->addTagBookmark($user, array('one', 'thr'), '-3 days 1 hour'); + $this->addTagBookmark($user, array('one', 'two'), 'now'); + $this->addTagBookmark($user, array('one', 'thr'), 'now'); + $this->addTagBookmark($user, array('one', 'two'), '-1 day -1 hour'); + $this->addTagBookmark($user, array('one', 'thr'), '-3 days -1 hour'); $arTags = $this->b2ts->getPopularTags(null, 10, null, 1); $this->assertInternalType('array', $arTags); $this->assertEquals(3, count($arTags)); - $this->assertContains(array('tag' => 'one', 'bCount' => '3'), $arTags); - $this->assertContains(array('tag' => 'two', 'bCount' => '2'), $arTags); + $this->assertContains(array('tag' => 'one', 'bCount' => '2'), $arTags); + $this->assertContains(array('tag' => 'two', 'bCount' => '1'), $arTags); $this->assertContains(array('tag' => 'thr', 'bCount' => '1'), $arTags); $arTags = $this->b2ts->getPopularTags(null, 10, null, 2); -- cgit v1.2.3-54-g00ecf From 84e603aa91a303a1419962ff3ff6086710a7b1a9 Mon Sep 17 00:00:00 2001 From: Mark Pemberton Date: Sat, 4 Jun 2011 00:29:04 -0400 Subject: Reverted changes of date() to gdate(), added tests to confirm existence of private RSS feed, and finalized changes to the user session usage with rss.php --- src/SemanticScuttle/Service/Bookmark.php | 2 +- src/SemanticScuttle/Service/Bookmark2Tag.php | 2 +- src/SemanticScuttle/Service/User.php | 2 -- tests/Api/PostsAddTest.php | 4 ++-- tests/TestBaseApi.php | 21 ++++++++++++------- tests/www/bookmarksTest.php | 27 ++++++++++++++++++++++++ www/ajaxGetNewPrivateKey.php | 31 +++++++++++----------------- www/index.php | 2 +- www/jsScuttle.php | 8 +++++++ www/rss.php | 14 ++----------- 10 files changed, 68 insertions(+), 45 deletions(-) (limited to 'tests') diff --git a/src/SemanticScuttle/Service/Bookmark.php b/src/SemanticScuttle/Service/Bookmark.php index f69b4d1..17ab7ba 100644 --- a/src/SemanticScuttle/Service/Bookmark.php +++ b/src/SemanticScuttle/Service/Bookmark.php @@ -486,7 +486,7 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService } else { $time = strtotime($date); } - $datetime = date('Y-m-d H:i:s', $time); + $datetime = gmdate('Y-m-d H:i:s', $time); if ($short === '') { $short = null; diff --git a/src/SemanticScuttle/Service/Bookmark2Tag.php b/src/SemanticScuttle/Service/Bookmark2Tag.php index fc59a1c..04ee43d 100644 --- a/src/SemanticScuttle/Service/Bookmark2Tag.php +++ b/src/SemanticScuttle/Service/Bookmark2Tag.php @@ -584,7 +584,7 @@ class SemanticScuttle_Service_Bookmark2Tag extends SemanticScuttle_DbService if (is_int($days)) { $query .= ' AND B.bDatetime > "' - . date('Y-m-d H:i:s', time() - (86400 * $days)) + . gmdate('Y-m-d H:i:s', time() - (86400 * $days)) . '"'; } diff --git a/src/SemanticScuttle/Service/User.php b/src/SemanticScuttle/Service/User.php index 18d5a29..a4870b7 100644 --- a/src/SemanticScuttle/Service/User.php +++ b/src/SemanticScuttle/Service/User.php @@ -571,8 +571,6 @@ class SemanticScuttle_Service_User extends SemanticScuttle_DbService $this->db->sql_freeresult($dbresult); if ($row) { - $id = $_SESSION[$this->getSessionKey()] - = $row[$this->getFieldName('primary')]; return true; } else { return false; diff --git a/tests/Api/PostsAddTest.php b/tests/Api/PostsAddTest.php index 2613a87..e6d0531 100644 --- a/tests/Api/PostsAddTest.php +++ b/tests/Api/PostsAddTest.php @@ -111,7 +111,7 @@ TXT; $this->assertEquals($bmDescription, stripslashes($bm['bDescription'])); $this->assertEquals($bmTags, $bm['tags']); $this->assertEquals( - date('Y-m-d H:i:s', strtotime($bmDatetime)), + gmdate('Y-m-d H:i:s', strtotime($bmDatetime)), $bm['bDatetime'] ); } @@ -173,7 +173,7 @@ TXT; $this->assertEquals($bmDescription, stripslashes($bm['bDescription'])); $this->assertEquals($bmTags, $bm['tags']); $this->assertEquals( - date('Y-m-d H:i:s', strtotime($bmDatetime)), + gmdate('Y-m-d H:i:s', strtotime($bmDatetime)), $bm['bDatetime'] ); } diff --git a/tests/TestBaseApi.php b/tests/TestBaseApi.php index 20574f3..d8917aa 100644 --- a/tests/TestBaseApi.php +++ b/tests/TestBaseApi.php @@ -164,15 +164,16 @@ class TestBaseApi extends TestBase * * Useful for testing HTML pages or ajax URLs. * - * @param string $urlSuffix Suffix for the URL - * @param mixed $auth If user authentication is needed (true/false) - * or array with username and password + * @param string $urlSuffix Suffix for the URL + * @param mixed $auth If user authentication is needed (true/false) + * or array with username and password + * @param boolean $privateKey True if to add user with private key * * @return array(HTTP_Request2, integer) HTTP request object and user id * * @uses getRequest() */ - protected function getLoggedInRequest($urlSuffix = null, $auth = true) + protected function getLoggedInRequest($urlSuffix = null, $auth = true, $privateKey = false) { if (is_array($auth)) { list($username, $password) = $auth; @@ -180,7 +181,13 @@ class TestBaseApi extends TestBase $username = 'testuser'; $password = 'testpassword'; } - $uid = $this->addUser($username, $password); + //include privatekey if requested + if ($privateKey) { + $pKey = $this->us->getNewPrivateKey(); + } else { + $pKey = null; + } + $uid = $this->addUser($username, $password, $pKey); $req = new HTTP_Request2( $GLOBALS['unittestUrl'] . '/login.php?unittestMode=1', @@ -234,7 +241,7 @@ class TestBaseApi extends TestBase */ protected function setUnittestConfig($arConfig) { - $str = '<' . "?php\r\n"; + $str = '<' . "?php\n"; foreach ($arConfig as $name => $value) { $str .= '$' . $name . ' = ' . var_export($value, true) . ";\n"; @@ -253,4 +260,4 @@ class TestBaseApi extends TestBase ); } } -?> \ No newline at end of file +?> diff --git a/tests/www/bookmarksTest.php b/tests/www/bookmarksTest.php index df360cc..eaf78bf 100755 --- a/tests/www/bookmarksTest.php +++ b/tests/www/bookmarksTest.php @@ -76,5 +76,32 @@ class www_bookmarksTest extends TestBaseApi $this->assertEquals(1, (string)$elements[0]['value']); }//end testDefaultPrivacyBookmarksAdd + + /** + * Test that the private RSS link exists when a user + * has a private key and is enabled + */ + public function testVerifyPrivateRSSLinkExists() + { + list($req, $uId) = $this->getLoggedInRequest('?unittestMode=1', true, true); + + $user = $this->us->getUser($uId); + $reqUrl = $GLOBALS['unittestUrl'] . 'bookmarks.php/' + . $user['username']; + $req->setUrl($reqUrl); + $req->setMethod(HTTP_Request2::METHOD_GET); + $response = $req->send(); + $response_body = $response->getBody(); + $this->assertNotEquals('', $response_body, 'Response is empty'); + + $x = simplexml_load_string($response_body); + $ns = $x->getDocNamespaces(); + $x->registerXPathNamespace('ns', reset($ns)); + + $elements = $x->xpath('//ns:link'); + $this->assertEquals(5, count($elements), 'Number of Links in Head not correct'); + $this->assertContains('privatekey=', (string)$elements[4]['href']); + }//end testVerifyPrivateRSSLinkExists + }//end class www_bookmarksTest ?> diff --git a/www/ajaxGetNewPrivateKey.php b/www/ajaxGetNewPrivateKey.php index 59545a2..eacebd8 100644 --- a/www/ajaxGetNewPrivateKey.php +++ b/www/ajaxGetNewPrivateKey.php @@ -1,23 +1,16 @@ + * @author Mark Pemberton + * @license AGPL http://www.gnu.org/licenses/agpl.html + * @link http://sourceforge.net/projects/semanticscuttle + */ header("Last-Modified: ". gmdate("D, d M Y H:i:s") ." GMT"); header("Cache-Control: no-cache, must-revalidate"); diff --git a/www/index.php b/www/index.php index 931d64d..fab235f 100644 --- a/www/index.php +++ b/www/index.php @@ -51,7 +51,7 @@ if ($userservice->isLoggedOn()) { array_push( $tplVars['rsschannels'], array( - filter($sitename . sprintf(T_(': (private) ')) . $currentUsername), + filter($sitename . sprintf(T_(': Recent bookmarks (private)')) . $currentUsername), createURL('rss', filter($currentUsername, 'url') . '?sort='.getSortOrder().'&privatekey='.$currentUser->getPrivateKey()) ) ); diff --git a/www/jsScuttle.php b/www/jsScuttle.php index 76b49dc..3ca41ec 100644 --- a/www/jsScuttle.php +++ b/www/jsScuttle.php @@ -89,6 +89,14 @@ function useAddress(ele) { } } +/** + * Makes an ajax call to PHP script to generate an new Private Key + * + * @param input Calling object + * @param response Response object that returned value is placed + * + * @return boolean Returns false to halt execution after call + */ function getNewPrivateKey(input, response){ var pk = document.getElementById('pPrivateKey'); if (response != null) { diff --git a/www/rss.php b/www/rss.php index 8c81e0e..2927534 100644 --- a/www/rss.php +++ b/www/rss.php @@ -71,7 +71,6 @@ if (isset($_GET['privatekey'])) { $watchlist = null; $pagetitle = ''; -$isTempLogin = false; if ($user && $user != 'all') { if ($user == 'watchlist') { $user = $cat; @@ -86,9 +85,7 @@ if ($user && $user != 'all') { /* if user is not logged in and has valid privatekey */ if (!$userservice->isLoggedOn()) { if ($privatekey != null) { - if ($userservice->loginPrivateKey($privatekey)) { - $isTempLogin = true; - } else { + if (!$userservice->loginPrivateKey($privatekey)) { $tplVars['error'] = sprintf(T_('Failed to Autenticate User with username %s using private key'), $user); header('Content-type: text/html; charset=utf-8'); $templateservice->loadTemplate('error.404.tpl', $tplVars); @@ -109,9 +106,7 @@ if ($user && $user != 'all') { $pagetitle .= ": ". $user; } else { if ($privatekey != null) { - if ($userservice->loginPrivateKey($privatekey)) { - $isTempLogin = true; - } else { + if (!$userservice->loginPrivateKey($privatekey)) { $tplVars['error'] = sprintf(T_('Failed to Autenticate User with username %s using private key'), $user); header('Content-type: text/html; charset=utf-8'); $templateservice->loadTemplate('error.404.tpl', $tplVars); @@ -168,11 +163,6 @@ $tplVars['feedlastupdate'] = date('r', strtotime($latestdate)); $templateservice->loadTemplate('rss.tpl', $tplVars); -/* If temporary login, please log out */ -if ($isTempLogin) { - $userservice->logout(); -} - if ($usecache) { // Cache output if existing copy has expired $cacheservice->End($hash); -- cgit v1.2.3-54-g00ecf From cd2756a4d0d18497648deacfb619e227335648ad Mon Sep 17 00:00:00 2001 From: Mark Pemberton Date: Tue, 7 Jun 2011 22:13:50 -0400 Subject: Refined bookmarksTest.php and added indexTest.php --- tests/www/bookmarksTest.php | 33 +++++++++++++++++++++--- tests/www/indexTest.php | 63 +++++++++++++++++++++++++++++++++++++++++++++ tests/www/searchTest.php | 4 ++- 3 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 tests/www/indexTest.php (limited to 'tests') diff --git a/tests/www/bookmarksTest.php b/tests/www/bookmarksTest.php index eaf78bf..1f6d1a5 100755 --- a/tests/www/bookmarksTest.php +++ b/tests/www/bookmarksTest.php @@ -98,10 +98,37 @@ class www_bookmarksTest extends TestBaseApi $ns = $x->getDocNamespaces(); $x->registerXPathNamespace('ns', reset($ns)); - $elements = $x->xpath('//ns:link'); - $this->assertEquals(5, count($elements), 'Number of Links in Head not correct'); - $this->assertContains('privatekey=', (string)$elements[4]['href']); + $elements = $x->xpath('//ns:link[@rel="alternate" and @type="application/rss+xml"]'); + $this->assertEquals(2, count($elements), 'Number of Links in Head not correct'); + $this->assertContains('privatekey=', (string)$elements[1]['href']); }//end testVerifyPrivateRSSLinkExists + + /** + * Test that the private RSS link doesn't exists when a user + * does not have a private key or is not enabled + */ + public function testVerifyPrivateRSSLinkDoesNotExist() + { + list($req, $uId) = $this->getLoggedInRequest('?unittestMode=1', true); + + $user = $this->us->getUser($uId); + $reqUrl = $GLOBALS['unittestUrl'] . 'bookmarks.php/' + . $user['username']; + $req->setUrl($reqUrl); + $req->setMethod(HTTP_Request2::METHOD_GET); + $response = $req->send(); + $response_body = $response->getBody(); + $this->assertNotEquals('', $response_body, 'Response is empty'); + + $x = simplexml_load_string($response_body); + $ns = $x->getDocNamespaces(); + $x->registerXPathNamespace('ns', reset($ns)); + + $elements = $x->xpath('//ns:link[@rel="alternate" and @type="application/rss+xml"]'); + $this->assertEquals(1, count($elements), 'Number of Links in Head not correct'); + $this->assertNotContains('privatekey=', (string)$elements[0]['href']); + }//end testVerifyPrivateRSSLinkDoesNotExist + }//end class www_bookmarksTest ?> diff --git a/tests/www/indexTest.php b/tests/www/indexTest.php new file mode 100644 index 0000000..d95a328 --- /dev/null +++ b/tests/www/indexTest.php @@ -0,0 +1,63 @@ +getLoggedInRequest('?unittestMode=1', true, true); + + $user = $this->us->getUser($uId); + $reqUrl = $GLOBALS['unittestUrl'] . 'index.php/'; + $req->setUrl($reqUrl); + $req->setMethod(HTTP_Request2::METHOD_GET); + $response = $req->send(); + $response_body = $response->getBody(); + $this->assertNotEquals('', $response_body, 'Response is empty'); + + $x = simplexml_load_string($response_body); + $ns = $x->getDocNamespaces(); + $x->registerXPathNamespace('ns', reset($ns)); + + $elements = $x->xpath('//ns:link[@rel="alternate" and @type="application/rss+xml"]'); + $this->assertEquals(2, count($elements), 'Number of Links in Head not correct'); + $this->assertContains('privatekey=', (string)$elements[1]['href']); + }//end testVerifyPrivateRSSLinkExists + + + /** + * Test that the private RSS link doesn't exists when a user + * does not have a private key or is not enabled + */ + public function testVerifyPrivateRSSLinkDoesNotExist() + { + list($req, $uId) = $this->getLoggedInRequest('?unittestMode=1', true); + + $user = $this->us->getUser($uId); + $reqUrl = $GLOBALS['unittestUrl'] . 'bookmarks.php/' + . $user['username']; + $req->setUrl($reqUrl); + $req->setMethod(HTTP_Request2::METHOD_GET); + $response = $req->send(); + $response_body = $response->getBody(); + $this->assertNotEquals('', $response_body, 'Response is empty'); + + $x = simplexml_load_string($response_body); + $ns = $x->getDocNamespaces(); + $x->registerXPathNamespace('ns', reset($ns)); + + $elements = $x->xpath('//ns:link[@rel="alternate" and @type="application/rss+xml"]'); + $this->assertEquals(1, count($elements), 'Number of Links in Head not correct'); + $this->assertNotContains('privatekey=', (string)$elements[0]['href']); + }//end testVerifyPrivateRSSLinkDoesNotExist + + +}//end class www_bookmarksTest +?> diff --git a/tests/www/searchTest.php b/tests/www/searchTest.php index 5dce69d..89af32d 100644 --- a/tests/www/searchTest.php +++ b/tests/www/searchTest.php @@ -1,4 +1,6 @@ \ No newline at end of file +?> -- cgit v1.2.3-54-g00ecf From 44a65eddaca98c2313ce128f9994e7484f9099b1 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Wed, 8 Jun 2011 07:00:17 +0200 Subject: fix tests for people that use a separate test database --- tests/www/bookmarksTest.php | 4 ++-- tests/www/indexTest.php | 13 ++++--------- 2 files changed, 6 insertions(+), 11 deletions(-) (limited to 'tests') diff --git a/tests/www/bookmarksTest.php b/tests/www/bookmarksTest.php index 1f6d1a5..a4de5f8 100755 --- a/tests/www/bookmarksTest.php +++ b/tests/www/bookmarksTest.php @@ -87,7 +87,7 @@ class www_bookmarksTest extends TestBaseApi $user = $this->us->getUser($uId); $reqUrl = $GLOBALS['unittestUrl'] . 'bookmarks.php/' - . $user['username']; + . $user['username'] . '?unittestMode=1'; $req->setUrl($reqUrl); $req->setMethod(HTTP_Request2::METHOD_GET); $response = $req->send(); @@ -114,7 +114,7 @@ class www_bookmarksTest extends TestBaseApi $user = $this->us->getUser($uId); $reqUrl = $GLOBALS['unittestUrl'] . 'bookmarks.php/' - . $user['username']; + . $user['username'] . '?unittestMode=1'; $req->setUrl($reqUrl); $req->setMethod(HTTP_Request2::METHOD_GET); $response = $req->send(); diff --git a/tests/www/indexTest.php b/tests/www/indexTest.php index d95a328..18cb75a 100644 --- a/tests/www/indexTest.php +++ b/tests/www/indexTest.php @@ -4,7 +4,7 @@ require_once 'HTTP/Request2.php'; class www_indexTest extends TestBaseApi { - protected $urlPart = 'api/posts/add'; + protected $urlPart = ''; /** * Test that the private rss feed exists when user is setup @@ -15,11 +15,9 @@ class www_indexTest extends TestBaseApi list($req, $uId) = $this->getLoggedInRequest('?unittestMode=1', true, true); $user = $this->us->getUser($uId); - $reqUrl = $GLOBALS['unittestUrl'] . 'index.php/'; - $req->setUrl($reqUrl); - $req->setMethod(HTTP_Request2::METHOD_GET); $response = $req->send(); $response_body = $response->getBody(); + $this->assertNotEquals('', $response_body, 'Response is empty'); $x = simplexml_load_string($response_body); @@ -32,19 +30,16 @@ class www_indexTest extends TestBaseApi }//end testVerifyPrivateRSSLinkExists + /** * Test that the private RSS link doesn't exists when a user - * does not have a private key or is not enabled + * does not have a private key, or the private key is not enabled */ public function testVerifyPrivateRSSLinkDoesNotExist() { list($req, $uId) = $this->getLoggedInRequest('?unittestMode=1', true); $user = $this->us->getUser($uId); - $reqUrl = $GLOBALS['unittestUrl'] . 'bookmarks.php/' - . $user['username']; - $req->setUrl($reqUrl); - $req->setMethod(HTTP_Request2::METHOD_GET); $response = $req->send(); $response_body = $response->getBody(); $this->assertNotEquals('', $response_body, 'Response is empty'); -- cgit v1.2.3-54-g00ecf From 39dfe3f1acf620eccb668d4f8d7451c1cef96ba5 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Wed, 8 Jun 2011 07:00:24 +0200 Subject: CS --- tests/TestBaseApi.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/TestBaseApi.php b/tests/TestBaseApi.php index d8917aa..7568147 100644 --- a/tests/TestBaseApi.php +++ b/tests/TestBaseApi.php @@ -164,17 +164,18 @@ class TestBaseApi extends TestBase * * Useful for testing HTML pages or ajax URLs. * - * @param string $urlSuffix Suffix for the URL - * @param mixed $auth If user authentication is needed (true/false) - * or array with username and password + * @param string $urlSuffix Suffix for the URL + * @param mixed $auth If user authentication is needed (true/false) + * or array with username and password * @param boolean $privateKey True if to add user with private key * * @return array(HTTP_Request2, integer) HTTP request object and user id * * @uses getRequest() */ - protected function getLoggedInRequest($urlSuffix = null, $auth = true, $privateKey = false) - { + protected function getLoggedInRequest( + $urlSuffix = null, $auth = true, $privateKey = false + ) { if (is_array($auth)) { list($username, $password) = $auth; } else { -- cgit v1.2.3-54-g00ecf From 5009535d3438ecc338dacc8120fa143fd28c5628 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Wed, 8 Jun 2011 07:21:33 +0200 Subject: docblocks for url and urlPart variables --- tests/TestBaseApi.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'tests') diff --git a/tests/TestBaseApi.php b/tests/TestBaseApi.php index 7568147..50a2413 100644 --- a/tests/TestBaseApi.php +++ b/tests/TestBaseApi.php @@ -24,7 +24,20 @@ require_once 'HTTP/Request2.php'; */ class TestBaseApi extends TestBase { + /** + * Created from the configured host and the $urlPart. + * Should be used as base for all generated URLs + * + * @var string + */ protected $url; + + /** + * Part of the URL behind the configured host. + * Needs to be overwritten in each derived test case class. + * + * @var string + */ protected $urlPart = null; /** -- cgit v1.2.3-54-g00ecf From 5deeecc408de104f2330a346dd528f6bb1e25b4e Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Wed, 8 Jun 2011 07:22:13 +0200 Subject: make bookmarks.php tests easier to read and use the TestBaseApi to get the urls --- tests/www/bookmarksTest.php | 62 ++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 34 deletions(-) (limited to 'tests') diff --git a/tests/www/bookmarksTest.php b/tests/www/bookmarksTest.php index a4de5f8..1e1f4eb 100755 --- a/tests/www/bookmarksTest.php +++ b/tests/www/bookmarksTest.php @@ -4,7 +4,7 @@ require_once 'HTTP/Request2.php'; class www_bookmarksTest extends TestBaseApi { - protected $urlPart = 'api/posts/add'; + protected $urlPart = 'bookmarks.php'; /** * Test that the default privacy setting is selected in the Privacy @@ -16,23 +16,11 @@ class www_bookmarksTest extends TestBaseApi $this->setUnittestConfig( array('defaults' => array('privacy' => 2)) ); - list($req, $uId) = $this->getLoggedInRequest(); - $cookies = $req->getCookieJar(); - $req->setMethod(HTTP_Request2::METHOD_POST); - $req->addPostParameter('url', 'http://www.example.org/testdefaultprivacyposts_bookmarksget'); - $req->addPostParameter('description', 'Test bookmark 1 for default privacy.'); - $req->addPostParameter('status', '0'); - $req->send(); - $bms = $this->bs->getBookmarks(0, null, $uId); - $this->assertEquals(1, count($bms['bookmarks'])); + list($req, $uId) = $this->getLoggedInRequest(); $user = $this->us->getUser($uId); - $reqUrl = $GLOBALS['unittestUrl'] . 'bookmarks.php/' . $user['username'] . '?action=get' . '&unittestMode=1'; - - list($req, $uId) = $this->getAuthRequest('?unittestMode=1'); $req->setMethod(HTTP_Request2::METHOD_POST); - $req->setUrl($reqUrl); - $req->setCookieJar($cookies); + $req->setUrl($this->getTestUrl('/' . $user['username'] . '?action=get')); $req->addPostParameter('submitted', '1'); $response = $req->send(); $response_body = $response->getBody(); @@ -41,12 +29,15 @@ class www_bookmarksTest extends TestBaseApi $ns = $x->getDocNamespaces(); $x->registerXPathNamespace('ns', reset($ns)); - $elements = $x->xpath('//ns:select[@name="status"]/ns:option[@selected="selected"]'); + $elements = $x->xpath( + '//ns:select[@name="status"]/ns:option[@selected="selected"]' + ); $this->assertEquals(1, count($elements), 'No selected status option found'); $this->assertEquals(2, (string)$elements[0]['value']); }//end testDefaultPrivacyBookmarksAddMissingTitleMissingPrivacy + /** * Test that the default privacy setting is selected in the Privacy * drop-down list when a new bookmark is being created. @@ -56,13 +47,10 @@ class www_bookmarksTest extends TestBaseApi $this->setUnittestConfig( array('defaults' => array('privacy' => 1)) ); - list($req, $uId) = $this->getLoggedInRequest('?unittestMode=1'); + list($req, $uId) = $this->getLoggedInRequest(); $user = $this->us->getUser($uId); - $reqUrl = $GLOBALS['unittestUrl'] . 'bookmarks.php/' - . $user['username'] . '?action=add' . '&unittestMode=1'; - $req->setUrl($reqUrl); - $req->setMethod(HTTP_Request2::METHOD_GET); + $req->setUrl($this->getTestUrl('/' . $user['username'] . '?action=add')); $response = $req->send(); $response_body = $response->getBody(); $this->assertNotEquals('', $response_body, 'Response is empty'); @@ -71,12 +59,15 @@ class www_bookmarksTest extends TestBaseApi $ns = $x->getDocNamespaces(); $x->registerXPathNamespace('ns', reset($ns)); - $elements = $x->xpath('//ns:select[@name="status"]/ns:option[@selected="selected"]'); + $elements = $x->xpath( + '//ns:select[@name="status"]/ns:option[@selected="selected"]' + ); $this->assertEquals(1, count($elements), 'No selected status option found'); $this->assertEquals(1, (string)$elements[0]['value']); }//end testDefaultPrivacyBookmarksAdd + /** * Test that the private RSS link exists when a user * has a private key and is enabled @@ -86,10 +77,7 @@ class www_bookmarksTest extends TestBaseApi list($req, $uId) = $this->getLoggedInRequest('?unittestMode=1', true, true); $user = $this->us->getUser($uId); - $reqUrl = $GLOBALS['unittestUrl'] . 'bookmarks.php/' - . $user['username'] . '?unittestMode=1'; - $req->setUrl($reqUrl); - $req->setMethod(HTTP_Request2::METHOD_GET); + $req->setUrl($this->getTestUrl('/' . $user['username'])); $response = $req->send(); $response_body = $response->getBody(); $this->assertNotEquals('', $response_body, 'Response is empty'); @@ -98,12 +86,17 @@ class www_bookmarksTest extends TestBaseApi $ns = $x->getDocNamespaces(); $x->registerXPathNamespace('ns', reset($ns)); - $elements = $x->xpath('//ns:link[@rel="alternate" and @type="application/rss+xml"]'); - $this->assertEquals(2, count($elements), 'Number of Links in Head not correct'); + $elements = $x->xpath( + '//ns:link[@rel="alternate" and @type="application/rss+xml"]' + ); + $this->assertEquals( + 2, count($elements), 'Number of Links in Head not correct' + ); $this->assertContains('privatekey=', (string)$elements[1]['href']); }//end testVerifyPrivateRSSLinkExists + /** * Test that the private RSS link doesn't exists when a user * does not have a private key or is not enabled @@ -113,10 +106,7 @@ class www_bookmarksTest extends TestBaseApi list($req, $uId) = $this->getLoggedInRequest('?unittestMode=1', true); $user = $this->us->getUser($uId); - $reqUrl = $GLOBALS['unittestUrl'] . 'bookmarks.php/' - . $user['username'] . '?unittestMode=1'; - $req->setUrl($reqUrl); - $req->setMethod(HTTP_Request2::METHOD_GET); + $req->setUrl($this->getTestUrl('/' . $user['username'])); $response = $req->send(); $response_body = $response->getBody(); $this->assertNotEquals('', $response_body, 'Response is empty'); @@ -125,8 +115,12 @@ class www_bookmarksTest extends TestBaseApi $ns = $x->getDocNamespaces(); $x->registerXPathNamespace('ns', reset($ns)); - $elements = $x->xpath('//ns:link[@rel="alternate" and @type="application/rss+xml"]'); - $this->assertEquals(1, count($elements), 'Number of Links in Head not correct'); + $elements = $x->xpath( + '//ns:link[@rel="alternate" and @type="application/rss+xml"]' + ); + $this->assertEquals( + 1, count($elements), 'Number of Links in Head not correct' + ); $this->assertNotContains('privatekey=', (string)$elements[0]['href']); }//end testVerifyPrivateRSSLinkDoesNotExist -- cgit v1.2.3-54-g00ecf From 045d139d64ada2c510ed05e177ba6f484ad68496 Mon Sep 17 00:00:00 2001 From: Mark Pemberton Date: Wed, 15 Jun 2011 00:58:29 -0400 Subject: Added RSS Feed tests --- tests/TestBaseApi.php | 7 ++-- tests/www/rssTest.php | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 tests/www/rssTest.php (limited to 'tests') diff --git a/tests/TestBaseApi.php b/tests/TestBaseApi.php index 50a2413..f860d10 100644 --- a/tests/TestBaseApi.php +++ b/tests/TestBaseApi.php @@ -187,7 +187,8 @@ class TestBaseApi extends TestBase * @uses getRequest() */ protected function getLoggedInRequest( - $urlSuffix = null, $auth = true, $privateKey = false + $urlSuffix = null, $auth = true, $privateKey = false, + $setCookie = true ) { if (is_array($auth)) { list($username, $password) = $auth; @@ -217,7 +218,9 @@ class TestBaseApi extends TestBase $this->assertEquals(302, $res->getStatus(), 'Login failure'); $req = $this->getRequest($urlSuffix); - $req->setCookieJar($cookies); + if ($setCookie) { + $req->setCookieJar($cookies); + } return array($req, $uid); } diff --git a/tests/www/rssTest.php b/tests/www/rssTest.php new file mode 100644 index 0000000..1822fc9 --- /dev/null +++ b/tests/www/rssTest.php @@ -0,0 +1,94 @@ +setUnittestConfig( + array('defaults' => array('privacy' => 2)) + ); + + /* create user without RSS private Key */ + list($req, $uId) = $this->getLoggedInRequest(null, true, false, false); + + /* create private bookmark */ + $this->bs->addBookmark( + 'http://test', 'test', 'desc', 'note', + 2,//private + array(), null, null, false, false, $uId + ); + /* create public bookmark */ + $this->bs->addBookmark( + 'http://example.org', 'title', 'desc', 'priv', + 0,//public + array(), null, null, false, false, $uId + ); + + /* get user details */ + $user = $this->us->getUser($uId); + + $req->setMethod(HTTP_Request2::METHOD_POST); + $req->setUrl($this->getTestUrl('/' . $user['username'] . '?sort=date_desc')); + $response = $req->send(); + $response_body = $response->getBody(); + + $rss = simplexml_load_string($response_body); + $items = $rss->channel->item; + + $this->assertEquals(1, count($items), 'Incorrect Number of RSS Items'); + $this->assertEquals('title', (string)$items[0]->title); + }//end testNoRSSPrivateKeyEnabled + + + /** + * Test a user who has RSS private key setup + * with private bookmark. + */ + public function testRSSPrivateKeyEnabled() + { + $this->setUnittestConfig( + array('defaults' => array('privacy' => 2)) + ); + + /* create user with RSS private Key */ + list($req, $uId) = $this->getLoggedInRequest(null, true, false, true); + + /* create private bookmark */ + $this->bs->addBookmark( + 'http://test', 'test', 'desc', 'note', + 2,//private + array(), null, null, false, false, $uId + ); + /* create public bookmark */ + $this->bs->addBookmark( + 'http://example.org', 'title', 'desc', 'priv', + 0,//public + array(), null, null, false, false, $uId + ); + + /* get user details */ + $user = $this->us->getUser($uId); + + $req->setMethod(HTTP_Request2::METHOD_POST); + $req->setUrl($this->getTestUrl('/' . $user['username'] . '?sort=date_desc&privatekey=' . $user['privatekey'])); + $response = $req->send(); + $response_body = $response->getBody(); + + $rss = simplexml_load_string($response_body); + $items = $rss->channel->item; + + $this->assertEquals(2, count($items), 'Incorrect Number of RSS Items'); + }//end testRSSPrivateKeyEnabled + + + +}//end class www_rssTest +?> -- cgit v1.2.3-54-g00ecf From 9eab02af5f6212b417a6aef095d55e6c5d8fc616 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Mon, 27 Jun 2011 19:09:19 +0200 Subject: fix typo --- tests/www/rssTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/www/rssTest.php b/tests/www/rssTest.php index 1822fc9..9d4e41b 100644 --- a/tests/www/rssTest.php +++ b/tests/www/rssTest.php @@ -78,7 +78,7 @@ class www_rssTest extends TestBaseApi $user = $this->us->getUser($uId); $req->setMethod(HTTP_Request2::METHOD_POST); - $req->setUrl($this->getTestUrl('/' . $user['username'] . '?sort=date_desc&privatekey=' . $user['privatekey'])); + $req->setUrl($this->getTestUrl('/' . $user['username'] . '?sort=date_desc&privatekey=' . $user['privateKey'])); $response = $req->send(); $response_body = $response->getBody(); -- cgit v1.2.3-54-g00ecf From d2aecd8a76a8c1f0d326cae13f158b74b6e60709 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Mon, 27 Jun 2011 19:16:33 +0200 Subject: move private key generation to adduser --- tests/TestBase.php | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) (limited to 'tests') diff --git a/tests/TestBase.php b/tests/TestBase.php index 1331ec6..5ea656c 100644 --- a/tests/TestBase.php +++ b/tests/TestBase.php @@ -76,17 +76,18 @@ class TestBase extends PHPUnit_Framework_TestCase /** * Creates a new user in the database. * - * @param string $username Username - * @param string $password Password - * @param string $pkey Private Key + * @param string $username Username + * @param string $password Password + * @param mixed $privateKey String private key or boolean true to generate one * * @return integer ID of user * * @uses addUserData() */ - protected function addUser($username = null, $password = null, $pkey = null) - { - return reset($this->addUserData($username, $password, $pkey)); + protected function addUser( + $username = null, $password = null, $privateKey = null + ) { + return reset($this->addUserData($username, $password, $privateKey)); } @@ -94,14 +95,15 @@ class TestBase extends PHPUnit_Framework_TestCase /** * Creates a new user in the database and returns id, username and password. * - * @param string $username Username - * @param string $password Password - * @param string $pkey Private Key + * @param string $username Username + * @param string $password Password + * @param mixed $privateKey String private key or boolean true to generate one * - * @return array ID of user, Name of user, password of user + * @return array ID of user, Name of user, password of user, privatekey */ - protected function addUserData($username = null, $password = null, $pkey = null) - { + protected function addUserData( + $username = null, $password = null, $privateKey = null + ) { $us = SemanticScuttle_Service_Factory::get('User'); $rand = rand(); @@ -111,14 +113,17 @@ class TestBase extends PHPUnit_Framework_TestCase if ($password === null) { $password = $rand; } + if ($privateKey === true) { + $privateKey = $this->us->getNewPrivateKey(); + } $uid = $us->addUser( $username, $password, 'unittest-' . $rand . '@example.org', - $pkey + $privateKey ); - return array($uid, $username, $password); + return array($uid, $username, $password, $privateKey); } -- cgit v1.2.3-54-g00ecf From 6ec3b102aa896df8ddcf6323e0635dc42ac25f98 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Mon, 27 Jun 2011 19:39:38 +0200 Subject: make the private tests really test something --- src/SemanticScuttle/Model/Bookmark.php | 17 ++++++++ tests/TestBase.php | 8 ++-- tests/TestBaseApi.php | 15 ++----- tests/www/rssTest.php | 73 +++++++++------------------------- 4 files changed, 42 insertions(+), 71 deletions(-) (limited to 'tests') diff --git a/src/SemanticScuttle/Model/Bookmark.php b/src/SemanticScuttle/Model/Bookmark.php index 8bda0b3..1330642 100644 --- a/src/SemanticScuttle/Model/Bookmark.php +++ b/src/SemanticScuttle/Model/Bookmark.php @@ -23,6 +23,23 @@ */ class SemanticScuttle_Model_Bookmark { + /** + * Status "public" / visible for all + */ + const SPUBLIC = 0; + + /** + * Status "shared" / visible for people on your watchlist + */ + const SWATCHLIST = 1; + + /** + * Status "private" / visible for yourself only + */ + const SPRIVATE = 2; + + + /** * Checks if the given URL is valid and may be used with this * SemanticScuttle installation. diff --git a/tests/TestBase.php b/tests/TestBase.php index 5ea656c..2180d2d 100644 --- a/tests/TestBase.php +++ b/tests/TestBase.php @@ -76,8 +76,8 @@ class TestBase extends PHPUnit_Framework_TestCase /** * Creates a new user in the database. * - * @param string $username Username - * @param string $password Password + * @param string $username Username, may be null + * @param string $password Password, may be null * @param mixed $privateKey String private key or boolean true to generate one * * @return integer ID of user @@ -95,8 +95,8 @@ class TestBase extends PHPUnit_Framework_TestCase /** * Creates a new user in the database and returns id, username and password. * - * @param string $username Username - * @param string $password Password + * @param string $username Username, may be null + * @param string $password Password, may be null * @param mixed $privateKey String private key or boolean true to generate one * * @return array ID of user, Name of user, password of user, privatekey diff --git a/tests/TestBaseApi.php b/tests/TestBaseApi.php index f860d10..1052ae7 100644 --- a/tests/TestBaseApi.php +++ b/tests/TestBaseApi.php @@ -187,8 +187,7 @@ class TestBaseApi extends TestBase * @uses getRequest() */ protected function getLoggedInRequest( - $urlSuffix = null, $auth = true, $privateKey = false, - $setCookie = true + $urlSuffix = null, $auth = true, $privateKey = null ) { if (is_array($auth)) { list($username, $password) = $auth; @@ -196,13 +195,7 @@ class TestBaseApi extends TestBase $username = 'testuser'; $password = 'testpassword'; } - //include privatekey if requested - if ($privateKey) { - $pKey = $this->us->getNewPrivateKey(); - } else { - $pKey = null; - } - $uid = $this->addUser($username, $password, $pKey); + $uid = $this->addUser($username, $password, $privateKey); $req = new HTTP_Request2( $GLOBALS['unittestUrl'] . '/login.php?unittestMode=1', @@ -218,9 +211,7 @@ class TestBaseApi extends TestBase $this->assertEquals(302, $res->getStatus(), 'Login failure'); $req = $this->getRequest($urlSuffix); - if ($setCookie) { - $req->setCookieJar($cookies); - } + $req->setCookieJar($cookies); return array($req, $uid); } diff --git a/tests/www/rssTest.php b/tests/www/rssTest.php index 9d4e41b..fc49264 100644 --- a/tests/www/rssTest.php +++ b/tests/www/rssTest.php @@ -7,44 +7,23 @@ class www_rssTest extends TestBaseApi protected $urlPart = 'rss.php'; /** - * Test a user who does not have RSS private key enabled - * and with a private bookmark. + * A private bookmark should not show up in an rss feed if the + * user is not logged in nor passes the private key */ - public function testNoRSSPrivateKeyEnabled() + public function testPrivateNotLoggedIn() { - $this->setUnittestConfig( - array('defaults' => array('privacy' => 2)) + list($uId, $username) = $this->addUserData(); + $this->addBookmark( + $uId, null, SemanticScuttle_Model_Bookmark::SPRIVATE ); - /* create user without RSS private Key */ - list($req, $uId) = $this->getLoggedInRequest(null, true, false, false); - - /* create private bookmark */ - $this->bs->addBookmark( - 'http://test', 'test', 'desc', 'note', - 2,//private - array(), null, null, false, false, $uId - ); - /* create public bookmark */ - $this->bs->addBookmark( - 'http://example.org', 'title', 'desc', 'priv', - 0,//public - array(), null, null, false, false, $uId - ); - - /* get user details */ - $user = $this->us->getUser($uId); - - $req->setMethod(HTTP_Request2::METHOD_POST); - $req->setUrl($this->getTestUrl('/' . $user['username'] . '?sort=date_desc')); - $response = $req->send(); - $response_body = $response->getBody(); + $req = $this->getRequest('/' . $username); + $response_body = $req->send()->getBody(); $rss = simplexml_load_string($response_body); $items = $rss->channel->item; - $this->assertEquals(1, count($items), 'Incorrect Number of RSS Items'); - $this->assertEquals('title', (string)$items[0]->title); + $this->assertEquals(0, count($items), 'I see a private bookmark'); }//end testNoRSSPrivateKeyEnabled @@ -54,38 +33,22 @@ class www_rssTest extends TestBaseApi */ public function testRSSPrivateKeyEnabled() { - $this->setUnittestConfig( - array('defaults' => array('privacy' => 2)) + list($uId, $username, $password, $privateKey) = $this->addUserData( + null, null, true ); - - /* create user with RSS private Key */ - list($req, $uId) = $this->getLoggedInRequest(null, true, false, true); - - /* create private bookmark */ - $this->bs->addBookmark( - 'http://test', 'test', 'desc', 'note', - 2,//private - array(), null, null, false, false, $uId + $this->addBookmark( + $uId, null, SemanticScuttle_Model_Bookmark::SPRIVATE, + null, 'private bookmark' ); - /* create public bookmark */ - $this->bs->addBookmark( - 'http://example.org', 'title', 'desc', 'priv', - 0,//public - array(), null, null, false, false, $uId - ); - - /* get user details */ - $user = $this->us->getUser($uId); - $req->setMethod(HTTP_Request2::METHOD_POST); - $req->setUrl($this->getTestUrl('/' . $user['username'] . '?sort=date_desc&privatekey=' . $user['privateKey'])); - $response = $req->send(); - $response_body = $response->getBody(); + $req = $this->getRequest('/' . $username . '?privatekey=' . $privateKey); + $response_body = $req->send()->getBody(); $rss = simplexml_load_string($response_body); $items = $rss->channel->item; - $this->assertEquals(2, count($items), 'Incorrect Number of RSS Items'); + $this->assertEquals(1, count($items), 'I miss the private bookmark'); + $this->assertEquals('private bookmark', (string)$items[0]->title); }//end testRSSPrivateKeyEnabled -- cgit v1.2.3-54-g00ecf From f2ac531f2646c34c107b92cd9ff1e2c1a12c9b39 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Mon, 27 Jun 2011 19:52:02 +0200 Subject: test that using the private key does not leave unwanted login cookies --- tests/www/rssTest.php | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/www/rssTest.php b/tests/www/rssTest.php index fc49264..d6891d6 100644 --- a/tests/www/rssTest.php +++ b/tests/www/rssTest.php @@ -24,14 +24,15 @@ class www_rssTest extends TestBaseApi $items = $rss->channel->item; $this->assertEquals(0, count($items), 'I see a private bookmark'); - }//end testNoRSSPrivateKeyEnabled + } + /** * Test a user who has RSS private key setup * with private bookmark. */ - public function testRSSPrivateKeyEnabled() + public function testPrivateWithPrivateKey() { list($uId, $username, $password, $privateKey) = $this->addUserData( null, null, true @@ -49,9 +50,43 @@ class www_rssTest extends TestBaseApi $this->assertEquals(1, count($items), 'I miss the private bookmark'); $this->assertEquals('private bookmark', (string)$items[0]->title); - }//end testRSSPrivateKeyEnabled + } + + + + /** + * Verify that fetching the feed with a private key + * does not keep you logged in + */ + public function testPrivatekeyDoesNotKeepLoggedYouIn() + { + list($uId, $username, $password, $privateKey) = $this->addUserData( + null, null, true + ); + $this->addBookmark( + $uId, null, SemanticScuttle_Model_Bookmark::SPRIVATE, + null, 'private bookmark' + ); + $req = $this->getRequest('/' . $username . '?privatekey=' . $privateKey); + $cookies = $req->setCookieJar()->getCookieJar(); + $response_body = $req->send()->getBody(); + + $rss = simplexml_load_string($response_body); + $items = $rss->channel->item; + + $this->assertEquals(1, count($items), 'I miss the private bookmark'); + $this->assertEquals('private bookmark', (string)$items[0]->title); + + //request the feed again, with the same cookies + $req = $this->getRequest('/' . $username); + $req->setCookieJar($cookies); + $response_body = $req->send()->getBody(); + $rss = simplexml_load_string($response_body); + $items = $rss->channel->item; + $this->assertEquals(0, count($items), 'I still see the private bookmark'); + } }//end class www_rssTest ?> -- cgit v1.2.3-54-g00ecf From 588d63a2c740335bb4ff7fbe7454fbe3876ea9c1 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Mon, 27 Jun 2011 19:59:06 +0200 Subject: better method names --- tests/www/rssTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/www/rssTest.php b/tests/www/rssTest.php index d6891d6..63c2b3d 100644 --- a/tests/www/rssTest.php +++ b/tests/www/rssTest.php @@ -10,7 +10,7 @@ class www_rssTest extends TestBaseApi * A private bookmark should not show up in an rss feed if the * user is not logged in nor passes the private key */ - public function testPrivateNotLoggedIn() + public function testPrivateBookmarkNotLoggedIn() { list($uId, $username) = $this->addUserData(); $this->addBookmark( @@ -32,7 +32,7 @@ class www_rssTest extends TestBaseApi * Test a user who has RSS private key setup * with private bookmark. */ - public function testPrivateWithPrivateKey() + public function testPrivateBookmarkWithPrivateKey() { list($uId, $username, $password, $privateKey) = $this->addUserData( null, null, true @@ -58,7 +58,7 @@ class www_rssTest extends TestBaseApi * Verify that fetching the feed with a private key * does not keep you logged in */ - public function testPrivatekeyDoesNotKeepLoggedYouIn() + public function testPrivateKeyDoesNotKeepLoggedYouIn() { list($uId, $username, $password, $privateKey) = $this->addUserData( null, null, true -- cgit v1.2.3-54-g00ecf From 57a5f6864d0241ab513b53a02c7e4ab9ebdeda0d Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Mon, 27 Jun 2011 20:04:03 +0200 Subject: add own assertion to make it easier to switch to atom --- tests/www/rssTest.php | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'tests') diff --git a/tests/www/rssTest.php b/tests/www/rssTest.php index 63c2b3d..477e98c 100644 --- a/tests/www/rssTest.php +++ b/tests/www/rssTest.php @@ -6,6 +6,23 @@ class www_rssTest extends TestBaseApi { protected $urlPart = 'rss.php'; + + /** + * Verifies that the given number of feed items exist in the feed + * XML tree. + * + * @var SimpleXMLElement $simpleXml RSS feed root element + * @var integer $nCount Number of expected feed items + * @var string $msg Error message + */ + protected function assertItemCount( + SimpleXMLElement $simpleXml, $nCount, $msg = null + ) { + $this->assertEquals($nCount, count($simpleXml->channel->item), $msg); + } + + + /** * A private bookmark should not show up in an rss feed if the * user is not logged in nor passes the private key @@ -21,9 +38,7 @@ class www_rssTest extends TestBaseApi $response_body = $req->send()->getBody(); $rss = simplexml_load_string($response_body); - $items = $rss->channel->item; - - $this->assertEquals(0, count($items), 'I see a private bookmark'); + $this->assertItemCount($rss, 0, 'I see a private bookmark'); } @@ -46,10 +61,10 @@ class www_rssTest extends TestBaseApi $response_body = $req->send()->getBody(); $rss = simplexml_load_string($response_body); - $items = $rss->channel->item; - - $this->assertEquals(1, count($items), 'I miss the private bookmark'); - $this->assertEquals('private bookmark', (string)$items[0]->title); + $this->assertItemCount($rss, 1, 'I miss the private bookmark'); + $this->assertEquals( + 'private bookmark', (string)$rss->channel->item[0]->title + ); } @@ -83,9 +98,7 @@ class www_rssTest extends TestBaseApi $req->setCookieJar($cookies); $response_body = $req->send()->getBody(); $rss = simplexml_load_string($response_body); - $items = $rss->channel->item; - - $this->assertEquals(0, count($items), 'I still see the private bookmark'); + $this->assertItemCount($rss, 0, 'I still see the private bookmark'); } }//end class www_rssTest -- cgit v1.2.3-54-g00ecf From 673fdc87582c2087beed8d33505213cbd83755cb Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Mon, 27 Jun 2011 21:55:07 +0200 Subject: rename methods to keep them clear --- tests/www/rssTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/www/rssTest.php b/tests/www/rssTest.php index 477e98c..4fab479 100644 --- a/tests/www/rssTest.php +++ b/tests/www/rssTest.php @@ -27,7 +27,7 @@ class www_rssTest extends TestBaseApi * A private bookmark should not show up in an rss feed if the * user is not logged in nor passes the private key */ - public function testPrivateBookmarkNotLoggedIn() + public function testUserPrivateBookmarkNotLoggedIn() { list($uId, $username) = $this->addUserData(); $this->addBookmark( @@ -47,7 +47,7 @@ class www_rssTest extends TestBaseApi * Test a user who has RSS private key setup * with private bookmark. */ - public function testPrivateBookmarkWithPrivateKey() + public function testUserPrivateBookmarkWithPrivateKey() { list($uId, $username, $password, $privateKey) = $this->addUserData( null, null, true @@ -73,7 +73,7 @@ class www_rssTest extends TestBaseApi * Verify that fetching the feed with a private key * does not keep you logged in */ - public function testPrivateKeyDoesNotKeepLoggedYouIn() + public function testUserPrivateKeyDoesNotKeepLoggedYouIn() { list($uId, $username, $password, $privateKey) = $this->addUserData( null, null, true -- cgit v1.2.3-54-g00ecf From 763d394436dc632bf18bff8876af22be9b44e9f4 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Mon, 27 Jun 2011 22:27:17 +0200 Subject: test global feed with private bookmarks --- tests/www/rssTest.php | 52 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/www/rssTest.php b/tests/www/rssTest.php index 4fab479..75e4363 100644 --- a/tests/www/rssTest.php +++ b/tests/www/rssTest.php @@ -23,8 +23,29 @@ class www_rssTest extends TestBaseApi + /** - * A private bookmark should not show up in an rss feed if the + * A private bookmark should not show up in the global rss feed if the + * user is not logged in nor passes the private key + */ + public function testAllPrivateBookmarkNotLoggedIn() + { + list($uId, $username) = $this->addUserData(); + $this->addBookmark( + $uId, null, SemanticScuttle_Model_Bookmark::SPRIVATE + ); + + $req = $this->getRequest(); + $response_body = $req->send()->getBody(); + + $rss = simplexml_load_string($response_body); + $this->assertItemCount($rss, 0, 'I see a private bookmark'); + } + + + + /** + * A private bookmark should not show up in the user's rss feed if the * user is not logged in nor passes the private key */ public function testUserPrivateBookmarkNotLoggedIn() @@ -43,9 +64,34 @@ class www_rssTest extends TestBaseApi + + /** + * Test the global feed by passing the private key + */ + public function testAllPrivateBookmarkWithPrivateKey() + { + list($uId, $username, $password, $privateKey) = $this->addUserData( + null, null, true + ); + $this->addBookmark( + $uId, null, SemanticScuttle_Model_Bookmark::SPRIVATE, + null, 'private bookmark' + ); + + $req = $this->getRequest('?privatekey=' . $privateKey); + $response_body = $req->send()->getBody(); + + $rss = simplexml_load_string($response_body); + $this->assertItemCount($rss, 1, 'I miss the private bookmark'); + $this->assertEquals( + 'private bookmark', (string)$rss->channel->item[0]->title + ); + } + + + /** - * Test a user who has RSS private key setup - * with private bookmark. + * Test the user feed by passing the private key */ public function testUserPrivateBookmarkWithPrivateKey() { -- cgit v1.2.3-54-g00ecf From 3d11286cbcc3cb35efe11f6e4a4ef5ac81620bda Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Mon, 27 Jun 2011 22:31:24 +0200 Subject: privatekey -> privateKey everywhere --- src/SemanticScuttle/Service/User.php | 20 ++++++++++---------- tests/TestBase.php | 2 +- tests/UserTest.php | 24 ++++++++++++------------ tests/www/bookmarksTest.php | 4 ++-- tests/www/indexTest.php | 4 ++-- tests/www/rssTest.php | 6 +++--- www/bookmarks.php | 2 +- www/index.php | 2 +- www/rss.php | 16 ++++++++-------- www/tags.php | 2 +- 10 files changed, 41 insertions(+), 41 deletions(-) (limited to 'tests') diff --git a/src/SemanticScuttle/Service/User.php b/src/SemanticScuttle/Service/User.php index b5b053f..7550ed2 100644 --- a/src/SemanticScuttle/Service/User.php +++ b/src/SemanticScuttle/Service/User.php @@ -51,7 +51,7 @@ class SemanticScuttle_Service_User extends SemanticScuttle_DbService 'primary' => 'uId', 'username' => 'username', 'password' => 'password', - 'privatekey' => 'privatekey' + 'privateKey' => 'privateKey' ); protected $profileurl; @@ -219,13 +219,13 @@ class SemanticScuttle_Service_User extends SemanticScuttle_DbService /** * Returns user row from database. * - * @param string $privatekey Private Key + * @param string $privateKey Private Key * * @return array User array from database, false if no user was found */ - public function getUserByPrivateKey($privatekey) + public function getUserByPrivateKey($privateKey) { - return $this->_getuser($this->getFieldName('privatekey'), $privatekey); + return $this->_getuser($this->getFieldName('privateKey'), $privateKey); } function getObjectUserByUsername($username) { @@ -539,24 +539,24 @@ class SemanticScuttle_Service_User extends SemanticScuttle_DbService } /** - * Try to authenticate via the privatekey + * Try to authenticate via the privateKey * - * @param string $privatekey Private Key + * @param string $privateKey Private Key * * @return boolean true if the user could be authenticated, * false if not. */ - public function loginPrivateKey($privatekey) + public function loginPrivateKey($privateKey) { /* Check if private key valid and enabled */ - if (!$this->isPrivateKeyValid($privatekey)) { + if (!$this->isPrivateKeyValid($privateKey)) { return false; } $query = 'SELECT '. $this->getFieldName('primary') .' FROM ' . $this->getTableName() .' WHERE ' - . $this->getFieldName('privatekey') .' = "' - . $this->db->sql_escape($privatekey) .'"'; + . $this->getFieldName('privateKey') .' = "' + . $this->db->sql_escape($privateKey) .'"'; if (!($dbresult = $this->db->sql_query($query))) { message_die( diff --git a/tests/TestBase.php b/tests/TestBase.php index 2180d2d..2914749 100644 --- a/tests/TestBase.php +++ b/tests/TestBase.php @@ -99,7 +99,7 @@ class TestBase extends PHPUnit_Framework_TestCase * @param string $password Password, may be null * @param mixed $privateKey String private key or boolean true to generate one * - * @return array ID of user, Name of user, password of user, privatekey + * @return array ID of user, Name of user, password of user, privateKey */ protected function addUserData( $username = null, $password = null, $privateKey = null diff --git a/tests/UserTest.php b/tests/UserTest.php index 230167d..6cd6786 100644 --- a/tests/UserTest.php +++ b/tests/UserTest.php @@ -40,7 +40,7 @@ class UserTest extends TestBase public function testAddUserPrivateKey() { $name = substr(md5(uniqid()), 0, 6); - $pkey = 'my-privatekey'; + $pkey = 'my-privateKey'; $id = $this->us->addUser( $name, uniqid(), 'foo@example.org', $pkey ); @@ -413,17 +413,17 @@ class UserTest extends TestBase $randKey2 = '-'.$this->us->getNewPrivateKey(); $this->assertFalse( $this->us->isPrivateKeyValid($randKey2), - 'disabled privatekey should return false' + 'disabled privateKey should return false' ); } public function testLoginPrivateKeyInvalid() { - /* normal user with enabled privatekey */ + /* normal user with enabled privateKey */ $randKey = $this->us->getNewPrivateKey(); $uid1 = $this->addUser('testusername', 'passw0rd', $randKey); - /* user that has disabled privatekey */ + /* user that has disabled privateKey */ $randKey2 = '-'.$this->us->getNewPrivateKey(); $uid2 = $this->addUser('seconduser', 'passw0RD', $randKey2); @@ -436,10 +436,10 @@ class UserTest extends TestBase public function testLoginPrivateKeyValidEnabledKey() { - /* normal user with enabled privatekey */ + /* normal user with enabled privateKey */ $randKey = $this->us->getNewPrivateKey(); $uid1 = $this->addUser('testusername', 'passw0rd', $randKey); - /* user that has disabled privatekey */ + /* user that has disabled privateKey */ $randKey2 = '-'.$this->us->getNewPrivateKey(); $uid2 = $this->addUser('seconduser', 'passw0RD', $randKey2); @@ -453,10 +453,10 @@ class UserTest extends TestBase public function testLoginPrivateKeyInvalidEnabledKey() { - /* normal user with enabled privatekey */ + /* normal user with enabled privateKey */ $randKey = $this->us->getNewPrivateKey(); $uid1 = $this->addUser('testusername', 'passw0rd', $randKey); - /* user that has disabled privatekey */ + /* user that has disabled privateKey */ $randKey2 = '-'.$this->us->getNewPrivateKey(); $uid2 = $this->addUser('seconduser', 'passw0RD', $randKey2); @@ -470,10 +470,10 @@ class UserTest extends TestBase public function testLoginPrivateKeyValidDisabledKey() { - /* normal user with enabled privatekey */ + /* normal user with enabled privateKey */ $randKey = $this->us->getNewPrivateKey(); $uid1 = $this->addUser('testusername', 'passw0rd', $randKey); - /* user that has disabled privatekey */ + /* user that has disabled privateKey */ $randKey2 = '-'.$this->us->getNewPrivateKey(); $uid2 = $this->addUser('seconduser', 'passw0RD', $randKey2); @@ -491,10 +491,10 @@ class UserTest extends TestBase public function testLoginPrivateKeyInvalidDisabled() { - /* normal user with enabled privatekey */ + /* normal user with enabled privateKey */ $randKey = $this->us->getNewPrivateKey(); $uid1 = $this->addUser('testusername', 'passw0rd', $randKey); - /* user that has disabled privatekey */ + /* user that has disabled privateKey */ $randKey2 = '-'.$this->us->getNewPrivateKey(); $uid2 = $this->addUser('seconduser', 'passw0RD', $randKey2); diff --git a/tests/www/bookmarksTest.php b/tests/www/bookmarksTest.php index 1e1f4eb..ae82118 100755 --- a/tests/www/bookmarksTest.php +++ b/tests/www/bookmarksTest.php @@ -92,7 +92,7 @@ class www_bookmarksTest extends TestBaseApi $this->assertEquals( 2, count($elements), 'Number of Links in Head not correct' ); - $this->assertContains('privatekey=', (string)$elements[1]['href']); + $this->assertContains('privateKey=', (string)$elements[1]['href']); }//end testVerifyPrivateRSSLinkExists @@ -121,7 +121,7 @@ class www_bookmarksTest extends TestBaseApi $this->assertEquals( 1, count($elements), 'Number of Links in Head not correct' ); - $this->assertNotContains('privatekey=', (string)$elements[0]['href']); + $this->assertNotContains('privateKey=', (string)$elements[0]['href']); }//end testVerifyPrivateRSSLinkDoesNotExist }//end class www_bookmarksTest diff --git a/tests/www/indexTest.php b/tests/www/indexTest.php index 18cb75a..503fd1f 100644 --- a/tests/www/indexTest.php +++ b/tests/www/indexTest.php @@ -26,7 +26,7 @@ class www_indexTest extends TestBaseApi $elements = $x->xpath('//ns:link[@rel="alternate" and @type="application/rss+xml"]'); $this->assertEquals(2, count($elements), 'Number of Links in Head not correct'); - $this->assertContains('privatekey=', (string)$elements[1]['href']); + $this->assertContains('privateKey=', (string)$elements[1]['href']); }//end testVerifyPrivateRSSLinkExists @@ -50,7 +50,7 @@ class www_indexTest extends TestBaseApi $elements = $x->xpath('//ns:link[@rel="alternate" and @type="application/rss+xml"]'); $this->assertEquals(1, count($elements), 'Number of Links in Head not correct'); - $this->assertNotContains('privatekey=', (string)$elements[0]['href']); + $this->assertNotContains('privateKey=', (string)$elements[0]['href']); }//end testVerifyPrivateRSSLinkDoesNotExist diff --git a/tests/www/rssTest.php b/tests/www/rssTest.php index 75e4363..71d0198 100644 --- a/tests/www/rssTest.php +++ b/tests/www/rssTest.php @@ -78,7 +78,7 @@ class www_rssTest extends TestBaseApi null, 'private bookmark' ); - $req = $this->getRequest('?privatekey=' . $privateKey); + $req = $this->getRequest('?privateKey=' . $privateKey); $response_body = $req->send()->getBody(); $rss = simplexml_load_string($response_body); @@ -103,7 +103,7 @@ class www_rssTest extends TestBaseApi null, 'private bookmark' ); - $req = $this->getRequest('/' . $username . '?privatekey=' . $privateKey); + $req = $this->getRequest('/' . $username . '?privateKey=' . $privateKey); $response_body = $req->send()->getBody(); $rss = simplexml_load_string($response_body); @@ -129,7 +129,7 @@ class www_rssTest extends TestBaseApi null, 'private bookmark' ); - $req = $this->getRequest('/' . $username . '?privatekey=' . $privateKey); + $req = $this->getRequest('/' . $username . '?privateKey=' . $privateKey); $cookies = $req->setCookieJar()->getCookieJar(); $response_body = $req->send()->getBody(); diff --git a/www/bookmarks.php b/www/bookmarks.php index 44119db..7056fa6 100644 --- a/www/bookmarks.php +++ b/www/bookmarks.php @@ -276,7 +276,7 @@ if ($templatename == 'editbookmark.tpl') { $tplVars['rsschannels'], array( filter($sitename . $rssTitle. sprintf(T_(': (private) ')) . $currentUsername), - createURL('rss', filter($currentUsername, 'url') . '?sort='.getSortOrder().'&privatekey='.$currentUser->getPrivateKey()) + createURL('rss', filter($currentUsername, 'url') . '?sort='.getSortOrder().'&privateKey='.$currentUser->getPrivateKey()) ) ); } diff --git a/www/index.php b/www/index.php index 2fa21f8..f270f73 100644 --- a/www/index.php +++ b/www/index.php @@ -52,7 +52,7 @@ if ($userservice->isLoggedOn()) { $tplVars['rsschannels'], array( filter(sprintf(T_('%s: Recent bookmarks (+private) %s'), $sitename, $currentUsername)), - createURL('rss', filter($currentUsername, 'url') . '?sort='.getSortOrder().'&privatekey='.$currentUser->getPrivateKey()) + createURL('rss', filter($currentUsername, 'url') . '?sort='.getSortOrder().'&privateKey='.$currentUser->getPrivateKey()) ) ); } diff --git a/www/rss.php b/www/rss.php index b8f6948..d888726 100644 --- a/www/rss.php +++ b/www/rss.php @@ -64,9 +64,9 @@ if (!isset($rssEntries) || $rssEntries <= 0) { $rssEntries = $maxRssEntries; } -$privatekey = null; -if (isset($_GET['privatekey'])) { - $privatekey = $_GET['privatekey']; +$privateKey = null; +if (isset($_GET['privateKey'])) { + $privateKey = $_GET['privateKey']; } $userid = null; @@ -83,10 +83,10 @@ if ($user && $user != 'all') { } else { if ($userinfo = $userservice->getUserByUsername($user)) { $userid =& $userinfo[$userservice->getFieldName('primary')]; - /* if user is not logged in and has valid privatekey */ + /* if user is not logged in and has valid privateKey */ if (!$userservice->isLoggedOn()) { - if ($privatekey != null) { - if (!$userservice->loginPrivateKey($privatekey)) { + if ($privateKey != null) { + if (!$userservice->loginPrivateKey($privateKey)) { $tplVars['error'] = sprintf(T_('Failed to Autenticate User with username %s using private key'), $user); header('Content-type: text/html; charset=utf-8'); $templateservice->loadTemplate('error.404.tpl', $tplVars); @@ -106,8 +106,8 @@ if ($user && $user != 'all') { } $pagetitle .= ": ". $user; } else { - if ($privatekey != null) { - if (!$userservice->loginPrivateKey($privatekey)) { + if ($privateKey != null) { + if (!$userservice->loginPrivateKey($privateKey)) { $tplVars['error'] = sprintf(T_('Failed to Autenticate User with username %s using private key'), $user); header('Content-type: text/html; charset=utf-8'); $templateservice->loadTemplate('error.404.tpl', $tplVars); diff --git a/www/tags.php b/www/tags.php index 09725e4..fca8a04 100644 --- a/www/tags.php +++ b/www/tags.php @@ -77,7 +77,7 @@ if ($userservice->isLoggedOn()) { $tplVars['rsschannels'], array( filter($sitename .': Tags: '. $cat . sprintf(T_(': (private) ')) . $currentUsername), - createURL('rss', filter($currentUsername, 'url') . '?sort='.getSortOrder().'&privatekey='.$currentUser->getPrivateKey()) + createURL('rss', filter($currentUsername, 'url') . '?sort='.getSortOrder().'&privateKey='.$currentUser->getPrivateKey()) ) ); } -- cgit v1.2.3-54-g00ecf From 82ee59779ea9a5d2d9234e622f56cfcc4c22ff3a Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Thu, 21 Jul 2011 21:32:48 +0200 Subject: support global and per-host configuration files --- src/SemanticScuttle/Config.php | 109 ++++++++++++++++++ src/SemanticScuttle/header.php | 17 ++- tests/SemanticScuttle/ConfigTest.php | 206 +++++++++++++++++++++++++++++++++++ 3 files changed, 329 insertions(+), 3 deletions(-) create mode 100644 src/SemanticScuttle/Config.php create mode 100644 tests/SemanticScuttle/ConfigTest.php (limited to 'tests') diff --git a/src/SemanticScuttle/Config.php b/src/SemanticScuttle/Config.php new file mode 100644 index 0000000..0773310 --- /dev/null +++ b/src/SemanticScuttle/Config.php @@ -0,0 +1,109 @@ + + * @license AGPL http://www.gnu.org/licenses/agpl.html + * @link http://sourceforge.net/projects/semanticscuttle + */ + +/** + * Configuration handling + * + * @category Bookmarking + * @package SemanticScuttle + * @author Christian Weiske + * @license AGPL http://www.gnu.org/licenses/agpl.html + * @link http://sourceforge.net/projects/semanticscuttle + */ +class SemanticScuttle_Config +{ + /** + * Prefix for configuration files. + * Used to inject stream wrapper protocol for unit testing + * + * @var string + */ + public $filePrefix = ''; + + + + /** + * Finds the correct data directory + * + * @return string Full path to the data directory with a trailing slash + */ + protected function getDataDir() + { + if ('@data_dir@' == '@' . 'data_dir@') { + //non pear-install + $datadir = dirname(__FILE__) . '/../../data/'; + } else { + //pear installation; files are in include path + $datadir = '@data_dir@/SemanticScuttle/'; + } + + return $datadir; + } + + + + /** + * Tries to find a configuration file by looking in different + * places: + * - pear data_dir/SemanticScuttle/config-$hostname.php + * - pear data_dir/SemanticScuttle/config.php + * - /etc/semanticscuttle/config-$hostname.php + * - /etc/semanticscuttle/config.php + * + * Paths with host name have priority. + * + * @return array Array with config file path as first value + * and default config file path as second value. + * Any may be NULL if not found + */ + public function findFiles() + { + //use basename to prevent path injection + $host = basename($_SERVER['HTTP_HOST']); + $datadir = $this->getDataDir(); + + $arFiles = array( + $datadir . 'config.' . $host . '.php', + '/etc/semanticscuttle/config.' . $host . '.php', + $datadir . 'config.php', + '/etc/semanticscuttle/config.php', + ); + + $configfile = null; + foreach ($arFiles as $file) { + if (file_exists($this->filePrefix . $file)) { + $configfile = $file; + break; + } + } + + //find default file + $arDefaultFiles = array_unique( + array( + substr($configfile, 0, -3) . 'default.php', + $datadir . 'config.default.php', + '/etc/semanticscuttle/config.default.php', + ) + ); + $defaultfile = null; + foreach ($arDefaultFiles as $file) { + if (file_exists($this->filePrefix . $file)) { + $defaultfile = $file; + break; + } + } + return array($configfile, $defaultfile); + } +} + +?> \ No newline at end of file diff --git a/src/SemanticScuttle/header.php b/src/SemanticScuttle/header.php index 6c0d4df..9252300 100644 --- a/src/SemanticScuttle/header.php +++ b/src/SemanticScuttle/header.php @@ -25,8 +25,19 @@ if ('@data_dir@' == '@' . 'data_dir@') { //FIXME: when you have multiple installations, the www_dir will be wrong $wwwdir = '@www_dir@/SemanticScuttle/'; } +require_once dirname(__FILE__) . '/Config.php'; -if (!file_exists($datadir . '/config.php')) { +$cfg = new SemanticScuttle_Config(); +list($configfile, $defaultfile) = $cfg->findFiles(); +if ($defaultfile === null) { + header('HTTP/1.0 500 Internal Server Error'); + die( + 'No default configuration file config.default.php found.' + . ' This is really, really strange' + . "\n" + ); +} +if ($configfile === null) { header('HTTP/1.0 500 Internal Server Error'); die( 'Please copy "config.php.dist" to "config.php" in data/ folder.' @@ -39,8 +50,8 @@ set_include_path( ); // 1 // First requirements part (before debug management) -require_once $datadir . '/config.default.php'; -require_once $datadir . '/config.php'; +require_once $defaultfile; +require_once $configfile; if (isset($_GET['unittestMode']) && $_GET['unittestMode'] == 1 ) { diff --git a/tests/SemanticScuttle/ConfigTest.php b/tests/SemanticScuttle/ConfigTest.php new file mode 100644 index 0000000..670f82a --- /dev/null +++ b/tests/SemanticScuttle/ConfigTest.php @@ -0,0 +1,206 @@ +_setPointer($scope, $varpath)) { + return false; + } + + return parent::url_stat($path, $flags); + } +} + +class SemanticScuttle_ConfigTest extends PHPUnit_Framework_TestCase +{ + /** + * Configuration object to test + */ + protected $cfg; + + + public function setUpWrapper() + { + if (!in_array('unittest', stream_get_wrappers())) { + stream_wrapper_register( + 'unittest', 'SemanticScuttle_ConfigTest_StreamVar' + ); + } + + $this->cfg = $this->getMock( + 'SemanticScuttle_Config', + array('getDataDir') + ); + $this->cfg->expects($this->once()) + ->method('getDataDir') + ->will($this->returnValue('/data-dir/')); + + $this->cfg->filePrefix = 'unittest://GLOBALS/unittest-dir'; + } + + + + public function testFindLocalData() + { + $this->setUpWrapper(); + $GLOBALS['unittest-dir']['data-dir'] = array( + 'config.php' => 'content', + 'config.default.php' => 'content' + ); + $this->assertEquals( + array( + '/data-dir/config.php', + '/data-dir/config.default.php' + ), + $this->cfg->findFiles() + ); + } + + public function testFindHostPreferredOverNonHostConfig() + { + $this->setUpWrapper(); + $_SERVER['HTTP_HOST'] = 'foo.example.org'; + + $GLOBALS['unittest-dir']['data-dir'] = array( + 'config.php' => 'content', + 'config.foo.example.org.php' => 'content', + 'config.default.php' => 'content' + ); + $this->assertEquals( + array( + '/data-dir/config.foo.example.org.php', + '/data-dir/config.default.php' + ), + $this->cfg->findFiles() + ); + } + + public function testFindEtcHostPreferredOverLocalConfigPhp() + { + $this->setUpWrapper(); + $_SERVER['HTTP_HOST'] = 'foo.example.org'; + + $GLOBALS['unittest-dir'] = array( + 'etc' => array( + 'semanticscuttle' => array( + 'config.foo.example.org.php' => 'content', + ) + ), + 'data-dir' => array( + 'config.php' => 'content', + 'config.default.php' => 'content' + ) + ); + + $this->assertEquals( + array( + '/etc/semanticscuttle/config.foo.example.org.php', + '/data-dir/config.default.php' + ), + $this->cfg->findFiles() + ); + } + + public function testFindEtcConfig() + { + $this->setUpWrapper(); + $GLOBALS['unittest-dir'] = array( + 'etc' => array( + 'semanticscuttle' => array( + 'config.php' => 'content' + ) + ), + 'data-dir' => array( + 'config.default.php' => 'content' + ) + ); + $this->assertEquals( + array( + '/etc/semanticscuttle/config.php', + '/data-dir/config.default.php' + ), + $this->cfg->findFiles() + ); + } + + public function testFindEtcDefaultConfig() + { + $this->setUpWrapper(); + $GLOBALS['unittest-dir'] = array( + 'etc' => array( + 'semanticscuttle' => array( + 'config.php' => 'content', + 'config.default.php' => 'content' + ) + ), + ); + $this->assertEquals( + array( + '/etc/semanticscuttle/config.php', + '/etc/semanticscuttle/config.default.php' + ), + $this->cfg->findFiles() + ); + } + + public function testFindLocalDefaultPreferredOverEtcDefault() + { + $this->setUpWrapper(); + $GLOBALS['unittest-dir'] = array( + 'etc' => array( + 'semanticscuttle' => array( + 'config.php' => 'content', + 'config.default.php' => 'content' + ) + ), + 'data-dir' => array( + 'config.php' => 'content', + 'config.default.php' => 'content' + ) + ); + $this->assertEquals( + array( + '/data-dir/config.php', + '/data-dir/config.default.php' + ), + $this->cfg->findFiles() + ); + } + + public function testFindSameDirDefaultPreferred() + { + $this->setUpWrapper(); + $GLOBALS['unittest-dir'] = array( + 'etc' => array( + 'semanticscuttle' => array( + 'config.php' => 'content', + 'config.default.php' => 'content' + ) + ), + 'data-dir' => array( + 'config.default.php' => 'content' + ) + ); + $this->assertEquals( + array( + '/etc/semanticscuttle/config.php', + '/etc/semanticscuttle/config.default.php' + ), + $this->cfg->findFiles() + ); + } + +} + +?> \ No newline at end of file -- cgit v1.2.3-54-g00ecf From 320d6733442faffae9b68307655bf4292bb1f94d Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Sat, 23 Jul 2011 14:19:09 +0200 Subject: Fix bug #3160512: Make SemantiScuttle work with FastCGI --- doc/ChangeLog | 1 + src/SemanticScuttle/Environment.php | 52 +++++++++++++++++ src/SemanticScuttle/constants.php | 14 +---- src/SemanticScuttle/header.php | 1 + tests/SemanticScuttle/EnvironmentTest.php | 95 +++++++++++++++++++++++++++++++ 5 files changed, 151 insertions(+), 12 deletions(-) create mode 100644 src/SemanticScuttle/Environment.php create mode 100644 tests/SemanticScuttle/EnvironmentTest.php (limited to 'tests') diff --git a/doc/ChangeLog b/doc/ChangeLog index 229db55..fc8c718 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -7,6 +7,7 @@ ChangeLog for SemantiScuttle ------------------- - Fix bug #3375635: XML parsing problem in top.inc.php - Fix bug #3375428: Forgot to remove some old dojo files +- Fix bug #3160512: Make SemantiScuttle work with FastCGI 0.98.0 - 2011-07-21 diff --git a/src/SemanticScuttle/Environment.php b/src/SemanticScuttle/Environment.php new file mode 100644 index 0000000..e5fe3de --- /dev/null +++ b/src/SemanticScuttle/Environment.php @@ -0,0 +1,52 @@ + + * @license AGPL http://www.gnu.org/licenses/agpl.html + * @link http://sourceforge.net/projects/semanticscuttle + */ + +/** + * Server environment handling methods + * + * @category Bookmarking + * @package SemanticScuttle + * @author Christian Weiske + * @license AGPL http://www.gnu.org/licenses/agpl.html + * @link http://sourceforge.net/projects/semanticscuttle + */ +class SemanticScuttle_Environment +{ + /** + * Determines the correct $_SERVER['PATH_INFO'] value + * + * @return string New value + */ + public static function getServerPathInfo() + { + /* old code that does not work today. + if you find that this code helps you, tell us + and send us the output of var_export($_SERVER); + // Correct bugs with PATH_INFO (maybe for Apache 1 or CGI) -- for 1&1 host... + if (isset($_SERVER['PATH_INFO']) && isset($_SERVER['ORIG_PATH_INFO'])) { + if (strlen($_SERVER["PATH_INFO"]) \ No newline at end of file diff --git a/src/SemanticScuttle/constants.php b/src/SemanticScuttle/constants.php index 11ab0da..fcb2d90 100644 --- a/src/SemanticScuttle/constants.php +++ b/src/SemanticScuttle/constants.php @@ -69,16 +69,6 @@ define('PAGE_WATCHLIST', "watchlist"); // installations on the same host server define('INSTALLATION_ID', md5($GLOBALS['dbname'].$GLOBALS['tableprefix'])); -// Correct bugs with PATH_INFO (maybe for Apache 1 or CGI) -- for 1&1 host... -if (isset($_SERVER['PATH_INFO']) && isset($_SERVER['ORIG_PATH_INFO'])) { - if (strlen($_SERVER["PATH_INFO"]) diff --git a/src/SemanticScuttle/header.php b/src/SemanticScuttle/header.php index 9252300..694df54 100644 --- a/src/SemanticScuttle/header.php +++ b/src/SemanticScuttle/header.php @@ -25,6 +25,7 @@ if ('@data_dir@' == '@' . 'data_dir@') { //FIXME: when you have multiple installations, the www_dir will be wrong $wwwdir = '@www_dir@/SemanticScuttle/'; } +require_once dirname(__FILE__) . '/Environment.php'; require_once dirname(__FILE__) . '/Config.php'; $cfg = new SemanticScuttle_Config(); diff --git a/tests/SemanticScuttle/EnvironmentTest.php b/tests/SemanticScuttle/EnvironmentTest.php new file mode 100644 index 0000000..a41efa1 --- /dev/null +++ b/tests/SemanticScuttle/EnvironmentTest.php @@ -0,0 +1,95 @@ + 'Opera/9.80 (X11; Linux x86_64; U; de) Presto/2.9.168 Version/11.50', + 'HTTP_HOST' => 'bm-cgi.bogo', + 'HTTP_ACCEPT' => 'text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1', + 'HTTP_ACCEPT_LANGUAGE' => 'de-DE,de;q=0.9,en;q=0.8', + 'HTTP_ACCEPT_ENCODING' => 'gzip, deflate', + 'HTTP_COOKIE' => 'PHPSESSID=ga446jhs0e09hkt60u9bsmp0n0', + 'HTTP_CACHE_CONTROL' => 'no-cache', + 'HTTP_CONNECTION' => 'Keep-Alive', + 'PATH' => '/usr/local/bin:/usr/bin:/bin', + 'SERVER_SIGNATURE' => '
Apache/2.2.17 (Ubuntu) Server at bm-cgi.bogo Port 80
', + 'SERVER_SOFTWARE' => 'Apache/2.2.17 (Ubuntu)', + 'SERVER_NAME' => 'bm-cgi.bogo', + 'SERVER_ADDR' => '127.0.0.1', + 'SERVER_PORT' => '80', + 'REMOTE_ADDR' => '127.0.0.1', + 'DOCUMENT_ROOT' => '/etc/apache2/htdocs', + 'SERVER_ADMIN' => '[no address given]', + 'SCRIPT_FILENAME' => '/home/cweiske/Dev/html/hosts/bm-cgi.bogo/profile.php', + 'REMOTE_PORT' => '45349', + 'GATEWAY_INTERFACE' => 'CGI/1.1', + 'SERVER_PROTOCOL' => 'HTTP/1.1', + 'REQUEST_METHOD' => 'GET', + 'QUERY_STRING' => '', + 'REQUEST_URI' => '/profile.php/dummy', + 'SCRIPT_NAME' => '/profile.php', + 'PATH_INFO' => '/dummy', + 'PATH_TRANSLATED' => '/home/cweiske/Dev/html/hosts/bm-cgi.bogo/dummy', + 'PHP_SELF' => '/profile.php/dummy', + 'REQUEST_TIME' => 1311422546, + ); + $this->assertEquals( + '/dummy', SemanticScuttle_Environment::getServerPathInfo() + ); + } + + + public function testServerPathInfoFastCgi() + { + $_SERVER = array( + 'PHP_FCGI_MAX_REQUESTS' => '5000', + 'PHPRC' => '/etc/php5/cgi/5.3.6/', + 'PHP_FCGI_CHILDREN' => '3', + 'PWD' => '/var/www/cgi-bin', + 'FCGI_ROLE' => 'RESPONDER', + 'REDIRECT_HANDLER' => 'php-cgi', + 'REDIRECT_STATUS' => '200', + 'HTTP_USER_AGENT' => 'Opera/9.80 (X11; Linux x86_64; U; de) Presto/2.9.168 Version/11.50', + 'HTTP_HOST' => 'bm-cgi.bogo', + 'HTTP_ACCEPT' => 'text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1', + 'HTTP_ACCEPT_LANGUAGE' => 'de-DE,de;q=0.9,en;q=0.8', + 'HTTP_ACCEPT_ENCODING' => 'gzip, deflate', + 'HTTP_COOKIE' => 'PHPSESSID=ga446jhs0e09hkt60u9bsmp0n0', + 'HTTP_CONNECTION' => 'Keep-Alive', + 'PATH' => '/usr/local/bin:/usr/bin:/bin', + 'SERVER_SIGNATURE' => '
Apache/2.2.17 (Ubuntu) Server at bm-cgi.bogo Port 80
', + 'SERVER_SOFTWARE' => 'Apache/2.2.17 (Ubuntu)', + 'SERVER_NAME' => 'bm-cgi.bogo', + 'SERVER_ADDR' => '127.0.0.1', + 'SERVER_PORT' => '80', + 'REMOTE_ADDR' => '127.0.0.1', + 'DOCUMENT_ROOT' => '/etc/apache2/htdocs', + 'SERVER_ADMIN' => '[no address given]', + 'SCRIPT_FILENAME' => '/home/cweiske/Dev/html/hosts/bm-cgi.bogo/profile.php', + 'REMOTE_PORT' => '45342', + 'REDIRECT_URL' => '/profile.php/dummy', + 'GATEWAY_INTERFACE' => 'CGI/1.1', + 'SERVER_PROTOCOL' => 'HTTP/1.1', + 'REQUEST_METHOD' => 'GET', + 'QUERY_STRING' => '', + 'REQUEST_URI' => '/profile.php/dummy', + 'SCRIPT_NAME' => '/profile.php', + 'PATH_INFO' => '/dummy', + 'PATH_TRANSLATED' => '/etc/apache2/htdocs/dummy', + 'ORIG_PATH_INFO' => '/profile.php/dummy', + 'ORIG_SCRIPT_NAME' => '/cgi-bin-php/php-cgi-5.3.6', + 'ORIG_SCRIPT_FILENAME' => '/var/www/cgi-bin/php-cgi-5.3.6', + 'ORIG_PATH_TRANSLATED' => '/home/cweiske/Dev/html/hosts/bm-cgi.bogo/profile.php/dummy', + 'PHP_SELF' => '/profile.php/dummy', + 'REQUEST_TIME' => 1311422521, + ); + $this->assertEquals( + '/dummy', SemanticScuttle_Environment::getServerPathInfo() + ); + } + +} + +?> \ No newline at end of file -- cgit v1.2.3-54-g00ecf