diff --git a/.gitignore b/.gitignore
index c8531b7..e512e0c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@ dist/
build.properties
package.xml
semanticscuttle-dump.sql
+data/config.unittest.php
diff --git a/data/config.default.php b/data/config.default.php
index b2c7307..8c47e0b 100644
--- a/data/config.default.php
+++ b/data/config.default.php
@@ -14,6 +14,13 @@
* @link http://sourceforge.net/projects/semanticscuttle/
*/
+/**
+ * Array for defaults.
+ *
+ * @var array
+ */
+$defaults = array();
+
/***************************************************
* HTML output configuration
@@ -508,6 +515,16 @@ $votingMode = 2;
*/
$hideBelowVoting = null;
+/**
+ * Default privacy setting for bookmarks:
+ * 0 - Public
+ * 1 - Shared with Watchlist
+ * 2 - Private
+ *
+ * @var integer
+ */
+$defaults['privacy'] = 0;
+
/****************************
* Website Thumbnails
diff --git a/data/config.php.dist b/data/config.php.dist
index c135e8e..302d55f 100644
--- a/data/config.php.dist
+++ b/data/config.php.dist
@@ -7,6 +7,7 @@
* See config.default.inc.php for more options.
*/
+
/**
* The name of this site.
*
@@ -116,6 +117,21 @@ $adminemail = 'admin@example.org';
$admin_users = array();
+/***************************************************
+ * Bookmarks
+ */
+
+/**
+ * Default privacy setting for bookmarks.
+ * 0 - Public
+ * 1 - Shared with Watchlist
+ * 2 - Private
+ *
+ * @var integer
+ */
+$defaults['privacy'] = 0;
+
+
/**
* You have completed the basic configuration!
* More options can be found in config.default.php.
diff --git a/src/SemanticScuttle/header.php b/src/SemanticScuttle/header.php
index c1c0fcd..b0705b0 100644
--- a/src/SemanticScuttle/header.php
+++ b/src/SemanticScuttle/header.php
@@ -107,7 +107,7 @@ T_bind_textdomain_codeset($domain, 'UTF-8');
T_textdomain($domain);
// 4 // Session
-if (!defined('UNIT_TEST_MODE')) {
+if (!defined('UNIT_TEST_MODE') || defined('HTTP_UNIT_TEST_MODE')) {
session_start();
if ($GLOBALS['enableVoting']) {
if (isset($_SESSION['lastUrl'])) {
diff --git a/tests/Api/PostsAddTest.php b/tests/Api/PostsAddTest.php
index 53aa8e7..02e2b38 100644
--- a/tests/Api/PostsAddTest.php
+++ b/tests/Api/PostsAddTest.php
@@ -406,5 +406,51 @@ TXT;
$this->assertEquals(1, $data['total']);
$this->assertEquals($title2, $data['bookmarks'][0]['bTitle']);
}
+
+
+ /**
+ * Test that a default privacy setting of 2 (Private) is used in adding
+ * a bookmark.
+ */
+ public function testDefaultPrivacyPrivate()
+ {
+ $this->setUnittestConfig(
+ array('defaults' => array('privacy' => 2))
+ );
+ list($req, $uId) = $this->getAuthRequest('?unittestMode=1');
+ $req->setMethod(HTTP_Request2::METHOD_POST);
+ $req->addPostParameter('url', 'http://www.example.org/testdefaultprivacyposts_addprivate');
+ $req->addPostParameter('description', 'Test bookmark 1 for default privacy.');
+ $req->send();
+ $this->us->setCurrentUserId($uId);
+ $bms = $this->bs->getBookmarks(0, null, $uId);
+ $this->assertEquals(1, count($bms['bookmarks']));
+ $bm = reset($bms['bookmarks']);
+ $this->assertEquals('2', $bm['bStatus']);
+ }//end testDefaultPrivacyPrivate
+
+
+ /**
+ * Test that a default privacy setting of 0 (Public) is used in adding
+ * a bookmark.
+ */
+ public function testDefaultPrivacyPublic()
+ {
+ $this->setUnittestConfig(
+ array('defaults' => array('privacy' => 0))
+ );
+ list($req, $uId) = $this->getAuthRequest('?unittestMode=1');
+ $req->setMethod(HTTP_Request2::METHOD_POST);
+ $req->addPostParameter('url', 'http://www.example.org/testdefaultprivacyposts_addpublic');
+ $req->addPostParameter('description', 'Test bookmark 1 for default privacy.');
+ $req->send();
+ $this->us->setCurrentUserId($uId);
+ $bms = $this->bs->getBookmarks(0, null, $uId);
+ $this->assertEquals(1, count($bms['bookmarks']));
+ $bm = reset($bms['bookmarks']);
+ $this->assertEquals('0', $bm['bStatus']);
+ }//end testDefaultPrivacyPublic
+
+
}
-?>
\ No newline at end of file
+?>
diff --git a/tests/TestBaseApi.php b/tests/TestBaseApi.php
index 036ab6b..2caa701 100644
--- a/tests/TestBaseApi.php
+++ b/tests/TestBaseApi.php
@@ -49,6 +49,11 @@ class TestBaseApi extends TestBase
}
$this->url = $GLOBALS['unittestUrl'] . $this->urlPart;
+ //clean up before test
+ if (file_exists($GLOBALS['datadir'] . '/config.unittest.php')) {
+ unlink($GLOBALS['datadir'] . '/config.unittest.php');
+ }
+
$this->us = SemanticScuttle_Service_Factory::get('User');
$this->us->deleteAll();
$this->bs = SemanticScuttle_Service_Factory::get('Bookmark');
@@ -60,19 +65,7 @@ class TestBaseApi extends TestBase
/**
- * Clean up after test
- */
- public function tearDown()
- {
- if (file_exists($GLOBALS['datadir'] . '/config.unittest.php')) {
- unlink($GLOBALS['datadir'] . '/config.unittest.php');
- }
- }
-
-
-
- /**
- * Gets a HTTP request object.
+ * Creates and returns a HTTP GET request object.
* Uses $this->url plus $urlSuffix as request URL.
*
* @param string $urlSuffix Suffix for the URL
@@ -111,7 +104,7 @@ class TestBaseApi extends TestBase
/**
- * Creates a user and a HTTP request object and prepares
+ * Creates a user and a HTTP GET request object and prepares
* the request object with authentication details, so that
* the user is logged in.
*
@@ -125,6 +118,7 @@ class TestBaseApi extends TestBase
* @return array(HTTP_Request2, integer) HTTP request object and user id
*
* @uses getRequest()
+ * @see getLoggedInRequest()
*/
protected function getAuthRequest($urlSuffix = null, $auth = true)
{
@@ -147,7 +141,7 @@ class TestBaseApi extends TestBase
/**
* Creates a user and a HTTP_Request2 object, does a normal login
- * and prepares the cookies for the HTTP request object so that
+ * and prepares the cookies for the HTTP GET request object so that
* the user is seen as logged in when requesting any HTML page.
*
* Useful for testing HTML pages or ajax URLs.
diff --git a/tests/data/BookmarkTest_deliciousbookmarks.xml b/tests/data/BookmarkTest_deliciousbookmarks.xml
new file mode 100755
index 0000000..87c67dc
--- /dev/null
+++ b/tests/data/BookmarkTest_deliciousbookmarks.xml
@@ -0,0 +1,7 @@
+
+
+ +
+ +
+ + + +
diff --git a/tests/prepare.php b/tests/prepare.php index 6afc284..c80306e 100644 --- a/tests/prepare.php +++ b/tests/prepare.php @@ -16,7 +16,9 @@ /** * Prepare the application for unit testing */ +//that's needed in constants.php $_SERVER['HTTP_HOST'] = 'http://localhost/'; + define('UNIT_TEST_MODE', true); if ('@data_dir@' == '@' . 'data_dir@') { diff --git a/tests/www/bookmarksTest.php b/tests/www/bookmarksTest.php new file mode 100755 index 0000000..df360cc --- /dev/null +++ b/tests/www/bookmarksTest.php @@ -0,0 +1,80 @@ +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'])); + $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->addPostParameter('submitted', '1'); + $response = $req->send(); + $response_body = $response->getBody(); + + $x = simplexml_load_string($response_body); + $ns = $x->getDocNamespaces(); + $x->registerXPathNamespace('ns', reset($ns)); + + $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. + */ + public function testDefaultPrivacyBookmarksAdd() + { + $this->setUnittestConfig( + array('defaults' => array('privacy' => 1)) + ); + list($req, $uId) = $this->getLoggedInRequest('?unittestMode=1'); + + $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); + $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: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 + +}//end class www_bookmarksTest +?> diff --git a/tests/www/editTest.php b/tests/www/editTest.php new file mode 100755 index 0000000..1e0fbd5 --- /dev/null +++ b/tests/www/editTest.php @@ -0,0 +1,48 @@ +setUnittestConfig( + array('defaults' => array('privacy' => 2)) + ); + + list($req, $uId) = $this->getLoggedInRequest('?unittestMode=1'); + $cookies = $req->getCookieJar(); + $req->setMethod(HTTP_Request2::METHOD_POST); + $req->addPostParameter('url', 'http://www.example.org/testdefaultprivacyposts_edit'); + $req->addPostParameter('description', 'Test bookmark 2 for default privacy.'); + $req->addPostParameter('status', '0'); + $res = $req->send(); + $this->assertEquals( + 200, $res->getStatus(), + 'Adding bookmark failed: ' . $res->getBody()); + $bms = $this->bs->getBookmarks(0, null, $uId); + $bm = reset($bms['bookmarks']); + $bmId = $bm['bId']; + + $reqUrl = $GLOBALS['unittestUrl'] . 'edit.php/' . $bmId . '?unittestMode=1'; + $req2 = new HTTP_Request2($reqUrl, HTTP_Request2::METHOD_POST); + $req2->setCookieJar($cookies); + $req2->addPostParameter('address', 'http://www.example.org/testdefaultprivacyposts_edit'); + $req2->addPostParameter('title', 'Test bookmark 2 for default privacy.'); + $req2->addPostParameter('submitted', '1'); + $res = $req2->send(); + + $this->assertEquals(302, $res->getStatus(), 'Editing bookmark failed'); + + $bm = $this->bs->getBookmark($bmId); + $this->assertEquals('2', $bm['bStatus']); + }//end testDefaultPrivacyEdit + +}//end class www_editTest +?> diff --git a/tests/www/importNetscapeTest.php b/tests/www/importNetscapeTest.php new file mode 100755 index 0000000..9d4cacd --- /dev/null +++ b/tests/www/importNetscapeTest.php @@ -0,0 +1,33 @@ +setUnittestConfig( + array('defaults' => array('privacy' => 1)) + ); + list($req, $uId) = $this->getLoggedInRequest(); + $req->setMethod(HTTP_Request2::METHOD_POST); + $req->setUrl($GLOBALS['unittestUrl'] . 'importNetscape.php' . '?unittestMode=1'); + $req->addUpload('userfile', dirname(__FILE__) . '/../data/BookmarkTest_netscapebookmarks.html'); + $res = $req->send(); + $this->assertEquals(200, $res->getStatus(), 'Bookmark import failed'); + + $this->us->setCurrentUserId($uId); + $bms = $this->bs->getBookmarks(0, null, $uId); + $this->assertEquals(3, count($bms['bookmarks'])); + $bm = reset($bms['bookmarks']); + $this->assertEquals('1', $bm['bStatus']); + }//end testDefaultPrivacyImportNetscape + +}//end class www_importNetscapeTest +?> diff --git a/tests/www/importTest.php b/tests/www/importTest.php new file mode 100755 index 0000000..895a320 --- /dev/null +++ b/tests/www/importTest.php @@ -0,0 +1,33 @@ +setUnittestConfig( + array('defaults' => array('privacy' => 2)) + ); + list($req, $uId) = $this->getLoggedInRequest(); + $req->setMethod(HTTP_Request2::METHOD_POST); + $req->setUrl($GLOBALS['unittestUrl'] . 'import.php' . '?unittestMode=1'); + $req->addUpload('userfile', dirname(__FILE__) . '/../data/BookmarkTest_deliciousbookmarks.xml'); + $res = $req->send(); + $this->assertEquals(302, $res->getStatus(), 'Bookmark import failed'); + + $this->us->setCurrentUserId($uId); + $bms = $this->bs->getBookmarks(0, null, $uId); + $this->assertEquals(3, count($bms['bookmarks'])); + $bm = reset($bms['bookmarks']); + $this->assertEquals('2', $bm['bStatus']); + }//end testDefaultPrivacyImport + +}//end class www_importTest +?> diff --git a/www/api/posts_add.php b/www/api/posts_add.php index 7f9dc59..80d6515 100644 --- a/www/api/posts_add.php +++ b/www/api/posts_add.php @@ -81,7 +81,7 @@ if (isset($_REQUEST['dt']) && (trim($_REQUEST['dt']) != '')) { $replace = isset($_REQUEST['replace']) && ($_REQUEST['replace'] == 'yes'); -$status = 0; +$status = $GLOBALS['defaults']['privacy']; if (isset($_REQUEST['status'])) { $status_str = trim($_REQUEST['status']); if (is_numeric($status_str)) { diff --git a/www/bookmarks.php b/www/bookmarks.php index ee0612e..efc1680 100644 --- a/www/bookmarks.php +++ b/www/bookmarks.php @@ -191,7 +191,7 @@ if ($templatename == 'editbookmark.tpl') { 'bDescription' => stripslashes(POST_DESCRIPTION), 'bPrivateNote' => stripslashes(POST_PRIVATENOTE), 'tags' => ($_POST['tags'] ? $_POST['tags'] : array()), - 'bStatus' => 0, + 'bStatus' => $GLOBALS['defaults']['privacy'], ); $tplVars['tags'] = $_POST['tags']; } else { @@ -207,7 +207,7 @@ if ($templatename == 'editbookmark.tpl') { 'bDescription' => stripslashes(GET_DESCRIPTION), 'bPrivateNote' => stripslashes(GET_PRIVATENOTE), 'tags' => (GET_TAGS ? explode(',', stripslashes(GET_TAGS)) : array()), - 'bStatus' => 0 + 'bStatus' => $GLOBALS['defaults']['privacy'] ); } diff --git a/www/edit.php b/www/edit.php index fbea163..cbfa30b 100644 --- a/www/edit.php +++ b/www/edit.php @@ -33,7 +33,7 @@ isset($_POST['title']) ? define('POST_TITLE', $_POST['title']): define('POST_TIT isset($_POST['address']) ? define('POST_ADDRESS', $_POST['address']): define('POST_ADDRESS', ''); isset($_POST['description']) ? define('POST_DESCRIPTION', $_POST['description']): define('POST_DESCRIPTION', ''); isset($_POST['privateNote']) ? define('POST_PRIVATENOTE', $_POST['privateNote']): define('POST_PRIVATENOTE', ''); -isset($_POST['status']) ? define('POST_STATUS', $_POST['status']): define('POST_STATUS', ''); +isset($_POST['status']) ? define('POST_STATUS', $_POST['status']): define('POST_STATUS', $GLOBALS['defaults']['privacy']); isset($_POST['tags']) ? define('POST_TAGS', $_POST['tags']): define('POST_TAGS', ''); isset($_GET['popup']) ? define('GET_POPUP', $_GET['popup']): define('GET_POPUP', ''); diff --git a/www/import.php b/www/import.php index 5263aba..3aa2714 100644 --- a/www/import.php +++ b/www/import.php @@ -27,7 +27,7 @@ require_once 'www-header.php'; /* Managing all possible inputs */ // First input is $_FILES // Other inputs -isset($_POST['status']) ? define('POST_STATUS', $_POST['status']): define('POST_STATUS', ''); +isset($_POST['status']) ? define('POST_STATUS', $_POST['status']): define('POST_STATUS', $GLOBALS['defaults']['privacy']); if ($userservice->isLoggedOn() && sizeof($_FILES) > 0 && $_FILES['userfile']['size'] > 0) { @@ -36,7 +36,7 @@ if ($userservice->isLoggedOn() && sizeof($_FILES) > 0 && $_FILES['userfile']['si if (is_numeric(POST_STATUS)) { $status = intval(POST_STATUS); } else { - $status = 2; + $status = $GLOBALS['defaults']['privacy']; } $depth = array(); diff --git a/www/importNetscape.php b/www/importNetscape.php index e23c156..b476c40 100644 --- a/www/importNetscape.php +++ b/www/importNetscape.php @@ -28,7 +28,7 @@ $bookmarkservice =SemanticScuttle_Service_Factory::get('Bookmark'); /* Managing all possible inputs */ // First input is $_FILES // Other inputs -isset($_POST['status']) ? define('POST_STATUS', $_POST['status']): define('POST_STATUS', ''); +isset($_POST['status']) ? define('POST_STATUS', $_POST['status']): define('POST_STATUS', $GLOBALS['defaults']['privacy']); $countImportedBookmarks = 0; $tplVars['msg'] = ''; @@ -39,7 +39,7 @@ if ($userservice->isLoggedOn() && sizeof($_FILES) > 0 && $_FILES['userfile']['si if (is_numeric(POST_STATUS)) { $status = intval(POST_STATUS); } else { - $status = 2; + $status = $GLOBALS['defaults']['privacy']; } // File handle