diff options
-rw-r--r-- | businesslayer/feedbusinesslayer.php | 18 | ||||
-rw-r--r-- | businesslayer/folderbusinesslayer.php | 17 | ||||
-rw-r--r-- | controller/feedcontroller.php | 2 | ||||
-rw-r--r-- | controller/foldercontroller.php | 2 | ||||
-rw-r--r-- | db/feedmapper.php | 21 | ||||
-rw-r--r-- | db/foldermapper.php | 21 | ||||
-rw-r--r-- | external/feedapi.php | 2 | ||||
-rw-r--r-- | external/folderapi.php | 2 | ||||
-rw-r--r-- | tests/unit/businesslayer/FeedBusinessLayerTest.php | 20 | ||||
-rw-r--r-- | tests/unit/businesslayer/FolderBusinessLayerTest.php | 21 | ||||
-rw-r--r-- | tests/unit/controller/FeedControllerTest.php | 6 | ||||
-rw-r--r-- | tests/unit/controller/FolderControllerTest.php | 4 | ||||
-rw-r--r-- | tests/unit/db/FeedMapperTest.php | 16 | ||||
-rw-r--r-- | tests/unit/db/FolderMapperTest.php | 17 | ||||
-rw-r--r-- | tests/unit/external/FeedAPITest.php | 6 | ||||
-rw-r--r-- | tests/unit/external/FolderAPITest.php | 4 |
16 files changed, 146 insertions, 33 deletions
diff --git a/businesslayer/feedbusinesslayer.php b/businesslayer/feedbusinesslayer.php index f6ab1c144..53e0862a9 100644 --- a/businesslayer/feedbusinesslayer.php +++ b/businesslayer/feedbusinesslayer.php @@ -261,9 +261,21 @@ class FeedBusinessLayer extends BusinessLayer { } - public function purgeDeleted($userId=null) { - $now = $this->timeFactory->getTime(); - $deleteOlderThan = $now - $this->autoPurgeMinimumInterval; + /** + * Deletes all deleted feeds + * @param string $userId if given it purges only feeds of that user + * @param boolean $useInterval defaults to true, if true it only purges + * entries in a given interval to give the user a chance to undo the + * deletion + */ + public function purgeDeleted($userId=null, $useInterval=true) { + $deleteOlderThan = null; + + if ($useInterval) { + $now = $this->timeFactory->getTime(); + $deleteOlderThan = $now - $this->autoPurgeMinimumInterval; + } + $toDelete = $this->mapper->getToDelete($deleteOlderThan, $userId); foreach ($toDelete as $feed) { diff --git a/businesslayer/folderbusinesslayer.php b/businesslayer/folderbusinesslayer.php index e511c4dda..662b04b01 100644 --- a/businesslayer/folderbusinesslayer.php +++ b/businesslayer/folderbusinesslayer.php @@ -123,11 +123,20 @@ class FolderBusinessLayer extends BusinessLayer { /** - * Purges marked as deleted folders + * Deletes all deleted folders + * @param string $userId if given it purges only folders of that user + * @param boolean $useInterval defaults to true, if true it only purges + * entries in a given interval to give the user a chance to undo the + * deletion */ - public function purgeDeleted($userId=null) { - $now = $this->timeFactory->getTime(); - $deleteOlderThan = $now - $this->autoPurgeMinimumInterval; + public function purgeDeleted($userId=null, $useInterval=true) { + $deleteOlderThan = null; + + if ($useInterval) { + $now = $this->timeFactory->getTime(); + $deleteOlderThan = $now - $this->autoPurgeMinimumInterval; + } + $toDelete = $this->mapper->getToDelete($deleteOlderThan, $userId); foreach ($toDelete as $folder) { diff --git a/controller/feedcontroller.php b/controller/feedcontroller.php index d3cc62449..34923bafa 100644 --- a/controller/feedcontroller.php +++ b/controller/feedcontroller.php @@ -135,7 +135,7 @@ class FeedController extends Controller { try { // we need to purge deleted feeds if a feed is created to // prevent already exists exceptions - $this->feedBusinessLayer->purgeDeleted($userId); + $this->feedBusinessLayer->purgeDeleted($userId, false); $feed = $this->feedBusinessLayer->create($url, $parentFolderId, $userId); $params = array( diff --git a/controller/foldercontroller.php b/controller/foldercontroller.php index 4bae118c2..fa0ce40de 100644 --- a/controller/foldercontroller.php +++ b/controller/foldercontroller.php @@ -116,7 +116,7 @@ class FolderController extends Controller { try { // we need to purge deleted folders if a folder is created to // prevent already exists exceptions - $this->folderBusinessLayer->purgeDeleted($userId); + $this->folderBusinessLayer->purgeDeleted($userId, false); $folder = $this->folderBusinessLayer->create($folderName, $userId); diff --git a/db/feedmapper.php b/db/feedmapper.php index 227c5b13c..f8c222298 100644 --- a/db/feedmapper.php +++ b/db/feedmapper.php @@ -147,15 +147,26 @@ class FeedMapper extends Mapper implements IMapper { } - public function getToDelete($deleteOlderThan, $userId=null) { + /** + * @param int $deleteOlderThan if given gets all entries with a delete date + * older than that timestamp + * @param string $userId if given returns only entries from the given user + * @return array with the database rows + */ + public function getToDelete($deleteOlderThan=null, $userId=null) { $sql = 'SELECT * FROM `*PREFIX*news_feeds` ' . - 'WHERE `deleted_at` > 0 ' . - 'AND `deleted_at` < ?'; - $params = array($deleteOlderThan); + 'WHERE `deleted_at` > 0 '; + $params = array(); + + // sometimes we want to delete all entries + if ($deleteOlderThan !== null) { + $sql .= 'AND `deleted_at` < ? '; + array_push($params, $deleteOlderThan); + } // we need to sometimes only delete feeds of a user if($userId !== null) { - $sql .= ' AND `user_id` = ?'; + $sql .= 'AND `user_id` = ?'; array_push($params, $userId); } diff --git a/db/foldermapper.php b/db/foldermapper.php index f8d088cdb..c2a44dc20 100644 --- a/db/foldermapper.php +++ b/db/foldermapper.php @@ -97,15 +97,26 @@ class FolderMapper extends Mapper implements IMapper { } - public function getToDelete($deleteOlderThan, $userId=null) { + /** + * @param int $deleteOlderThan if given gets all entries with a delete date + * older than that timestamp + * @param string $userId if given returns only entries from the given user + * @return array with the database rows + */ + public function getToDelete($deleteOlderThan=null, $userId=null) { $sql = 'SELECT * FROM `*PREFIX*news_folders` ' . - 'WHERE `deleted_at` > 0 ' . - 'AND `deleted_at` < ?'; - $params = array($deleteOlderThan); + 'WHERE `deleted_at` > 0 '; + $params = array(); + + // sometimes we want to delete all entries + if ($deleteOlderThan !== null) { + $sql .= 'AND `deleted_at` < ? '; + array_push($params, $deleteOlderThan); + } // we need to sometimes only delete feeds of a user if($userId !== null) { - $sql .= ' AND `user_id` = ?'; + $sql .= 'AND `user_id` = ?'; array_push($params, $userId); } diff --git a/external/feedapi.php b/external/feedapi.php index 9d8f75482..9ebfbc012 100644 --- a/external/feedapi.php +++ b/external/feedapi.php @@ -82,7 +82,7 @@ class FeedAPI extends Controller { $folderId = (int) $this->params('folderId', 0); try { - $this->feedBusinessLayer->purgeDeleted($userId); + $this->feedBusinessLayer->purgeDeleted($userId, false); $feed = $this->feedBusinessLayer->create($feedUrl, $folderId, $userId); $result = array( diff --git a/external/folderapi.php b/external/folderapi.php index 314b4ea2f..bbe32ab24 100644 --- a/external/folderapi.php +++ b/external/folderapi.php @@ -72,7 +72,7 @@ class FolderAPI extends Controller { ); try { - $this->folderBusinessLayer->purgeDeleted($userId); + $this->folderBusinessLayer->purgeDeleted($userId, false); $folder = $this->folderBusinessLayer->create($folderName, $userId); array_push($result['folders'], $folder->toAPI()); diff --git a/tests/unit/businesslayer/FeedBusinessLayerTest.php b/tests/unit/businesslayer/FeedBusinessLayerTest.php index 882106693..9f8683d9b 100644 --- a/tests/unit/businesslayer/FeedBusinessLayerTest.php +++ b/tests/unit/businesslayer/FeedBusinessLayerTest.php @@ -740,4 +740,24 @@ class FeedBusinessLayerTest extends \OCA\AppFramework\Utility\TestUtility { } + public function testPurgeDeletedWithoutInterval(){ + $feed1 = new Feed(); + $feed1->setId(3); + $feed2 = new Feed(); + $feed2->setId(5); + $feeds = array($feed1, $feed2); + + $this->feedMapper->expects($this->once()) + ->method('getToDelete') + ->with($this->equalTo(null), $this->equalTo($this->user)) + ->will($this->returnValue($feeds)); + $this->feedMapper->expects($this->at(1)) + ->method('delete') + ->with($this->equalTo($feed1)); + $this->feedMapper->expects($this->at(2)) + ->method('delete') + ->with($this->equalTo($feed2)); + + $this->feedBusinessLayer->purgeDeleted($this->user, false); + } } diff --git a/tests/unit/businesslayer/FolderBusinessLayerTest.php b/tests/unit/businesslayer/FolderBusinessLayerTest.php index 1e26f0226..35886b626 100644 --- a/tests/unit/businesslayer/FolderBusinessLayerTest.php +++ b/tests/unit/businesslayer/FolderBusinessLayerTest.php @@ -232,4 +232,25 @@ class FolderBusinessLayerTest extends \OCA\AppFramework\Utility\TestUtility { $this->folderBusinessLayer->purgeDeleted($this->user); } + + public function testPurgeDeletedNoInterval(){ + $folder1 = new Folder(); + $folder1->setId(3); + $folder2 = new Folder(); + $folder2->setId(5); + $feeds = array($folder1, $folder2); + + $this->folderMapper->expects($this->once()) + ->method('getToDelete') + ->with($this->equalTo(null), $this->equalTo($this->user)) + ->will($this->returnValue($feeds)); + $this->folderMapper->expects($this->at(1)) + ->method('delete') + ->with($this->equalTo($folder1)); + $this->folderMapper->expects($this->at(2)) + ->method('delete') + ->with($this->equalTo($folder2)); + + $this->folderBusinessLayer->purgeDeleted($this->user, false); + } } diff --git a/tests/unit/controller/FeedControllerTest.php b/tests/unit/controller/FeedControllerTest.php index 841ba5ea2..370158822 100644 --- a/tests/unit/controller/FeedControllerTest.php +++ b/tests/unit/controller/FeedControllerTest.php @@ -318,7 +318,7 @@ class FeedControllerTest extends ControllerTestUtility { ->will($this->returnValue($result['newestItemId'])); $this->feedBusinessLayer->expects($this->once()) ->method('purgeDeleted') - ->with($this->equalTo($this->user)); + ->with($this->equalTo($this->user), $this->equalTo(false)); $this->feedBusinessLayer->expects($this->once()) ->method('create') ->with($this->equalTo($post['url']), @@ -349,7 +349,7 @@ class FeedControllerTest extends ControllerTestUtility { ->will($this->returnValue($this->user)); $this->feedBusinessLayer->expects($this->once()) ->method('purgeDeleted') - ->with($this->equalTo($this->user)); + ->with($this->equalTo($this->user), $this->equalTo(false)); $this->itemBusinessLayer->expects($this->once()) ->method('getNewestItemId') @@ -377,7 +377,7 @@ class FeedControllerTest extends ControllerTestUtility { ->will($this->returnValue($this->user)); $this->feedBusinessLayer->expects($this->once()) ->method('purgeDeleted') - ->with($this->equalTo($this->user)); + ->with($this->equalTo($this->user), $this->equalTo(false)); $this->feedBusinessLayer->expects($this->once()) ->method('create') ->will($this->throwException($ex)); diff --git a/tests/unit/controller/FolderControllerTest.php b/tests/unit/controller/FolderControllerTest.php index 64df7dc16..ff1a16a13 100644 --- a/tests/unit/controller/FolderControllerTest.php +++ b/tests/unit/controller/FolderControllerTest.php @@ -240,7 +240,7 @@ class FolderControllerTest extends ControllerTestUtility { ->will($this->returnValue($this->user)); $this->folderBusinessLayer->expects($this->once()) ->method('purgeDeleted') - ->with($this->equalTo($this->user)); + ->with($this->equalTo($this->user), $this->equalTo(false)); $this->folderBusinessLayer->expects($this->once()) ->method('create') ->with($this->equalTo($post['folderName']), @@ -262,7 +262,7 @@ class FolderControllerTest extends ControllerTestUtility { ->will($this->returnValue($this->user)); $this->folderBusinessLayer->expects($this->once()) ->method('purgeDeleted') - ->with($this->equalTo($this->user)); + ->with($this->equalTo($this->user), $this->equalTo(false)); $this->folderBusinessLayer->expects($this->once()) ->method('create') ->will($this->throwException($ex)); diff --git a/tests/unit/db/FeedMapperTest.php b/tests/unit/db/FeedMapperTest.php index 6894e16d0..460156e5c 100644 --- a/tests/unit/db/FeedMapperTest.php +++ b/tests/unit/db/FeedMapperTest.php @@ -289,7 +289,7 @@ class FeedMapperTest extends \OCA\AppFramework\Utility\MapperTestUtility { $deleteOlderThan = 110; $sql = 'SELECT * FROM `*PREFIX*news_feeds` ' . 'WHERE `deleted_at` > 0 ' . - 'AND `deleted_at` < ?'; + 'AND `deleted_at` < ? '; $this->setMapperResult($sql, array($deleteOlderThan), $rows); $result = $this->mapper->getToDelete($deleteOlderThan); @@ -314,4 +314,18 @@ class FeedMapperTest extends \OCA\AppFramework\Utility\MapperTestUtility { } + public function testGetAllPurgeDeletedFromUser(){ + $rows = array( + array('id' => $this->feeds[0]->getId()), + array('id' => $this->feeds[1]->getId()) + ); + $deleteOlderThan = 110; + $sql = 'SELECT * FROM `*PREFIX*news_feeds` ' . + 'WHERE `deleted_at` > 0 ' . + 'AND `user_id` = ?'; + $this->setMapperResult($sql, array($this->user), $rows); + $result = $this->mapper->getToDelete(null, $this->user); + + $this->assertEquals($this->feeds, $result); + } } diff --git a/tests/unit/db/FolderMapperTest.php b/tests/unit/db/FolderMapperTest.php index 87726b893..d31a014a6 100644 --- a/tests/unit/db/FolderMapperTest.php +++ b/tests/unit/db/FolderMapperTest.php @@ -187,7 +187,7 @@ class FolderMapperTest extends \OCA\AppFramework\Utility\MapperTestUtility { $deleteOlderThan = 110; $sql = 'SELECT * FROM `*PREFIX*news_folders` ' . 'WHERE `deleted_at` > 0 ' . - 'AND `deleted_at` < ?'; + 'AND `deleted_at` < ? '; $this->setMapperResult($sql, array($deleteOlderThan), $rows); $result = $this->folderMapper->getToDelete($deleteOlderThan); @@ -213,4 +213,19 @@ class FolderMapperTest extends \OCA\AppFramework\Utility\MapperTestUtility { } + public function testGetAllPurgeDeletedUser(){ + $rows = array( + array('id' => $this->folders[0]->getId()), + array('id' => $this->folders[1]->getId()) + ); + $deleteOlderThan = 110; + $sql = 'SELECT * FROM `*PREFIX*news_folders` ' . + 'WHERE `deleted_at` > 0 ' . + 'AND `user_id` = ?'; + $this->setMapperResult($sql, array($this->user), $rows); + $result = $this->folderMapper->getToDelete(null, $this->user); + + $this->assertEquals($this->folders, $result); + } + }
\ No newline at end of file diff --git a/tests/unit/external/FeedAPITest.php b/tests/unit/external/FeedAPITest.php index c6d8247f5..cdc04bf0c 100644 --- a/tests/unit/external/FeedAPITest.php +++ b/tests/unit/external/FeedAPITest.php @@ -211,7 +211,7 @@ class FeedAPITest extends \PHPUnit_Framework_TestCase { $this->feedBusinessLayer->expects($this->once()) ->method('purgeDeleted') - ->with($this->equalTo($this->user)); + ->with($this->equalTo($this->user), $this->equalTo(false)); $this->feedBusinessLayer->expects($this->once()) ->method('create') ->with( @@ -253,7 +253,7 @@ class FeedAPITest extends \PHPUnit_Framework_TestCase { $this->feedBusinessLayer->expects($this->once()) ->method('purgeDeleted') - ->with($this->equalTo($this->user)); + ->with($this->equalTo($this->user), $this->equalTo(false)); $this->feedBusinessLayer->expects($this->once()) ->method('create') ->with( @@ -280,7 +280,7 @@ class FeedAPITest extends \PHPUnit_Framework_TestCase { public function testCreateExists() { $this->feedBusinessLayer->expects($this->once()) ->method('purgeDeleted') - ->with($this->equalTo($this->user)); + ->with($this->equalTo($this->user), $this->equalTo(false)); $this->feedBusinessLayer->expects($this->once()) ->method('create') ->will($this->throwException(new BusinessLayerExistsException($this->msg))); diff --git a/tests/unit/external/FolderAPITest.php b/tests/unit/external/FolderAPITest.php index aaae2d084..1ae4bd081 100644 --- a/tests/unit/external/FolderAPITest.php +++ b/tests/unit/external/FolderAPITest.php @@ -114,7 +114,7 @@ class FolderAPITest extends \PHPUnit_Framework_TestCase { $this->folderBusinessLayer->expects($this->once()) ->method('purgeDeleted') - ->with($this->equalTo($this->user)); + ->with($this->equalTo($this->user), $this->equalTo(false)); $this->folderBusinessLayer->expects($this->once()) ->method('create') ->with($this->equalTo($folderName), $this->equalTo($this->user)) @@ -132,7 +132,7 @@ class FolderAPITest extends \PHPUnit_Framework_TestCase { $msg = 'exists'; $this->folderBusinessLayer->expects($this->once()) ->method('purgeDeleted') - ->with($this->equalTo($this->user)); + ->with($this->equalTo($this->user), $this->equalTo(false)); $this->folderBusinessLayer->expects($this->once()) ->method('create') ->will($this->throwException(new BusinessLayerExistsException($msg))); |