From 5395685b0556921bc87ccc7e4076caabd16f0bcf Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Thu, 6 Nov 2014 14:05:38 +0100 Subject: add fixtures import --- tests/integration/bootstrap.php | 151 ++++++++++++++++++++++++++++++-- tests/integration/db/ItemMapperTest.php | 59 ++----------- tests/integration/fixtures/feeds.json | 88 +++++++++++++++++++ tests/integration/fixtures/folders.json | 17 ++++ tests/integration/fixtures/items.json | 5 ++ 5 files changed, 260 insertions(+), 60 deletions(-) create mode 100644 tests/integration/fixtures/feeds.json create mode 100644 tests/integration/fixtures/folders.json create mode 100644 tests/integration/fixtures/items.json (limited to 'tests') diff --git a/tests/integration/bootstrap.php b/tests/integration/bootstrap.php index 0f010b8f4..8096cbacd 100644 --- a/tests/integration/bootstrap.php +++ b/tests/integration/bootstrap.php @@ -3,11 +3,42 @@ namespace OCA\News\Tests\Integration; require_once __DIR__ . '/../../../../lib/base.php'; +use \OCA\News\AppInfo\Application; +use \OCA\News\Db\Folder; +use \OCA\News\Db\Feed; +use \OCA\News\Db\Item; class NewsIntegrationTest extends \PHPUnit_Framework_TestCase { protected $userId = 'test'; protected $userPassword = 'test'; + protected $ownCloudVersion; + protected $container; + protected $folderMapper; + protected $feedMapper; + protected $itemMapper; + protected $folders = []; + protected $feeds = []; + protected $items = []; + + protected function setUp() { + $this->ownCloudVersion = \OCP\Util::getVersion(); + $this->cleanUp(); + $this->setupUser($this->userId, $this->userPassword); + + $app = new Application(); + $this->container = $app->getContainer(); + $this->itemMapper = $this->container->query('ItemMapper'); + $this->feedMapper = $this->container->query('FeedMapper'); + $this->folderMapper = $this->container->query('FolderMapper'); + + $this->loadFixtures( + $this->folderMapper, + $this->feedMapper, + $this->itemMapper + ); + } + protected function clearNewsDatabase($user='test') { $sql = [ @@ -24,12 +55,119 @@ class NewsIntegrationTest extends \PHPUnit_Framework_TestCase { } + protected function loadFixtures($folderMapper, $feedMapper, $itemMapper) { + $folders = file_get_contents(__DIR__ . '/fixtures/folders.json'); + $feeds = file_get_contents(__DIR__ . '/fixtures/feeds.json'); + $items = file_get_contents(__DIR__ . '/fixtures/items.json'); + + $folders = json_decode($folders, true); + $feeds = json_decode($feeds, true); + $items = json_decode($items, true); + + // feeds in folders + foreach($folders as $folder) { + $newFolder = $this->createFolder($folder); + $this->folders[$newFolder->getName()] = $newFolder; + + if (array_key_exists($folder['name'], $feeds)) { + foreach ($feeds[$folder['name']] as $feed) { + $feed['folderId'] = $newFolder->getId(); + $newFeed = $this->createFeed($feed); + $this->feeds[$newFeed->getTitle()] = $newFeed; + + if (array_key_exists($feed['title'], $items)) { + foreach ($items[$feed['title']] as $item) { + $item['feedId'] = $newFeed->getId(); + $this->items[$item->getTitle()] = + $this->createItem($item); + } + } + } + } + } + + // feeds in no folders + if (array_key_exists('no feed', $feeds)) { + foreach ($feeds['no feed'] as $feed) { + $feed['folderId'] = 0; + $this->feeds[] = $this->createFeed($feed); + + if (array_key_exists($feed['title'], $items)) { + foreach ($items[$feed['title']] as $item) { + $item['feedId'] = $newFeed->getId(); + $this->items[$item->getTitle()] = + $this->createItem($item); + } + } + } + } + } + + + private function createFolder($folder) { + $newFolder = new Folder(); + $newFolder->setName($folder['name']); + $newFolder->setUserId($this->userId); + $newFolder->setParentId(0); + $newFolder->setOpened($folder['opened']); + $newFolder->setDeletedAt($folder['deletedAt']); + return $this->folderMapper->insert($newFolder); + } + + + private function createFeed($feed) { + $newFeed = new Feed(); + $newFeed->setUserId($this->userId); + $newFeed->setFolderId($feed['folderId']); + $newFeed->setTitle($feed['title']); + $newFeed->setUrl($feed['url']); + $newFeed->setLocation($feed['location']); + $newFeed->setFaviconLink($feed['faviconLink']); + $newFeed->setAdded($feed['added']); + $newFeed->setLink($feed['link']); + $newFeed->setPreventUpdate($feed['preventUpdate']); + $newFeed->setDeletedAt($feed['deletedAt']); + $newFeed->setArticlesPerUpdate($feed['articlesPerUpdate']); + $newFeed->setLastModified($feed['lastModified']); + $newFeed->setEtag($feed['etag']); + return $this->feedMapper->insert($newFeed); + } + + + private function createItem($item) { + $newItem = new Item(); + $newItem->setFeedId($item['feedId']); + $newItem->setStatus($item['status']); + $newItem->setBody($item['body']); + $newItem->setTitle($item['title']); + $newItem->setAuthor($item['author']); + $newItem->setGuid($item['guid']); + $newItem->setUrl($item['url']); + $newItem->setPubDate($item['pubDate']); + $newItem->setLastModified($item['lastModified']); + $newItem->setEnclosureMime($item['enclosureMime']); + $newItem->setEnclosureLink($item['enclosureLink']); + return $this->itemMapper->insert($item); + } + + + protected function whenOlderThan($olderThan, $callback) { + $ocVersion = $this->ownCloudVersion; + if (version_compare(implode('.', $ocVersion), $olderThan, '<=')) { + $callback(); + } + } + + protected function setupUser($user='test', $password='test') { $userManager = \OC::$server->getUserManager(); if ($userManager->userExists($user)) { $userManager->get($user)->delete(); - $userManager->delete($user); + + $this->whenOlderThan('7.8', function () use ($user, $userManager) { + $userManager->delete($user); + }); } $userManager->createUser($user, $password); @@ -38,14 +176,15 @@ class NewsIntegrationTest extends \PHPUnit_Framework_TestCase { $session->login($user, $password); } - - protected function setUp() { - $this->setupUser($this->userId, $this->userPassword); + private function cleanUp() { + $this->clearNewsDatabase($this->userId); + $this->folders = []; + $this->feeds = []; + $this->items = []; } - protected function tearDown() { - $this->clearNewsDatabase($this->userId); + $this->cleanUp(); } diff --git a/tests/integration/db/ItemMapperTest.php b/tests/integration/db/ItemMapperTest.php index 1ae0d117d..dcc27ab98 100644 --- a/tests/integration/db/ItemMapperTest.php +++ b/tests/integration/db/ItemMapperTest.php @@ -2,71 +2,22 @@ namespace OCA\News\Db; -use \OCA\News\AppInfo\Application; use \OCA\News\Tests\Integration\NewsIntegrationTest; class ItemMapperTest extends NewsIntegrationTest { - private $container; - private $itemMapper; - protected function setUp() { - parent::setUp(); - $app = new Application(); - $this->container = $app->getContainer(); - $this->itemMapper = $this->container->query('ItemMapper'); - $this->feedMapper = $this->container->query('FeedMapper'); - $this->folderMapper = $this->container->query('FolderMapper'); - } - - - private function setupFeedAndFolder($feedOptions=[], $folderOptions=[]) { - $folderDefault = [ - 'id' => 5, - 'userId' => $this->userId, - 'name' => 'a folder', - 'parentId' => 0 - ]; - $feedDefault = [ - 'id' => 3, - 'userId' => $this->userId, - 'url' => 'http://google.com', - 'title' => 'le feed', - 'folderId' => 5 - ]; - - $folderDefault = array_merge($folderDefault, $folderOptions); - $feedDefault = array_merge($feedDefault, $feedOptions); - - $feed = new Feed(); - foreach ($feedDefault as $key => $value) { - $method = 'set' . ucfirst($key); - $feed->$method($value); - } - $this->feedMapper->insert($feed); - - $folder = new Folder(); - foreach ($folderDefault as $key => $value) { - $method = 'set' . ucfirst($key); - $folder->$method($value); - } - $this->folderMapper->insert($folder); - - } - - - public function testInsert() { - $this->setupFeedAndFolder(); + public function testFind() { + $feedId = $this->feeds['first feed']->getId(); $item = new Item(); - $item->setTitle('my title'); - $item->setGuid('test'); - $item->setFeedId(3); + $item->setTitle('my title thats long'); + $item->setGuid('a doner'); + $item->setFeedId($feedId); $item->setUnread(); $item->setBody('Döner'); $created = $this->itemMapper->insert($item); - $fetched = $this->itemMapper->find($created->getId(), $this->userId); $this->assertEquals($item->getTitle(), $fetched->getTitle()); diff --git a/tests/integration/fixtures/feeds.json b/tests/integration/fixtures/feeds.json new file mode 100644 index 000000000..c3848bd78 --- /dev/null +++ b/tests/integration/fixtures/feeds.json @@ -0,0 +1,88 @@ +{ + "first folder": [ + { + "title": "first feed", + "folderName": "first folder", + "url": "http://google.de", + "deletedAt": 0, + "location": "http://feed.com/rss", + "faviconLink": "Http://feed.com/favicon.ico", + "added": 3000, + "link": "http://feed.com/rss", + "preventUpdate": false, + "articlesPerUpdate": 40, + "lastModified": "", + "etag": "" + }, + { + "title": "second feed", + "folderName": "first folder", + "url": "http://golem.de", + "deletedAt": 0, + "location": "http://feed.com/rss", + "faviconLink": "Http://feed.com/favicon.ico", + "added": 3000, + "link": "http://feed.com/rss", + "preventUpdate": false, + "articlesPerUpdate": 40, + "lastModified": "", + "etag": "" + } + ], + "second folder": [ + { + "title": "third feed", + "url": "http://heise.de", + "deletedAt": 0, + "location": "http://feed.com/rss", + "faviconLink": "Http://feed.com/favicon.ico", + "added": 3000, + "link": "http://feed.com/rss", + "preventUpdate": false, + "articlesPerUpdate": 40, + "lastModified": "", + "etag": "" + }, + { + "title": "fifth feed", + "url": "http://gremlins.de", + "deletedAt": 999999999, + "location": "http://feed.com/rss", + "faviconLink": "Http://feed.com/favicon.ico", + "added": 3000, + "link": "http://feed.com/rss", + "preventUpdate": false, + "articlesPerUpdate": 40, + "lastModified": "", + "etag": "" + } + ], + "no folder": [{ + "title": "fourth feed", + "url": "http://blog.fefe.de", + "deletedAt": 0, + "location": "http://feed.com/rss", + "faviconLink": "Http://feed.com/favicon.ico", + "added": 3000, + "link": "http://feed.com/rss", + "preventUpdate": false, + "articlesPerUpdate": 40, + "lastModified": "", + "etag": "" + } + ], + "third folder": [{ + "title": "fifth feed", + "url": "http://prolinux.de", + "deletedAt": 0, + "location": "http://feed.com/rss", + "faviconLink": "Http://feed.com/favicon.ico", + "added": 3000, + "link": "http://feed.com/rss", + "preventUpdate": false, + "articlesPerUpdate": 40, + "lastModified": "", + "etag": "" + } + ] +} \ No newline at end of file diff --git a/tests/integration/fixtures/folders.json b/tests/integration/fixtures/folders.json new file mode 100644 index 000000000..3c79ef52b --- /dev/null +++ b/tests/integration/fixtures/folders.json @@ -0,0 +1,17 @@ +[ + { + "name": "first folder", + "deletedAt": 0, + "opened": true + }, + { + "name": "second folder", + "deletedAt": 0, + "opened": false + }, + { + "name": "third folder", + "deletedAt": 9999999999, + "opened": true + } +] \ No newline at end of file diff --git a/tests/integration/fixtures/items.json b/tests/integration/fixtures/items.json new file mode 100644 index 000000000..56c70edbe --- /dev/null +++ b/tests/integration/fixtures/items.json @@ -0,0 +1,5 @@ +{ + "first feed": [ + + ] +} \ No newline at end of file -- cgit v1.2.3