summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--db/feedmapper.php12
-rw-r--r--db/foldermapper.php17
-rw-r--r--tests/db/FeedMapperTest.php40
-rw-r--r--tests/db/FolderMapperTest.php42
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