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:
parent
a518928796
commit
90f7d528d3
3 changed files with 157 additions and 14 deletions
|
@ -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') {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue