]> gitweb.fluxo.info Git - semanticscuttle.git/commitdiff
more tests for csv export api
authorcweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f>
Sun, 28 Mar 2010 18:07:18 +0000 (18:07 +0000)
committercweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f>
Sun, 28 Mar 2010 18:07:18 +0000 (18:07 +0000)
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@701 b3834d28-1941-0410-a4f8-b48e95affb8f

tests/Api/ExportCsvTest.php
tests/TestBase.php
tests/TestBaseApi.php

index 438df7f026031f9c5c50a2b81c28d3e8321a20d0..ee7db4b0cb841770f1ee0cc3e4da810bcafd4cb3 100644 (file)
@@ -85,7 +85,7 @@ class Api_ExportCsvTest extends TestBaseApi
      */
     public function testMimeTypeFilename()
     {
-        $res = $this->getRequest()->send();
+        $res = reset($this->getAuthRequest())->send();
 
         $this->assertEquals(200, $res->getStatus());
         //verify MIME content type
@@ -96,6 +96,123 @@ class Api_ExportCsvTest extends TestBaseApi
         //we need a file name
         $this->assertNotNull($res->getHeader('content-disposition'));
     }
+
+
+
+    /**
+     * Test CSV export without bookmarks
+     */
+    public function testNoBookmarks()
+    {
+        list($req, $uid) = $this->getAuthRequest();
+        $body = $req->send()->getBody();
+        $csv  = $this->getCsvArray($body);
+
+        $this->assertEquals(1, count($csv));
+        $this->assertCsvHeader($csv);
+    }
+
+
+
+    /**
+     * Test CSV export with some bookmarks
+     */
+    public function testBookmarks()
+    {
+        list($req, $uid) = $this->getAuthRequest();
+        //public
+        $this->addBookmark(
+            $uid, 'http://example.org/testBookmarks', 0,
+            array('unittest', 'testBookmarks'), 'mytitle'
+        );
+        //shared
+        $this->addBookmark(
+            $uid, 'http://example.org/testBookmarks-shared', 1,
+            array('unittest', 'testBookmarks'), 'mytitle-shared'
+        );
+        //private
+        $this->addBookmark(
+            $uid, 'http://example.org/testBookmarks-private', 2,
+            array('unittest', 'testBookmarks'), 'mytitle-private'
+        );
+
+        //private other that should not in the export
+        $this->addBookmark(
+            null, 'http://example.org/testBookmarks-private2', 2
+        );
+
+        $body = $req->send()->getBody();
+        $csv  = $this->getCsvArray($body);
+
+        $this->assertEquals(4, count($csv));
+        $this->assertCsvHeader($csv);
+
+        $this->assertEquals('http://example.org/testBookmarks', $csv[1][0]);
+        $this->assertEquals('mytitle', $csv[1][1]);
+        $this->assertEquals('unittest,testbookmarks', $csv[1][2]);
+
+        $this->assertEquals('http://example.org/testBookmarks-shared', $csv[2][0]);
+        $this->assertEquals('mytitle-shared', $csv[2][1]);
+        $this->assertEquals('unittest,testbookmarks', $csv[2][2]);
+
+        $this->assertEquals('http://example.org/testBookmarks-private', $csv[3][0]);
+        $this->assertEquals('mytitle-private', $csv[3][1]);
+        $this->assertEquals('unittest,testbookmarks', $csv[3][2]);
+    }
+
+
+
+    /**
+     * Asserts that the CSV array contains the correct header
+     *
+     * @param array $csv CSV array from getCsvArray()
+     *
+     * @return void
+     */
+    protected function assertCsvHeader($csv)
+    {
+        $this->assertEquals(
+            array('url', 'title', 'tags', 'description'),
+            $csv[0]
+        );
+    }
+
+
+
+    /**
+     * Converts a string of CSV data to an array
+     *
+     * @param string $body String containing the full CSV file
+     *
+     * @return array Array of CSV data
+     */
+    protected function getCsvArray($body)
+    {
+        $v53 = (version_compare(PHP_VERSION, '5.3.0') === 1);
+
+        //dead simple implementation that does not work with
+        // advanced CSV files
+        $ar = array();
+        foreach (explode("\n", $body) as $line) {
+            if ($v53) {
+                $ar[] = str_getcsv($line, ';');
+            } else {
+                $arl = explode(';', $line);
+                foreach ($arl as &$str) {
+                    if (substr($str, 0, 1) == '"'
+                        && substr($str, -1) == '"'
+                    ) {
+                        $str = substr($str, 1, -1);
+                    }
+                }
+                $ar[] = $arl;
+            }
+        }
+        if (count(end($ar)) == 1 && reset(end($ar)) == '') {
+            unset($ar[key($ar)]);
+        }
+        return $ar;
+    }
 }
 
 if (PHPUnit_MAIN_METHOD == 'Api_ExportCsvTest::main') {
index aad772f7ea3811ce5cab720b87d8a99e623c6cd5..402330b6cd28b5516bbc35d9ed270f366a9e921e 100644 (file)
@@ -34,6 +34,7 @@ class TestBase extends PHPUnit_Framework_TestCase
      * @param integer $status  Bookmark visibility
      * @param array   $tags    Array of tags to attach. If "null" is given,
      *                         it will automatically be "unittest"
+     * @param string  $title   Bookmark title
      *
      * @return integer ID of bookmark
      *
@@ -41,7 +42,7 @@ class TestBase extends PHPUnit_Framework_TestCase
      */
     protected function addBookmark(
         $user = null, $address = null, $status = 0,
-        $tags = null
+        $tags = null, $title = null
     ) {
         if ($user === null) {
             $user = $this->addUser();
@@ -56,10 +57,13 @@ class TestBase extends PHPUnit_Framework_TestCase
         if ($address === null) {
             $address = 'http://example.org/' . $rand;
         }
+        if ($title === null) {
+            $title = 'unittest bookmark #' . $rand;
+        }
 
         $bid  = $bs->addBookmark(
             $address,
-            'unittest bookmark #' . $rand,
+            $title,
             'description',
             null,
             $status,
index 03ca0163d42dce4cc711dc62dffb3915b27c12f6..645ead9d53e16e48b2d39686baf48bde2aa1d5ee 100644 (file)
@@ -42,8 +42,11 @@ class TestBaseApi extends TestBase
         $this->url = $GLOBALS['unittestUrl'] . $this->urlPart;
 
         $this->us = SemanticScuttle_Service_Factory::get('User');
+        $this->us->deleteAll();
         $this->bs = SemanticScuttle_Service_Factory::get('Bookmark');
         $this->bs->deleteAll();
+        $this->b2t = SemanticScuttle_Service_Factory::get('Bookmark2Tag');
+        $this->b2t->deleteAll();
     }
 
 
@@ -51,28 +54,47 @@ class TestBaseApi extends TestBase
     /**
      * Gets a HTTP request object
      *
-     * @param string  $urlSuffix Suffix for the URL
-     * @param boolean $auth      If user authentication is needed
+     * @param string $urlSuffix Suffix for the URL
      *
      * @return HTTP_Request2 HTTP request object
      */
-    protected function getRequest($urlSuffix = null, $auth = true)
+    protected function getRequest($urlSuffix = null)
     {
         $req = new HTTP_Request2(
             $this->url . $urlSuffix,
             HTTP_Request2::METHOD_GET
         );
 
-        if ($auth) {
-            $this->addUser('testuser', 'testpassword');
-            $req->setAuth(
-                'testuser', 'testpassword',
-                HTTP_Request2::AUTH_BASIC
-            );
-        }
-
         return $req;
     }
 
+
+
+    /**
+     * Gets a HTTP request object
+     *
+     * @param string $urlSuffix Suffix for the URL
+     * @param mixed  $auth      If user authentication is needed (true/false)
+     *                          or array with username and password
+     *
+     * @return array(HTTP_Request2, integer) HTTP request object and user id
+     */
+    protected function getAuthRequest($urlSuffix = null, $auth = true)
+    {
+        $req = $this->getRequest($urlSuffix);
+        if (is_array($auth)) {
+            list($username, $password) = $auth;
+        } else {
+            $username = 'testuser';
+            $password = 'testpassword';
+        }
+        $uid = $this->addUser($username, $password);
+        $req->setAuth(
+            $username, $password,
+            HTTP_Request2::AUTH_BASIC
+        );
+        return array($req, $uid);
+    }
+
 }
 ?>
\ No newline at end of file