]> gitweb.fluxo.info Git - semanticscuttle.git/commitdiff
api/posts/add respects the "replace" parameter now
authorcweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f>
Wed, 29 Sep 2010 20:57:30 +0000 (20:57 +0000)
committercweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f>
Wed, 29 Sep 2010 20:57:30 +0000 (20:57 +0000)
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@777 b3834d28-1941-0410-a4f8-b48e95affb8f

doc/ChangeLog
tests/Api/PostsAddTest.php
www/api/posts_add.php

index e2562e48ba304295173f28071259eae1317979d7..d711dd4afc1bbd12605abd3f14bfbe62a4ea93c7 100644 (file)
@@ -3,12 +3,13 @@ ChangeLog for SemantiScuttle
 
 0.9X.X - 2010-XX-XX
 -------------------
-- Fix bug getTagsForBookmarks() that fetched all tags
+- Fix bug in getTagsForBookmarks() that fetched all tags
+- Fix bug #3073215: Updating bookmark time does not work
+- Fix bug #3074816: French translation breaks edit javascript
 - Show error message on mysqli connection errors
 - Implement patch #3059829: update FR_CA translation
 - Update php-gettext library to 1.0.10
-- Fix bug #3073215: Updating bookmark time does not work
-- Fix bug #3074816: French translation breaks edit javascript
+- api/posts/add respects the "replace" parameter now
 
 
 0.97.0 - 2010-06-09
index dea002ecdb1059162f2319b855b280a412248477..1f21d0435fd8255a7f3ebe18cf3dbe0bdaad1a7a 100644 (file)
@@ -306,6 +306,127 @@ TXT;
         $data = $this->bs->getBookmarks(0, null, $uId);
         $this->assertEquals(0, $data['total']);
     }
