summaryrefslogtreecommitdiffstats
path: root/tests/Integration/Db/ItemMapperTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Integration/Db/ItemMapperTest.php')
-rw-r--r--tests/Integration/Db/ItemMapperTest.php297
1 files changed, 297 insertions, 0 deletions
diff --git a/tests/Integration/Db/ItemMapperTest.php b/tests/Integration/Db/ItemMapperTest.php
new file mode 100644
index 000000000..14c989cbf
--- /dev/null
+++ b/tests/Integration/Db/ItemMapperTest.php
@@ -0,0 +1,297 @@
+<?php
+/**
+ * ownCloud - News
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Bernhard Posselt <dev@bernhard-posselt.com>
+ * @copyright Bernhard Posselt 2015
+ */
+
+namespace OCA\News\Db;
+
+use OCA\News\Tests\Integration\Fixtures\FeedFixture;
+use OCA\News\Tests\Integration\Fixtures\ItemFixture;
+use OCA\News\Tests\Integration\IntegrationTest;
+
+class ItemMapperTest extends IntegrationTest {
+
+ public function testFind() {
+ $feed = new FeedFixture();
+ $feed = $this->feedMapper->insert($feed);
+
+ $item = new ItemFixture(['feedId' => $feed->getId()]);
+
+ $item = $this->itemMapper->insert($item);
+
+ $fetched = $this->itemMapper->find($item->getId(), $this->user);
+
+ $this->assertEquals($item->getTitle(), $fetched->getTitle());
+ }
+
+ /**
+ * Same as whereId with easier title search
+ * @param $title
+ * @return mixed
+ */
+ private function whereTitleId($title) {
+ return $this->findItemByTitle($title)->getId();
+ }
+
+ /**
+ * @expectedException OCP\AppFramework\Db\DoesNotExistException
+ */
+ public function testFindNotFoundWhenDeletedFeed() {
+ $this->loadFixtures('default');
+
+ $id = $this->whereTitleId('not found feed');
+ $this->itemMapper->find($id, $this->user);
+ }
+
+
+ /**
+ * @expectedException OCP\AppFramework\Db\DoesNotExistException
+ */
+ public function testFindNotFoundWhenDeletedFolder() {
+ $this->loadFixtures('default');
+
+
+ $id = $this->whereTitleId('not found folder');
+ $this->itemMapper->find($id, $this->user);
+ }
+
+
+ private function deleteReadOlderThanThreshold() {
+ $this->loadFixtures('default');
+
+ $this->itemMapper->deleteReadOlderThanThreshold(1);
+
+ $this->itemMapper->find($this->whereTitleId('a title1'), $this->user);
+ $this->itemMapper->find($this->whereTitleId('a title2'), $this->user);
+ $this->itemMapper->find($this->whereTitleId('a title3'), $this->user);
+ $this->itemMapper->find($this->whereTitleId('del3'), $this->user);
+ $this->itemMapper->find($this->whereTitleId('del4'), $this->user);
+ }
+
+ /**
+ * @expectedException OCP\AppFramework\Db\DoesNotExistException
+ */
+ public function testDeleteOlderThanThresholdOne() {
+ $this->loadFixtures('default');
+ $id = $this->whereTitleId('del1');
+
+ $this->deleteReadOlderThanThreshold();
+
+ $this->itemMapper->find($id, $this->user);
+ }
+
+ /**
+ * @expectedException OCP\AppFramework\Db\DoesNotExistException
+ */
+ public function testDeleteOlderThanThresholdTwo() {
+ $this->loadFixtures('default');
+ $id = $this->whereTitleId('del2');
+
+ $this->deleteReadOlderThanThreshold();
+
+ $this->itemMapper->find($id, $this->user);
+ }
+
+
+ public function testStarredCount () {
+ $this->loadFixtures('default');
+
+ $count = $this->itemMapper->starredCount($this->user);
+ $this->assertEquals(2, $count);
+ }
+
+
+ public function testReadAll () {
+ $this->loadFixtures('default');
+
+ $this->itemMapper->readAll(PHP_INT_MAX, 10, $this->user);
+
+ $status = StatusFlag::UNREAD;
+ $items = $this->itemMapper->findAll(
+ 30, 0, $status, false, $this->user
+ );
+
+ $this->assertEquals(0, count($items));
+
+ $itemId = $this->whereTitleId('a title1');
+ $item = $this->itemMapper->find($itemId, $this->user);
+
+ $this->assertEquals(10, $item->getLastModified());
+
+ $itemId = $this->whereTitleId('a title3');
+ $item = $this->itemMapper->find($itemId, $this->user);
+
+ $this->assertEquals(10, $item->getLastModified());
+
+ $itemId = $this->whereTitleId('a title9');
+ $item = $this->itemMapper->find($itemId, $this->user);
+
+ $this->assertEquals(10, $item->getLastModified());
+ }
+
+
+ public function testReadFolder () {
+ $this->loadFixtures('default');
+
+ $folderId = $this->findFolderByName('first folder')->getId();
+ $this->itemMapper->readFolder(
+ $folderId, PHP_INT_MAX, 10, $this->user
+ );
+
+ $status = StatusFlag::UNREAD;
+ $items = $this->itemMapper->findAll(
+ 30, 0, $status, false, $this->user
+ );
+
+ $this->assertEquals(1, count($items));
+
+ $item = $this->findItemByTitle('a title1');
+ $item = $this->itemMapper->find($item->getId(), $this->user);
+
+ $this->assertEquals(10, $item->getLastModified());
+
+ $item = $this->findItemByTitle('a title3');
+ $item = $this->itemMapper->find($item->getId(), $this->user);
+
+ $this->assertEquals(10, $item->getLastModified());
+
+ $item = $this->findItemByTitle('a title9');
+ $item = $this->itemMapper->find($item->getId(), $this->user);
+
+ $this->assertTrue($item->isUnread());
+ }
+
+
+ public function testReadFeed () {
+ $this->loadFixtures('default');
+
+ $feedId = $this->findFeedByTitle('third feed')->getId();
+ $this->itemMapper->readFeed(
+ $feedId, PHP_INT_MAX, 10, $this->user
+ );
+
+ $status = StatusFlag::UNREAD;
+ $items = $this->itemMapper->findAll(
+ 30, 0, $status, false, $this->user
+ );
+
+ $this->assertEquals(2, count($items));
+
+ $item = $this->findItemByTitle('a title9');
+ $item = $this->itemMapper->find($item->getId(), $this->user);
+
+ $this->assertEquals(10, $item->getLastModified());
+
+ $item = $this->findItemByTitle('a title3');
+ $item = $this->itemMapper->find($item->getId(), $this->user);
+ $this->assertTrue($item->isUnread());
+
+
+ $item = $this->findItemByTitle('a title1');
+ $item = $this->itemMapper->find($item->getId(), $this->user);
+ $this->assertTrue($item->isUnread());
+ }
+
+
+ public function testDeleteUser () {
+ $this->loadFixtures('default');
+
+ $this->itemMapper->deleteUser($this->user);
+ $id = $this->itemMapper->getNewestItemId($this->user);
+
+ $this->assertEquals(0, $id);
+ }
+
+ public function testGetNewestItemId () {
+ $this->loadFixtures('default');
+
+ $id = $this->itemMapper->getNewestItemId($this->user);
+
+ $itemId = $this->whereTitleId('no folder');
+ $this->assertEquals($itemId, $id);
+ }
+
+ public function testFindAllUnreadOrStarred () {
+ $this->loadFixtures('default');
+
+ $items = $this->itemMapper->findAllUnreadOrStarred($this->user);
+ $this->assertEquals(4, count($items));
+ }
+
+
+ public function testReadItem() {
+ $this->loadFixtures('readitem');
+ // assert that all items are unread
+ $feed = $this->feedMapper->where(['userId' => 'john'])[0];
+ $items = $this->itemMapper->where(['feedId' => $feed->getId()]);
+ foreach ($items as $item) {
+ $this->assertTrue($item->isUnread());
+ }
+ $feed = $this->feedMapper->where(['userId' => 'test'])[0];
+ $items = $this->itemMapper->where(['feedId' => $feed->getId()]);
+ foreach ($items as $item) {
+ $this->assertTrue($item->isUnread());
+ }
+
+ // read an item
+ $duplicateItem = $this->itemMapper->where(['feedId' => $feed->getId()])[0];
+ $this->itemMapper->readItem($duplicateItem->getId(), true, 1000, $this->user);
+
+ // assert that all test user's same items are read
+ $items = $this->itemMapper->where(['feedId' => $feed->getId(), 'title' => 'blubb']);
+ foreach ($items as $item) {
+ $this->assertTrue($item->isRead());
+ }
+
+ // assert that a different item is not read
+ $items = $this->itemMapper->where(['feedId' => $feed->getId(), 'title' => 'blubbs']);
+ foreach ($items as $item) {
+ $this->assertTrue($item->isUnread());
+ }
+
+ // assert that other user's same items stayed the same
+ $johnsFeed = $this->feedMapper->where(['userId' => 'john'])[0];
+ $items = $this->itemMapper->where(['feedId' => $johnsFeed->getId()]);
+ foreach ($items as $item) {
+ $this->assertTrue($item->isUnread());
+ }
+ }
+
+ public function testUnreadItem() {
+ $this->loadFixtures('readitem');
+ // unread an item
+ $feed = $this->feedMapper->where(['userId' => 'test'])[0];
+ $duplicateItem = $this->itemMapper->where(['feedId' => $feed->getId()])[0];
+ $this->itemMapper->readItem($duplicateItem->getId(), true, 1000, $this->user);
+ $this->itemMapper->readItem($duplicateItem->getId(), false, 1000, $this->user);
+
+ // assert that only one item is now unread
+ $items = $this->itemMapper->where(['feedId' => $feed->getId(), 'title' => 'blubb']);
+ foreach ($items as $item) {
+ if ($item->getId() === $duplicateItem->getId()) {
+ $this->assertTrue($item->isUnread());
+ } else {
+ $this->assertTrue($item->isRead());
+ }
+ }
+
+ // assert that other user's same items stayed the same
+ $johnsFeed = $this->feedMapper->where(['userId' => 'john'])[0];
+ $items = $this->itemMapper->where(['feedId' => $johnsFeed->getId()]);
+ foreach ($items as $item) {
+ $this->assertTrue($item->isUnread());
+ }
+ }
+
+ protected function tearDown() {
+ parent::tearDown();
+ $this->clearUserNewsDatabase('john');
+ }
+
+}