summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--appinfo/api.php102
-rw-r--r--external/itemapi.php57
-rw-r--r--tests/unit/external/ItemAPITest.php198
3 files changed, 300 insertions, 57 deletions
diff --git a/appinfo/api.php b/appinfo/api.php
index e54493e5f..5d5a1fee2 100644
--- a/appinfo/api.php
+++ b/appinfo/api.php
@@ -35,8 +35,8 @@ use \OCA\AppFramework\External\External;
\OCP\API::register('get', '/apps/news/version',
function($params) {
return External::main('NewsAPI', 'version', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
@@ -46,40 +46,40 @@ use \OCA\AppFramework\External\External;
\OCP\API::register('get', '/apps/news/folders',
function($params) {
return External::main('FolderAPI', 'getAll', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('post', '/apps/news/folders',
function($params) {
return External::main('FolderAPI', 'create', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('delete', '/apps/news/folders/{folderId}',
function($params) {
return External::main('FolderAPI', 'delete', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('put', '/apps/news/folders/{folderId}',
function($params) {
return External::main('FolderAPI', 'update', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('put', '/apps/news/folders/{folderId}/read',
function($params) {
return External::main('FolderAPI', 'read', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
@@ -89,40 +89,40 @@ use \OCA\AppFramework\External\External;
\OCP\API::register('get', '/apps/news/feeds',
function($params) {
return External::main('FeedAPI', 'getAll', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('post', '/apps/news/feeds/{feedId}',
function($params) {
return External::main('FeedAPI', 'create', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('delete', '/apps/news/feeds/{feedId}',
function($params) {
return External::main('FeedAPI', 'delete', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('put', '/apps/news/feeds/{feedId}/move',
function($params) {
return External::main('FeedAPI', 'move', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('put', '/apps/news/feeds/{feedId}/read',
function($params) {
return External::main('FeedAPI', 'read', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
@@ -132,63 +132,87 @@ use \OCA\AppFramework\External\External;
\OCP\API::register('get', '/apps/news/items',
function($params) {
return External::main('ItemAPI', 'getAll', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('get', '/apps/news/items/updated',
function($params) {
return External::main('ItemAPI', 'getUpdated', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('put', '/apps/news/items/{itemId}/read',
function($params) {
return External::main('ItemAPI', 'read', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('put', '/apps/news/items/{itemId}/unread',
function($params) {
return External::main('ItemAPI', 'unread', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('put', '/apps/news/items/{feedId}/{guidHash}/star',
function($params) {
return External::main('ItemAPI', 'star', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('put', '/apps/news/items/{feedId}/{guidHash}/unstar',
function($params) {
return External::main('ItemAPI', 'unstar', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('put', '/apps/news/items/read',
function($params) {
return External::main('ItemAPI', 'readAll', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
);
\OCP\API::register('put', '/apps/news/items/read/multiple',
function($params) {
return External::main('ItemAPI', 'readMultiple', $params, new DIContainer());
- },
- 'news',
+ },
+ 'news',
\OC_API::USER_AUTH
-); \ No newline at end of file
+);
+
+\OCP\API::register('put', '/apps/news/items/unread/multiple',
+ function($params) {
+ return External::main('ItemAPI', 'unreadMultiple', $params, new DIContainer());
+ },
+ 'news',
+ \OC_API::USER_AUTH
+);
+
+\OCP\API::register('put', '/apps/news/items/star/multiple',
+ function($params) {
+ return External::main('ItemAPI', 'starMultiple', $params, new DIContainer());
+ },
+ 'news',
+ \OC_API::USER_AUTH
+);
+
+\OCP\API::register('put', '/apps/news/items/unstar/multiple',
+ function($params) {
+ return External::main('ItemAPI', 'unstarMultiple', $params, new DIContainer());
+ },
+ 'news',
+ \OC_API::USER_AUTH
+);
diff --git a/external/itemapi.php b/external/itemapi.php
index a67d5a171..6b4aeb80c 100644
--- a/external/itemapi.php
+++ b/external/itemapi.php
@@ -107,7 +107,7 @@ class ItemAPI extends Controller {
$this->itemBusinessLayer->read($itemId, $isRead, $userId);
return new NewsAPIResult();
} catch(BusinessLayerException $ex){
- return new NewsAPIResult(null, NewsAPIResult::NOT_FOUND_ERROR,
+ return new NewsAPIResult(null, NewsAPIResult::NOT_FOUND_ERROR,
$ex->getMessage());
}
}
@@ -121,7 +121,7 @@ class ItemAPI extends Controller {
$this->itemBusinessLayer->star($feedId, $guidHash, $isStarred, $userId);
return new NewsAPIResult();
} catch(BusinessLayerException $ex){
- return new NewsAPIResult(null, NewsAPIResult::NOT_FOUND_ERROR,
+ return new NewsAPIResult(null, NewsAPIResult::NOT_FOUND_ERROR,
$ex->getMessage());
}
}
@@ -156,13 +156,56 @@ class ItemAPI extends Controller {
}
+ private function setMultipleRead($isRead) {
+ $userId = $this->api->getUserId();
+ $items = $this->params('items');
+
+ foreach($items as $id) {
+ try {
+ $this->itemBusinessLayer->read($id, $isRead, $userId);
+ } catch(BusinessLayerException $ex) {
+ continue;
+ }
+ }
+
+ return new NewsAPIResult();
+ }
+
+
public function readMultiple() {
+ return $this->setMultipleRead(true);
+ }
+
+
+ public function unreadMultiple() {
+ return $this->setMultipleRead(false);
+ }
+
+
+ private function setMultipleStarred($isStarred) {
$userId = $this->api->getUserId();
- //$ids = $this->params('_put');
- //print_r(json_decode(file_get_contents('php://input'), true));
-
- exit();
- //return new NewsAPIResult();
+ $items = $this->params('items');
+
+ foreach($items as $item) {
+ try {
+ $this->itemBusinessLayer->star($item['feedId'],
+ $item['guidHash'], $isStarred, $userId);
+ } catch(BusinessLayerException $ex) {
+ continue;
+ }
+ }
+
+ return new NewsAPIResult();
+ }
+
+
+ public function starMultiple() {
+ return $this->setMultipleStarred(true);
+ }
+
+
+ public function unstarMultiple() {
+ return $this->setMultipleStarred(false);
}
}
diff --git a/tests/unit/external/ItemAPITest.php b/tests/unit/external/ItemAPITest.php
index 94c91eea0..56e518da8 100644
--- a/tests/unit/external/ItemAPITest.php
+++ b/tests/unit/external/ItemAPITest.php
@@ -147,7 +147,7 @@ class ItemAPITest extends \PHPUnit_Framework_TestCase {
$this->api,
$request,
$this->itemBusinessLayer
- );
+ );
$this->itemBusinessLayer->expects($this->once())
->method('read')
@@ -173,7 +173,7 @@ class ItemAPITest extends \PHPUnit_Framework_TestCase {
$this->api,
$request,
$this->itemBusinessLayer
- );
+ );
$this->itemBusinessLayer->expects($this->once())
->method('read')
@@ -195,7 +195,7 @@ class ItemAPITest extends \PHPUnit_Framework_TestCase {
$this->api,
$request,
$this->itemBusinessLayer
- );
+ );
$this->itemBusinessLayer->expects($this->once())
->method('read')
@@ -221,7 +221,7 @@ class ItemAPITest extends \PHPUnit_Framework_TestCase {
$this->api,
$request,
$this->itemBusinessLayer
- );
+ );
$this->itemBusinessLayer->expects($this->once())
->method('read')
@@ -244,7 +244,7 @@ class ItemAPITest extends \PHPUnit_Framework_TestCase {
$this->api,
$request,
$this->itemBusinessLayer
- );
+ );
$this->itemBusinessLayer->expects($this->once())
->method('star')
@@ -272,7 +272,7 @@ class ItemAPITest extends \PHPUnit_Framework_TestCase {
$this->api,
$request,
$this->itemBusinessLayer
- );
+ );
$this->itemBusinessLayer->expects($this->once())
->method('star')
@@ -295,7 +295,7 @@ class ItemAPITest extends \PHPUnit_Framework_TestCase {
$this->api,
$request,
$this->itemBusinessLayer
- );
+ );
$this->itemBusinessLayer->expects($this->once())
->method('star')
@@ -323,7 +323,7 @@ class ItemAPITest extends \PHPUnit_Framework_TestCase {
$this->api,
$request,
$this->itemBusinessLayer
- );
+ );
$this->itemBusinessLayer->expects($this->once())
->method('star')
@@ -347,9 +347,9 @@ class ItemAPITest extends \PHPUnit_Framework_TestCase {
$this->api,
$request,
$this->itemBusinessLayer
- );
+ );
+
-
$this->itemBusinessLayer->expects($this->once())
->method('readAll')
->with(
@@ -364,4 +364,180 @@ class ItemAPITest extends \PHPUnit_Framework_TestCase {
}
-} \ No newline at end of file
+
+ public function testReadMultiple() {
+ $request = new Request(array('params' => array(
+ 'items' => array(2, 4)
+ )));
+ $this->itemAPI = new ItemAPI(
+ $this->api,
+ $request,
+ $this->itemBusinessLayer
+ );
+
+ $this->itemBusinessLayer->expects($this->at(0))
+ ->method('read')
+ ->with($this->equalTo(2),
+ $this->equalTo(true),
+ $this->equalTo($this->user));
+ $this->itemBusinessLayer->expects($this->at(1))
+ ->method('read')
+ ->with($this->equalTo(4),
+ $this->equalTo(true),
+ $this->equalTo($this->user));
+ $response = $this->itemAPI->readMultiple();
+ $this->assertEquals(NewsAPIResult::OK, $response->getStatusCode());
+ }
+
+
+ public function testReadMultipleDoesntCareAboutException() {
+ $request = new Request(array('params' => array(
+ 'items' => array(2, 4)
+ )));
+ $this->itemAPI = new ItemAPI(
+ $this->api,
+ $request,
+ $this->itemBusinessLayer
+ );
+
+ $this->itemBusinessLayer->expects($this->at(0))
+ ->method('read')
+ ->will($this->throwException(new BusinessLayerException('')));
+ $this->itemBusinessLayer->expects($this->at(1))
+ ->method('read')
+ ->with($this->equalTo(4),
+ $this->equalTo(true),
+ $this->equalTo($this->user));
+ $this->itemAPI->readMultiple();
+ }
+
+
+ public function testUnreadMultiple() {
+ $request = new Request(array('params' => array(
+ 'items' => array(2, 4)
+ )));
+ $this->itemAPI = new ItemAPI(
+ $this->api,
+ $request,
+ $this->itemBusinessLayer
+ );
+
+ $this->itemBusinessLayer->expects($this->at(0))
+ ->method('read')
+ ->with($this->equalTo(2),
+ $this->equalTo(false),
+ $this->equalTo($this->user));
+ $this->itemBusinessLayer->expects($this->at(1))
+ ->method('read')
+ ->with($this->equalTo(4),
+ $this->equalTo(false),
+ $this->equalTo($this->user));
+ $response = $this->itemAPI->unreadMultiple();
+ $this->assertEquals(NewsAPIResult::OK, $response->getStatusCode());
+ }
+
+
+ public function testStarMultiple() {
+ $request = new Request(array('params' => array(
+ 'items' => array(
+ array(
+ 'feedId' => 2,
+ 'guidHash' => 'a'
+ ),
+ array(
+ 'feedId' => 4,
+ 'guidHash' => 'b'
+ )
+ )
+ )));
+ $this->itemAPI = new ItemAPI(
+ $this->api,
+ $request,
+ $this->itemBusinessLayer
+ );
+
+ $this->itemBusinessLayer->expects($this->at(0))
+ ->method('star')
+ ->with($this->equalTo(2),
+ $this->equalTo('a'),
+ $this->equalTo(true),
+ $this->equalTo($this->user));
+ $this->itemBusinessLayer->expects($this->at(1))
+ ->method('star')
+ ->with($this->equalTo(4),
+ $this->equalTo('b'),
+ $this->equalTo(true),
+ $this->equalTo($this->user));
+ $response = $this->itemAPI->starMultiple();
+ $this->assertEquals(NewsAPIResult::OK, $response->getStatusCode());
+ }
+
+
+ public function testStarMultipleDoesntCareAboutException() {
+ $request = new Request(array('params' => array(
+ 'items' => array(
+ array(
+ 'feedId' => 2,
+ 'guidHash' => 'a'
+ ),
+ array(
+ 'feedId' => 4,
+ 'guidHash' => 'b'
+ )
+ )
+ )));
+ $this->itemAPI = new ItemAPI(
+ $this->api,
+ $request,
+ $this->itemBusinessLayer
+ );
+
+ $this->itemBusinessLayer->expects($this->at(0))
+ ->method('star')
+ ->will($this->throwException(new BusinessLayerException('')));
+ $this->itemBusinessLayer->expects($this->at(1))
+ ->method('star')
+ ->with($this->equalTo(4),
+ $this->equalTo('b'),
+ $this->equalTo(true),
+ $this->equalTo($this->user));
+ $this->itemAPI->starMultiple();
+ }
+
+
+ public function testUnstarMultiple() {
+ $request = new Request(array('params' => array(
+ 'items' => array(
+ array(
+ 'feedId' => 2,
+ 'guidHash' => 'a'
+ ),
+ array(
+ 'feedId' => 4,
+ 'guidHash' => 'b'
+ )
+ )
+ )));
+ $this->itemAPI = new ItemAPI(
+ $this->api,
+ $request,
+ $this->itemBusinessLayer
+ );
+
+ $this->itemBusinessLayer->expects($this->at(0))
+ ->method('star')
+ ->with($this->equalTo(2),
+ $this->equalTo('a'),
+ $this->equalTo(false),
+ $this->equalTo($this->user));
+ $this->itemBusinessLayer->expects($this->at(1))
+ ->method('star')
+ ->with($this->equalTo(4),
+ $this->equalTo('b'),
+ $this->equalTo(false),
+ $this->equalTo($this->user));
+ $response = $this->itemAPI->unstarMultiple();
+ $this->assertEquals(NewsAPIResult::OK, $response->getStatusCode());
+ }
+
+}