+
+    /**
+     * Test that the replace=no parameter prevents the bookmark from being
+     * overwritten.
+     */
+    public function testReplaceNo()
+    {
+        $this->bs->deleteAll();
+
+        $url    = 'http://example.org/tag2';
+        $title1 = 'foo bar 1';
+        $title2 = 'bar 2 foo';
+
+        list($req, $uId) = $this->getAuthRequest();
+        $req->setMethod(HTTP_Request2::METHOD_POST);
+        $req->addPostParameter('url', $url);
+        $req->addPostParameter('description', $title1);
+        $res = $req->send();
+
+        //all should be well
+        $this->assertEquals(200, $res->getStatus());
+
+        //send it a second time, with different title
+        list($req, $dummy) = $this->getAuthRequest();
+        $req->setMethod(HTTP_Request2::METHOD_POST);
+        $req->addPostParameter('url', $url);
+        $req->addPostParameter('description', $title2);
+        $req->addPostParameter('replace', 'no');
+        $res = $req->send();
+
+        //this time we should get an error
+        $this->assertEquals(409, $res->getStatus());
+        //verify MIME content type
+        $this->assertEquals(
+            'text/xml; charset=utf-8',
+            $res->getHeader('content-type')
+        );
+
+        //verify xml
+        $this->assertTag(
+            array(
+                'tag'        => 'result',
+                'attributes' => array('code' => 'bookmark does already exist')
+            ),
+            $res->getBody(),
+            null, false
+        );
+
+        //user still has 1 bookmark now
+        $data = $this->bs->getBookmarks(0, null, $uId);
+        $this->assertEquals(1, $data['total']);
+        $this->assertEquals($title1, $data['bookmarks'][0]['bTitle']);
+
+        //send it a third time, without the replace parameter
+        // it defaults to "no", so the bookmark should not get overwritten
+        list($req, $dummy) = $this->getAuthRequest();
+        $req->setMethod(HTTP_Request2::METHOD_POST);
+        $req->addPostParameter('url', $url);
+        $req->addPostParameter('description', $title2);
+        $res = $req->send();
+
+        //this time we should get an error
+        $this->assertEquals(409, $res->getStatus());
+
+        //bookmark should not have changed
+        $data = $this->bs->getBookmarks(0, null, $uId);
+        $this->assertEquals(1, $data['total']);
+        $this->assertEquals($title1, $data['bookmarks'][0]['bTitle']);
+    }
+
+    /**
+     * Test that the replace=yes parameter causes the bookmark to be updated.
+     */
+    public function testReplaceYes()
+    {
+        $this->bs->deleteAll();
+
+        $url    = 'http://example.org/tag2';
+        $title1 = 'foo bar 1';
+        $title2 = 'bar 2 foo';
+
+        list($req, $uId) = $this->getAuthRequest();
+        $req->setMethod(HTTP_Request2::METHOD_POST);
+        $req->addPostParameter('url', $url);
+        $req->addPostParameter('description', $title1);
+        $res = $req->send();
+
+        //all should be well
+        $this->assertEquals(200, $res->getStatus());
+
+        //send it a second time, with different title
+        list($req, $dummy) = $this->getAuthRequest();
+        $req->setMethod(HTTP_Request2::METHOD_POST);
+        $req->addPostParameter('url', $url);
+        $req->addPostParameter('description', $title2);
+        $req->addPostParameter('replace', 'yes');
+        $res = $req->send();
+
+        //no error
+        $this->assertEquals(200, $res->getStatus());
+        //verify MIME content type
+        $this->assertEquals(
+            'text/xml; charset=utf-8',
+            $res->getHeader('content-type')
+        );
+
+        //verify xml
+        $this->assertTag(
+            array(
+                'tag'        => 'result',
+                'attributes' => array('code' => 'done')
+            ),
+            $res->getBody(),
+            null, false
+        );
+
+        //user still has 1 bookmark now, but with the new title
+        $data = $this->bs->getBookmarks(0, null, $uId);
+        $this->assertEquals(1, $data['total']);
+        $this->assertEquals($title2, $data['bookmarks'][0]['bTitle']);
+    }
 }
 
 if (PHPUnit_MAIN_METHOD == 'Api_PostsAddTest::main') {
index 0e06d5023b6ea97fdc918b72048949c654eb200b..7f9dc59d4df1432f9db6c90393d3dc56ec96d934 100644 (file)
@@ -16,6 +16,8 @@
  *                             - 0 or 'public': Everyone can see the bookmark
  * @param string  $shared      "no" or "yes": Switches between private and
  *                             public (optional)
+ * @param string  $replace     "yes" or "no" - replaces a bookmark with the
+ *                             same URL (optional)
  *
  * Notes:
  * - tags cannot have spaces
@@ -23,7 +25,6 @@
  * - delicious "description" is the "title" in SemanticScuttle
  * - delicious "extended" is the "description" in SemanticScuttle
  * - "status" is a SemanticScuttle addition to this API method
- * - SemanticScuttle currently ignores the "replace" parameter
  *
  * SemanticScuttle - your social bookmark manager.
  *
@@ -78,6 +79,8 @@ if (isset($_REQUEST['dt']) && (trim($_REQUEST['dt']) != '')) {
     $dt = null;
 }
 
+$replace = isset($_REQUEST['replace']) && ($_REQUEST['replace'] == 'yes');
+
 $status = 0;
 if (isset($_REQUEST['status'])) {
     $status_str = trim($_REQUEST['status']);
@@ -114,9 +117,22 @@ if (is_null($url)) {
     $msg = 'Description missing';
 } else {
     // We're good with info; now insert it!
-    if ($bs->bookmarkExists($url, $userservice->getCurrentUserId())) {
-        $msg = 'something went wrong';
-    } else {
+    $exists = $bs->bookmarkExists($url, $userservice->getCurrentUserId());
+    if ($exists) {
+        if (!$replace) {
+            header('HTTP/1.0 409 Conflict');
+            $msg = 'bookmark does already exist';
+        } else {
+            //delete it before we re-add it
+            $bookmark = $bs->getBookmarkByAddress($url, false);
+            $bId      = $bookmark['bId'];
+            $bs->deleteBookmark($bId);
+
+            $exists = false;
+        }
+    }
+
+    if (!$exists) {
         $added = $bs->addBookmark(
             $url, $description, $extended, '', $status, $tags, null, $dt, true
         );