more tests for csv export api

git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@701 b3834d28-1941-0410-a4f8-b48e95affb8f
This commit is contained in:
cweiske 2010-03-28 18:07:18 +00:00
parent a518928796
commit 90f7d528d3
3 changed files with 157 additions and 14 deletions

View 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') {

View 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,

View 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();
}
@ -52,26 +55,45 @@ class TestBaseApi extends TestBase
* Gets a HTTP request object
*
* @param string $urlSuffix Suffix for the URL
* @param boolean $auth If user authentication is needed
*
* @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;
}
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);
}
}