summaryrefslogtreecommitdiffstats
path: root/tests/integration/bootstrap.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/integration/bootstrap.php')
-rw-r--r--tests/integration/bootstrap.php151
1 files changed, 145 insertions, 6 deletions
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();
}