diff options
| author | Christian Weiske <cweiske@cweiske.de> | 2010-08-12 20:49:35 +0200 | 
|---|---|---|
| committer | Christian Weiske <cweiske@cweiske.de> | 2010-08-12 20:49:35 +0200 | 
| commit | 0a8dadf87e660e9bf205581f12f7af87bfabf6ca (patch) | |
| tree | a1218f869401a1ffff764a58c28a0be674ba5362 /tests/Api | |
| parent | b25290cef48251a31cb0f693a53677b566c1b1a4 (diff) | |
| parent | 31570df64ce6543de407e7b9d751ba9033d930de (diff) | |
| download | semanticscuttle-0a8dadf87e660e9bf205581f12f7af87bfabf6ca.tar.gz semanticscuttle-0a8dadf87e660e9bf205581f12f7af87bfabf6ca.tar.bz2  | |
Merge branch 'master' into pearpkg
Diffstat (limited to 'tests/Api')
| -rw-r--r-- | tests/Api/ExportCsvTest.php | 287 | 
1 files changed, 287 insertions, 0 deletions
diff --git a/tests/Api/ExportCsvTest.php b/tests/Api/ExportCsvTest.php new file mode 100644 index 0000000..2bff8a5 --- /dev/null +++ b/tests/Api/ExportCsvTest.php @@ -0,0 +1,287 @@ +<?php +/** + * SemanticScuttle - your social bookmark manager. + * + * PHP version 5. + * + * @category Bookmarking + * @package  SemanticScuttle + * @author   Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net> + * @author   Christian Weiske <cweiske@cweiske.de> + * @author   Eric Dane <ericdane@users.sourceforge.net> + * @license  GPL http://www.gnu.org/licenses/gpl.html + * @link     http://sourceforge.net/projects/semanticscuttle + */ + +require_once dirname(__FILE__) . '/../prepare.php'; +require_once 'HTTP/Request2.php'; + +if (!defined('PHPUnit_MAIN_METHOD')) { +    define('PHPUnit_MAIN_METHOD', 'Api_ExportCsvTest::main'); +} + +/** + * Unit tests for the SemanticScuttle csv export API + * + * @category Bookmarking + * @package  SemanticScuttle + * @author   Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net> + * @author   Christian Weiske <cweiske@cweiske.de> + * @author   Eric Dane <ericdane@users.sourceforge.net> + * @license  GPL http://www.gnu.org/licenses/gpl.html + * @link     http://sourceforge.net/projects/semanticscuttle + */ +class Api_ExportCsvTest extends TestBaseApi +{ +    protected $us; +    protected $bs; +    protected $urlPart = 'api/export_csv.php'; + + + +    /** +     * Used to run this test class standalone +     * +     * @return void +     */ +    public static function main() +    { +        require_once 'PHPUnit/TextUI/TestRunner.php'; +        PHPUnit_TextUI_TestRunner::run( +            new PHPUnit_Framework_TestSuite(__CLASS__) +        ); +    } + + + +    /** +     * Test if authentication is required when sending no auth data +     */ +    public function testAuthWithoutAuthData() +    { +        $req = $this->getRequest(null, false); +        $res = $req->send(); +        $this->assertEquals(401, $res->getStatus()); +    } + + + +    /** +     * Test if authentication is required when sending wrong user data + +     */ +    public function testAuthWrongCredentials() +    { +        $req = $this->getRequest(null, false); +        $req->setAuth('user', 'password', HTTP_Request2::AUTH_BASIC); +        $res = $req->send(); +        $this->assertEquals(401, $res->getStatus()); +    } + + + +    /** +     * Test MIME content type and filename header fields +     */ +    public function testMimeTypeFilename() +    { +        $res = reset($this->getAuthRequest())->send(); + +        $this->assertEquals(200, $res->getStatus()); +        //verify MIME content type +        $this->assertEquals( +            'application/csv-tab-delimited-table; charset=utf-8', +            $res->getHeader('content-type') +        ); +        //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 +        ); +        //public bookmark from other people that should not be +        // exported, too +        $this->addBookmark( +            null, 'http://example.org/testBookmarks-other', 0 +        ); + +        $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]); +    } + + + +    /** +     * Test CSV export with tag filter +     */ +    public function testTagFilter() +    { +        list($req, $uid) = $this->getAuthRequest('?tag=tag1'); +        $this->addBookmark( +            $uid, 'http://example.org/tag-1', 0, +            array('unittest', 'tag1') +        ); +        $this->addBookmark( +            $uid, 'http://example.org/tag-2', 0, +            array('unittest', 'tag2') +        ); +        $this->addBookmark( +            $uid, 'http://example.org/tag-3', 0, +            array('unittest', 'tag1', 'tag2') +        ); + +        $body = $req->send()->getBody(); +        $csv  = $this->getCsvArray($body); + +        $this->assertEquals(3, count($csv)); +        $this->assertCsvHeader($csv); + +        $this->assertEquals('http://example.org/tag-1', $csv[1][0]); +        $this->assertEquals('http://example.org/tag-3', $csv[2][0]); +    } + + + +    /** +     * Test CSV export with tag filter for multiple tags +     */ +    public function testTagFilterMultiple() +    { +        list($req, $uid) = $this->getAuthRequest('?tag=tag1+tag2'); +        $this->addBookmark( +            $uid, 'http://example.org/tag-1', 0, +            array('unittest', 'tag1') +        ); +        $this->addBookmark( +            $uid, 'http://example.org/tag-2', 0, +            array('unittest', 'tag2') +        ); +        $this->addBookmark( +            $uid, 'http://example.org/tag-3', 0, +            array('unittest', 'tag1', 'tag2') +        ); + +        $body = $req->send()->getBody(); +        $csv  = $this->getCsvArray($body); + +        $this->assertEquals(2, count($csv)); +        $this->assertCsvHeader($csv); + +        $this->assertEquals('http://example.org/tag-3', $csv[1][0]); +    } + + + +    /** +     * 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') { +    Api_ExportCsvTest::main(); +} +?>
\ No newline at end of file  | 
