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()
|
public function testMimeTypeFilename()
|
||||||
{
|
{
|
||||||
$res = $this->getRequest()->send();
|
$res = reset($this->getAuthRequest())->send();
|
||||||
|
|
||||||
$this->assertEquals(200, $res->getStatus());
|
$this->assertEquals(200, $res->getStatus());
|
||||||
//verify MIME content type
|
//verify MIME content type
|
||||||
|
@ -96,6 +96,123 @@ class Api_ExportCsvTest extends TestBaseApi
|
||||||
//we need a file name
|
//we need a file name
|
||||||
$this->assertNotNull($res->getHeader('content-disposition'));
|
$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') {
|
if (PHPUnit_MAIN_METHOD == 'Api_ExportCsvTest::main') {
|
||||||
|
|
|
@ -34,6 +34,7 @@ class TestBase extends PHPUnit_Framework_TestCase
|
||||||
* @param integer $status Bookmark visibility
|
* @param integer $status Bookmark visibility
|
||||||
* @param array $tags Array of tags to attach. If "null" is given,
|
* @param array $tags Array of tags to attach. If "null" is given,
|
||||||
* it will automatically be "unittest"
|
* it will automatically be "unittest"
|
||||||
|
* @param string $title Bookmark title
|
||||||
*
|
*
|
||||||
* @return integer ID of bookmark
|
* @return integer ID of bookmark
|
||||||
*
|
*
|
||||||
|
@ -41,7 +42,7 @@ class TestBase extends PHPUnit_Framework_TestCase
|
||||||
*/
|
*/
|
||||||
protected function addBookmark(
|
protected function addBookmark(
|
||||||
$user = null, $address = null, $status = 0,
|
$user = null, $address = null, $status = 0,
|
||||||
$tags = null
|
$tags = null, $title = null
|
||||||
) {
|
) {
|
||||||
if ($user === null) {
|
if ($user === null) {
|
||||||
$user = $this->addUser();
|
$user = $this->addUser();
|
||||||
|
@ -56,10 +57,13 @@ class TestBase extends PHPUnit_Framework_TestCase
|
||||||
if ($address === null) {
|
if ($address === null) {
|
||||||
$address = 'http://example.org/' . $rand;
|
$address = 'http://example.org/' . $rand;
|
||||||
}
|
}
|
||||||
|
if ($title === null) {
|
||||||
|
$title = 'unittest bookmark #' . $rand;
|
||||||
|
}
|
||||||
|
|
||||||
$bid = $bs->addBookmark(
|
$bid = $bs->addBookmark(
|
||||||
$address,
|
$address,
|
||||||
'unittest bookmark #' . $rand,
|
$title,
|
||||||
'description',
|
'description',
|
||||||
null,
|
null,
|
||||||
$status,
|
$status,
|
||||||
|
|
|
@ -42,8 +42,11 @@ class TestBaseApi extends TestBase
|
||||||
$this->url = $GLOBALS['unittestUrl'] . $this->urlPart;
|
$this->url = $GLOBALS['unittestUrl'] . $this->urlPart;
|
||||||
|
|
||||||
$this->us = SemanticScuttle_Service_Factory::get('User');
|
$this->us = SemanticScuttle_Service_Factory::get('User');
|
||||||
|
$this->us->deleteAll();
|
||||||
$this->bs = SemanticScuttle_Service_Factory::get('Bookmark');
|
$this->bs = SemanticScuttle_Service_Factory::get('Bookmark');
|
||||||
$this->bs->deleteAll();
|
$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
|
* Gets a HTTP request object
|
||||||
*
|
*
|
||||||
* @param string $urlSuffix Suffix for the URL
|
* @param string $urlSuffix Suffix for the URL
|
||||||
* @param boolean $auth If user authentication is needed
|
|
||||||
*
|
*
|
||||||
* @return HTTP_Request2 HTTP request object
|
* @return HTTP_Request2 HTTP request object
|
||||||
*/
|
*/
|
||||||
protected function getRequest($urlSuffix = null, $auth = true)
|
protected function getRequest($urlSuffix = null)
|
||||||
{
|
{
|
||||||
$req = new HTTP_Request2(
|
$req = new HTTP_Request2(
|
||||||
$this->url . $urlSuffix,
|
$this->url . $urlSuffix,
|
||||||
HTTP_Request2::METHOD_GET
|
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