summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDaniel Opitz <danopz@users.noreply.github.com>2017-08-14 10:34:53 +0200
committerBernhard Posselt <BernhardPosselt@users.noreply.github.com>2017-08-14 10:34:53 +0200
commita97dd58e3b499b60ac8b37786d402d7f2e371a88 (patch)
tree98bb8a6c750fb33fbef38d22407fa29fbf6c7b1e /tests
parent7d8a85c82c4c13a71b70ddb4ecb8c40ede4c9b70 (diff)
Split binary to booleans (#203)
* replaced old status with 2 flags for unread and starred * add fields to db, replace int(1,0) with booleans in sql queries, removed StatusFlags class + refactor code relying to it * add repair step for migration * again use integer(1,0) instead of bool in sql queries, because of sqlite doesn't support true/false * add/fix unit tests for new boolean status * set unread/starred flags as statements in sql * fixed mysql unknown column items.unread, fixed marking of read items on repair step * remove unnecessary bool casts * add empty checks to Items::is* methods * update migration to use native sql instead of the querybuilder * don't cast the flags manually, let the api do the work
Diffstat (limited to 'tests')
-rw-r--r--tests/Integration/Db/FeedMapperTest.php192
-rw-r--r--tests/Integration/Db/ItemMapperTest.php13
-rw-r--r--tests/Integration/Fixtures/ItemFixture.php3
-rw-r--r--tests/Integration/Fixtures/data/default.php14
-rw-r--r--tests/Integration/Fixtures/data/readitem.php12
-rw-r--r--tests/Integration/IntegrationTest.php5
-rw-r--r--tests/Unit/Controller/EntityApiSerializerTest.php10
-rw-r--r--tests/Unit/Db/FeedMapperTest.php303
-rw-r--r--tests/Unit/Db/ItemMapperTest.php550
-rw-r--r--tests/Unit/Db/ItemTest.php31
-rw-r--r--tests/Unit/Db/Mysql/ItemMapperTest.php119
-rw-r--r--tests/Unit/Fetcher/FeedFetcherTest.php2
-rw-r--r--tests/Unit/Migration/MigrateStatusFlagsTest.php99
-rw-r--r--tests/Unit/Service/FeedServiceTest.php14
-rw-r--r--tests/Unit/Service/ItemServiceTest.php44
-rw-r--r--tests/Unit/Service/StatusFlagTest.php57
16 files changed, 359 insertions, 1109 deletions
diff --git a/tests/Integration/Db/FeedMapperTest.php b/tests/Integration/Db/FeedMapperTest.php
index 0c13280f5..b429149a4 100644
--- a/tests/Integration/Db/FeedMapperTest.php
+++ b/tests/Integration/Db/FeedMapperTest.php
@@ -6,49 +6,231 @@
* later. See the COPYING file.
*
* @author Bernhard Posselt <dev@bernhard-posselt.com>
+ * @author Daniel Opitz <dev@copynpaste.de>
* @copyright Bernhard Posselt 2015
+ * @copyright Daniel Opitz 2017
*/
namespace OCA\News\Db;
-use \OCA\News\Tests\Integration\IntegrationTest;
+use OCA\News\Tests\Integration\Fixtures\FeedFixture;
+use OCA\News\Tests\Integration\IntegrationTest;
class FeedMapperTest extends IntegrationTest {
-
public function testFind () {
+ $feed = new FeedFixture();
+ $feed = $this->feedMapper->insert($feed);
+
+ $fetched = $this->feedMapper->find($feed->getId(), $this->user);
+
+ $this->assertInstanceOf(Feed::class, $fetched);
+ $this->assertEquals($feed->getLink(), $fetched->getLink());
+ }
+
+ /**
+ * @expectedException OCP\AppFramework\Db\DoesNotExistException
+ */
+ public function testFindNotExisting () {
+ $this->feedMapper->find(0, $this->user);
}
- /* TBD
public function testFindAll () {
+ $feeds = [
+ [
+ 'userId' => $this->user,
+ 'items' => []
+ ],
+ [
+ 'userId' => 'john',
+ 'items' => []
+ ]
+ ];
+ $this->loadFeedFixtures($feeds);
+
+ $fetched = $this->feedMapper->findAll();
+
+ $this->assertInternalType('array', $fetched);
+ $this->assertCount(2, $fetched);
+ $this->assertContainsOnlyInstancesOf(Feed::class, $fetched);
+
+ $this->tearDownUser('john');
+ }
+ public function testFindAllEmpty () {
+ $feeds = $this->feedMapper->findAll();
+
+ $this->assertInternalType('array', $feeds);
+ $this->assertCount(0, $feeds);
}
public function testFindAllFromUser () {
+ $feeds = [
+ [
+ 'userId' => $this->user,
+ 'items' => []
+ ],
+ [
+ 'userId' => 'john',
+ 'items' => []
+ ]
+ ];
+ $this->loadFeedFixtures($feeds);
+
+ $fetched = $this->feedMapper->findAllFromUser($this->user);
+
+ $this->assertInternalType('array', $fetched);
+ $this->assertCount(1, $fetched);
+ $this->assertContainsOnlyInstancesOf(Feed::class, $fetched);
+
+ $this->tearDownUser('john');
+ }
+
+ public function testFindAllFromUserNotExisting () {
+ $fetched = $this->feedMapper->findAllFromUser('notexistinguser');
+
+ $this->assertInternalType('array', $fetched);
+ $this->assertCount(0, $fetched);
}
public function testFindByUrlHash () {
+ $feed = new FeedFixture([
+ 'urlHash' => 'someTestHash',
+ 'title' => 'Some Test Title'
+ ]);
+ $feed = $this->feedMapper->insert($feed);
+
+ $fetched = $this->feedMapper->findByUrlHash($feed->getUrlHash(), $this->user);
+ $this->assertInstanceOf(Feed::class, $fetched);
+ $this->assertEquals($feed->getTitle(), $fetched->getTitle());
}
+ /**
+ * @expectedException OCP\AppFramework\Db\MultipleObjectsReturnedException
+ */
+ public function testFindByUrlHashMoreThanOneResult () {
+ $feed1 = $this->feedMapper->insert(new FeedFixture([
+ 'urlHash' => 'someTestHash'
+ ]));
+ $feed2 = $this->feedMapper->insert(new FeedFixture([
+ 'urlHash' => 'someTestHash'
+ ]));
+
+ $this->feedMapper->findByUrlHash($feed1->getUrlHash(), $this->user);
+ }
- public function testDelete () {
+ /**
+ * @expectedException OCP\AppFramework\Db\DoesNotExistException
+ */
+ public function testFindByUrlHashNotExisting () {
+ $this->feedMapper->findByUrlHash('some random hash', $this->user);
}
+ public function testDelete () {
+ $this->loadFixtures('default');
+
+ $feeds = $this->feedMapper->findAllFromUser($this->user);
+ $this->assertCount(4, $feeds);
+
+ $feed = reset($feeds);
+
+ $items = $this->itemMapper->findAllFeed(
+ $feed->getId(), 100, 0, true, false, $this->user
+ );
+ $this->assertCount(7, $items);
+
+ $this->feedMapper->delete($feed);
+
+ $this->assertCount(3, $this->feedMapper->findAllFromUser($this->user));
+
+ $items = $this->itemMapper->findAllFeed(
+ $feed->getId(), 100, 0, true, false, $this->user
+ );
+ $this->assertCount(0, $items);
+ }
+
public function testGetToDelete () {
+ $this->loadFeedFixtures([
+ ['deletedAt' => 1],
+ ['deletedAt' => 0],
+ ['deletedAt' => 1, 'userId' => 'john'],
+ ['deletedAt' => 1000]
+ ]);
+
+ $fetched = $this->feedMapper->getToDelete();
+
+ $this->assertInternalType('array', $fetched);
+ $this->assertCount(3, $fetched);
+ $this->assertContainsOnlyInstancesOf(Feed::class, $fetched);
+
+ $this->tearDownUser('john');
+ }
+
+ public function testGetToDeleteOlderThan () {
+ $this->loadFeedFixtures([
+ ['deletedAt' => 1],
+ ['deletedAt' => 0],
+ ['deletedAt' => 1, 'userId' => 'john'],
+ ['deletedAt' => 1000]
+ ]);
+
+ $fetched = $this->feedMapper->getToDelete(1000);
+
+ $this->assertInternalType('array', $fetched);
+ $this->assertCount(2, $fetched);
+ $this->assertContainsOnlyInstancesOf(Feed::class, $fetched);
+
+ $this->tearDownUser('john');
+ }
+ public function testGetToDeleteUser () {
+ $this->loadFeedFixtures([
+ ['deletedAt' => 1],
+ ['deletedAt' => 0],
+ ['deletedAt' => 1, 'userId' => 'john'],
+ ['deletedAt' => 1000]
+ ]);
+
+ $fetched = $this->feedMapper->getToDelete(2000, $this->user);
+
+ $this->assertInternalType('array', $fetched);
+ $this->assertCount(2, $fetched);
+ $this->assertContainsOnlyInstancesOf(Feed::class, $fetched);
+
+ $this->tearDownUser('john');
}
+ public function testGetToDeleteEmpty () {
+ $fetched = $this->feedMapper->getToDelete();
+
+ $this->assertInternalType('array', $fetched);
+ $this->assertCount(0, $fetched);
+ }
public function testDeleteUser () {
+ $this->loadFixtures('default');
- }*/
+ $this->assertCount(4, $this->feedMapper->findAllFromUser($this->user));
+ $items = $this->itemMapper->findAll(100, 0, 0, true, false, $this->user);
+ $this->assertCount(9, $items);
+ $this->feedMapper->deleteUser($this->user);
+
+ $this->assertCount(0, $this->feedMapper->findAllFromUser($this->user));
+
+ $items = $this->itemMapper->findAll(100, 0, 0, true, false, $this->user);
+ $this->assertCount(0, $items);
+ }
+
+ public function testDeleteUserNotExisting () {
+ $this->feedMapper->deleteUser('notexistinguser');
+ }
}
diff --git a/tests/Integration/Db/ItemMapperTest.php b/tests/Integration/Db/ItemMapperTest.php
index 6b621e070..fa9cc7d25 100644
--- a/tests/Integration/Db/ItemMapperTest.php
+++ b/tests/Integration/Db/ItemMapperTest.php
@@ -112,9 +112,8 @@ class ItemMapperTest extends IntegrationTest {
$this->itemMapper->readAll(PHP_INT_MAX, 10, $this->user);
- $status = StatusFlag::UNREAD;
$items = $this->itemMapper->findAll(
- 30, 0, $status, false, $this->user
+ 30, 0, 0, false, false, $this->user
);
$this->assertEquals(0, count($items));
@@ -144,9 +143,8 @@ class ItemMapperTest extends IntegrationTest {
$folderId, PHP_INT_MAX, 10, $this->user
);
- $status = StatusFlag::UNREAD;
$items = $this->itemMapper->findAll(
- 30, 0, $status, false, $this->user
+ 30, 0, 0, false, false, $this->user
);
$this->assertEquals(1, count($items));
@@ -176,9 +174,8 @@ class ItemMapperTest extends IntegrationTest {
$feedId, PHP_INT_MAX, 10, $this->user
);
- $status = StatusFlag::UNREAD;
$items = $this->itemMapper->findAll(
- 30, 0, $status, false, $this->user
+ 30, 0, 0, false, false, $this->user
);
$this->assertEquals(2, count($items));
@@ -246,7 +243,7 @@ class ItemMapperTest extends IntegrationTest {
// 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());
+ $this->assertFalse($item->isUnread());
}
// assert that a different item is not read
@@ -277,7 +274,7 @@ class ItemMapperTest extends IntegrationTest {
if ($item->getId() === $duplicateItem->getId()) {
$this->assertTrue($item->isUnread());
} else {
- $this->assertTrue($item->isRead());
+ $this->assertFalse($item->isUnread());
}
}
diff --git a/tests/Integration/Fixtures/ItemFixture.php b/tests/Integration/Fixtures/ItemFixture.php
index 2dfe79c28..0832b0ef4 100644
--- a/tests/Integration/Fixtures/ItemFixture.php
+++ b/tests/Integration/Fixtures/ItemFixture.php
@@ -29,7 +29,8 @@ class ItemFixture extends Item {
'enclosureMime' => 'video/mpeg',
'enclosureLink' => 'http://google.de/web.webm',
'feedId' => 0,
- 'status' => 2,
+ 'unread' => true,
+ 'starred' => false,
'lastModified' => 113,
'rtl' => false,
], $defaults);
diff --git a/tests/Integration/Fixtures/data/default.php b/tests/Integration/Fixtures/data/default.php
index d87bb1e6f..862515b12 100644
--- a/tests/Integration/Fixtures/data/default.php
+++ b/tests/Integration/Fixtures/data/default.php
@@ -20,12 +20,12 @@ return [
'articlesPerUpdate' => 1,
'items' => [
['title' => 'a title1', 'guid' => 'abc'],
- ['title' => 'a title2', 'status' => 4, 'guid' => 'def'],
- ['title' => 'a title3', 'status' => 6, 'guid' => 'gih'],
- ['title' => 'del1', 'status' => 0],
- ['title' => 'del2', 'status' => 0],
- ['title' => 'del3', 'status' => 0],
- ['title' => 'del4', 'status' => 0]
+ ['title' => 'a title2', 'unread' => false, 'starred' => true, 'guid' => 'def'],
+ ['title' => 'a title3', 'unread' => true, 'starred' => true, 'guid' => 'gih'],
+ ['title' => 'del1', 'unread' => false, 'starred' => false],
+ ['title' => 'del2', 'unread' => false, 'starred' => false],
+ ['title' => 'del3', 'unread' => false, 'starred' => false],
+ ['title' => 'del4', 'unread' => false, 'starred' => false]
]
],
[
@@ -69,7 +69,7 @@ return [
'title' => 'fourth feed',
'url' => 'http://blog.fefe.de',
'items' => [
- ['title' => 'no folder', 'status' => 0]
+ ['title' => 'no folder', 'unread' => false, 'starred' => false]
]
]
]
diff --git a/tests/Integration/Fixtures/data/readitem.php b/tests/Integration/Fixtures/data/readitem.php
index 0a587bad7..8f953a845 100644
--- a/tests/Integration/Fixtures/data/readitem.php
+++ b/tests/Integration/Fixtures/data/readitem.php
@@ -15,18 +15,18 @@ return [
'title' => 'john feed',
'userId' => 'john',
'items' => [
- ['title' => 'blubb', 'status' => 2],
- ['title' => 'blubb', 'status' => 2]
+ ['title' => 'blubb', 'unread' => true, 'starred' => false],
+ ['title' => 'blubb', 'unread' => true, 'starred' => false]
]
],
[
'title' => 'test feed',
'userId' => 'test',
'items' => [
- ['title' => 'blubb', 'status' => 2],
- ['title' => 'blubbs', 'status' => 2],
- ['title' => 'blubb', 'status' => 2],
- ['title' => 'blubb', 'status' => 2]
+ ['title' => 'blubb', 'unread' => true, 'starred' => false],
+ ['title' => 'blubbs', 'unread' => true, 'starred' => false],
+ ['title' => 'blubb', 'unread' => true, 'starred' => false],
+ ['title' => 'blubb', 'unread' => true, 'starred' => false]
]
]
]
diff --git a/tests/Integration/IntegrationTest.php b/tests/Integration/IntegrationTest.php
index c14d3007a..f14a1263b 100644
--- a/tests/Integration/IntegrationTest.php
+++ b/tests/Integration/IntegrationTest.php
@@ -124,7 +124,10 @@ abstract class IntegrationTest extends \Test\TestCase {
$feed = new FeedFixture($feedFixture);
$feed->setFolderId($folderId);
$feedId = $this->loadFixture($feed);
- $this->loadItemFixtures($feedFixture['items'], $feedId);
+
+ if (!empty($feedFixture['items'])) {
+ $this->loadItemFixtures($feedFixture['items'], $feedId);
+ }
}
}
diff --git a/tests/Unit/Controller/EntityApiSerializerTest.php b/tests/Unit/Controller/EntityApiSerializerTest.php
index ec357e7f2..63de1ed7e 100644
--- a/tests/Unit/Controller/EntityApiSerializerTest.php
+++ b/tests/Unit/Controller/EntityApiSerializerTest.php
@@ -29,7 +29,7 @@ class EntityApiSerializerTest extends \PHPUnit_Framework_TestCase {
public function testSerializeSingle() {
$item = new Item();
- $item->setUnread();
+ $item->setUnread(true);
$serializer = new EntityApiSerializer('items');
$result = $serializer->serialize($item);
@@ -40,10 +40,10 @@ class EntityApiSerializerTest extends \PHPUnit_Framework_TestCase {
public function testSerializeMultiple() {
$item = new Item();
- $item->setUnread();
+ $item->setUnread(true);
$item2 = new Item();
- $item2->setRead();
+ $item2->setUnread(false);
$serializer = new EntityApiSerializer('items');
@@ -66,10 +66,10 @@ class EntityApiSerializerTest extends \PHPUnit_Framework_TestCase {
public function testCompleteArraysTransformed() {
$item = new Item();
- $item->setUnread();
+ $item->setUnread(true);
$item2 = new Item();
- $item2->setRead();
+ $item2->setUnread(false);
$serializer = new EntityApiSerializer('items');
diff --git a/tests/Unit/Db/FeedMapperTest.php b/tests/Unit/Db/FeedMapperTest.php
deleted file mode 100644
index ed74b235e..000000000
--- a/tests/Unit/Db/FeedMapperTest.php
+++ /dev/null
@@ -1,303 +0,0 @@
-<?php
-/**
- * Nextcloud - News
- *
- * This file is licensed under the Affero General Public License version 3 or
- * later. See the COPYING file.
- *
- * @author Alessandro Cosentino <cosenal@gmail.com>
- * @author Bernhard Posselt <dev@bernhard-posselt.com>
- * @copyright Alessandro Cosentino 2012
- * @copyright Bernhard Posselt 2012, 2014
- */
-
-namespace OCA\News\Db;
-
-
-use OCA\News\Utility\Time;
-
-class FeedMapperTest extends \OCA\News\Tests\Unit\Db\MapperTestUtility {
-
- private $mapper;
- private $feeds;
-
- protected function setUp(){
- parent::setUp();
-
- $this->mapper = new FeedMapper($this->db, new Time());
-
- // create mock feeds
- $feed1 = new Feed();
- $feed2 = new Feed();
-
- $this->feeds = [$feed1, $feed2];
- $this->user = 'herman';
- }
-
-
- public function testFind(){
- $userId = 'john';
- $id = 3;
- $rows = [
- ['id' => $this->feeds[0]->getId()],
- ];
- $sql = 'SELECT `feeds`.*, COUNT(`items`.`id`) AS `unread_count` ' .
- 'FROM `*PREFIX*news_feeds` `feeds` ' .
- 'LEFT JOIN `*PREFIX*news_items` `items` ' .
- 'ON `feeds`.`id` = `items`.`feed_id` ' .
- 'AND (`items`.`status` & ' . StatusFlag::UNREAD . ') = ' .
- StatusFlag::UNREAD . ' ' .
- 'WHERE `feeds`.`id` = ? ' .
- 'AND `feeds`.`user_id` = ? ' .
- 'GROUP BY `feeds`.`id`';
- $params = [$id, $userId];
- $this->setMapperResult($sql, $params, $rows);
-
- $result = $this->mapper->find($id, $userId);
- $this->assertEquals($this->feeds[0], $result);
-
- }
-
-
- public function testFindNotFound(){
- $userId = 'john';
- $id = 3;
- $sql = 'SELECT `feeds`.*, COUNT(`items`.`id`) AS `unread_count` ' .
- 'FROM `*PREFIX*news_feeds` `feeds` ' .
- 'LEFT JOIN `*PREFIX*news_items` `items` ' .
- 'ON `feeds`.`id` = `items`.`feed_id` ' .
- 'AND (`items`.`status` & ' . StatusFlag::UNREAD . ') = ' .
- StatusFlag::UNREAD . ' ' .
- 'WHERE `feeds`.`id` = ? ' .
- 'AND `feeds`.`user_id` = ? ' .
- 'GROUP BY `feeds`.`id`';
- $params = [$id, $userId];
- $this->setMapperResult($sql, $params);
-
- $this->setExpectedException(
- '\OCP\AppFramework\Db\DoesNotExistException'
- );
- $this->mapper->find($id, $userId);
- }
-
-
- public function testFindMoreThanOneResultFound(){
- $userId = 'john';
- $id = 3;
- $rows = [
- ['id' => $this->feeds[0]->getId()],
- ['id' => $this->feeds[1]->getId()]
- ];
- $sql = 'SELECT `feeds`.*, COUNT(`items`.`id`) AS `unread_count` ' .
- 'FROM `*PREFIX*news_feeds` `feeds` ' .
- 'LEFT JOIN `*PREFIX*news_items` `items` ' .
- 'ON `feeds`.`id` = `items`.`feed_id` ' .
- 'AND (`items`.`status` & ' . StatusFlag::UNREAD . ') = ' .
- StatusFlag::UNREAD . ' ' .
- 'WHERE `feeds`.`id` = ? ' .
- 'AND `feeds`.`user_id` = ? ' .
- 'GROUP BY `feeds`.`id`';
- $params = [$id, $userId];
- $this->setMapperResult($sql, $params, $rows);
-
- $this->setExpectedException(
- '\OCP\AppFramework\Db\MultipleObjectsReturnedException'
- );
- $this->mapper->find($id, $userId);
- }
-
-
- public function testFindAll(){
- $rows = [
- ['id' => $this->feeds[0]->getId()],
- ['id' => $this->feeds[1]->getId()]
- ];
- $sql = 'SELECT `feeds`.*, COUNT(`items`.`id`) AS `unread_count` ' .
- 'FROM `*PREFIX*news_feeds` `feeds` ' .
- 'LEFT OUTER JOIN `*PREFIX*news_folders` `folders` '.
- 'ON `feeds`.`folder_id` = `folders`.`id` ' .
- 'LEFT JOIN `*PREFIX*news_items` `items` ' .
- 'ON `feeds`.`id` = `items`.`feed_id` ' .
- 'AND (`items`.`status` & ' . StatusFlag::UNREAD . ') = ' .
- StatusFlag::UNREAD . ' ' .
- 'WHERE (`feeds`.`folder_id` = 0 ' .
- 'OR `folders`.`deleted_at` = 0' .
- ')' .
- 'AND `feeds`.`deleted_at` = 0 ' .
- 'GROUP BY `feeds`.`id`';
-
- $this->setMapperResult($sql, [], $rows);
-
- $result = $this->mapper->findAll();
- $this->assertEquals($this->feeds, $result);
- }
-
-
- public function testFindAllFromUser(){
- $userId = 'john';
- $rows = [
- ['id' => $this->feeds[0]->getId()],
- ['id' => $this->feeds[1]->getId()]
- ];
- $sql = 'SELECT `feeds`.*, COUNT(`items`.`id`) AS `unread_count` ' .
- 'FROM `*PREFIX*news_feeds` `feeds` ' .
- 'LEFT OUTER JOIN `*PREFIX*news_folders` `folders` '.
- 'ON `feeds`.`folder_id` = `folders`.`id` ' .
- 'LEFT JOIN `*PREFIX*news_items` `items` ' .
- 'ON `feeds`.`id` = `items`.`feed_id` ' .
- 'AND (`items`.`status` & ' . StatusFlag::UNREAD . ') = ' .
- StatusFlag::UNREAD . ' ' .
- 'WHERE `feeds`.`user_id`