diff options
-rw-r--r-- | db/feedmapper.php | 12 | ||||
-rw-r--r-- | db/foldermapper.php | 17 | ||||
-rw-r--r-- | tests/db/FeedMapperTest.php | 40 | ||||
-rw-r--r-- | tests/db/FolderMapperTest.php | 42 |
4 files changed, 111 insertions, 0 deletions
diff --git a/db/feedmapper.php b/db/feedmapper.php index 22f71d7a3..05fa729b4 100644 --- a/db/feedmapper.php +++ b/db/feedmapper.php @@ -27,6 +27,8 @@ namespace OCA\News\Db; use \OCA\AppFramework\Core\API; use \OCA\AppFramework\Db\Mapper; +use \OCA\AppFramework\Db\Entity; + class FeedMapper extends Mapper implements IMapper { @@ -95,7 +97,17 @@ class FeedMapper extends Mapper implements IMapper { $feed->fromRow($row); return $feed; + } + + + public function delete(Entity $entity){ + parent::delete($entity); + // someone please slap me for doing this manually :P + // we needz CASCADE + FKs please + $sql = 'DELETE FROM `*PREFIX*news_items` WHERE `feed_id` = ?'; + $params = array($entity->getId()); + $this->execute($sql, $params); } }
\ No newline at end of file diff --git a/db/foldermapper.php b/db/foldermapper.php index 82739df1b..8978bb45b 100644 --- a/db/foldermapper.php +++ b/db/foldermapper.php @@ -27,6 +27,7 @@ namespace OCA\News\Db; use \OCA\AppFramework\Core\API; use \OCA\AppFramework\Db\Mapper; +use \OCA\AppFramework\Db\Entity; class FolderMapper extends Mapper implements IMapper { @@ -79,4 +80,20 @@ class FolderMapper extends Mapper implements IMapper { return $this->findAllRows($sql, $params); } + + + public function delete(Entity $entity){ + parent::delete($entity); + + // someone please slap me for doing this manually :P + // we needz CASCADE + FKs please + $sql = 'DELETE FROM `*PREFIX*news_feeds` WHERE `folder_id` = ?; '. + 'DELETE `items` FROM `*PREFIX*news_items` `items` '. + 'LEFT JOIN `*PREFIX*news_feeds` `feeds` ON '. + '`items`.`feed_id` = `feed`.`id` WHERE `feeds`.`id` IS NULL;'; + $params = array($entity->getId()); + $this->execute($sql, $params); + } + + }
\ No newline at end of file diff --git a/tests/db/FeedMapperTest.php b/tests/db/FeedMapperTest.php index 71f82a26b..27ea769d1 100644 --- a/tests/db/FeedMapperTest.php +++ b/tests/db/FeedMapperTest.php @@ -181,4 +181,44 @@ class FeedMapperTest extends \OCA\AppFramework\Utility\MapperTestUtility { } + public function testDelete(){ + $feed = new Feed(); + $feed->setId(3); + + $sql = 'DELETE FROM `*PREFIX*news_feeds` WHERE `id` = ?'; + $arguments = array($feed->getId()); + + $sql2 = 'DELETE FROM `*PREFIX*news_items` WHERE `feed_id` = ?'; + $arguments2 = array($feed->getId()); + + $pdoResult = $this->getMock('Result', + array('fetchRow')); + $pdoResult->expects($this->any()) + ->method('fetchRow'); + + $query = $this->getMock('Query', + array('execute')); + $query->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($arguments)) + ->will($this->returnValue($pdoResult)); + $this->api->expects($this->at(0)) + ->method('prepareQuery') + ->with($this->equalTo($sql)) + ->will(($this->returnValue($query))); + + $query->expects($this->at(1)) + ->method('execute') + ->with($this->equalTo($arguments2)) + ->will($this->returnValue($pdoResult)); + $this->api->expects($this->at(1)) + ->method('prepareQuery') + ->with($this->equalTo($sql2)) + ->will(($this->returnValue($query))); + + $this->mapper->delete($feed); + + } + + }
\ No newline at end of file diff --git a/tests/db/FolderMapperTest.php b/tests/db/FolderMapperTest.php index b1d4e5e1e..af3e4da3a 100644 --- a/tests/db/FolderMapperTest.php +++ b/tests/db/FolderMapperTest.php @@ -131,4 +131,46 @@ class FolderMapperTest extends \OCA\AppFramework\Utility\MapperTestUtility { $this->assertEquals($this->folders, $result); } + + public function testDelete(){ + $folder = new Folder(); + $folder->setId(3); + + $sql = 'DELETE FROM `*PREFIX*news_folders` WHERE `id` = ?'; + $arguments = array($folder->getId()); + + $sql2 = 'DELETE FROM `*PREFIX*news_feeds` WHERE `folder_id` = ?; '. + 'DELETE `items` FROM `*PREFIX*news_items` `items` '. + 'LEFT JOIN `*PREFIX*news_feeds` `feeds` ON '. + '`items`.`feed_id` = `feed`.`id` WHERE `feeds`.`id` IS NULL;'; + $arguments2 = array($folder->getId()); + + $pdoResult = $this->getMock('Result', + array('fetchRow')); + $pdoResult->expects($this->any()) + ->method('fetchRow'); + + $query = $this->getMock('Query', + array('execute')); + $query->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($arguments)) + ->will($this->returnValue($pdoResult)); + $this->api->expects($this->at(0)) + ->method('prepareQuery') + ->with($this->equalTo($sql)) + ->will(($this->returnValue($query))); + + $query->expects($this->at(1)) + ->method('execute') + ->with($this->equalTo($arguments2)) + ->will($this->returnValue($pdoResult)); + $this->api->expects($this->at(1)) + ->method('prepareQuery') + ->with($this->equalTo($sql2)) + ->will(($this->returnValue($query))); + + $this->folderMapper->delete($folder); + } + }
\ No newline at end of file |