blob: 1baa3135997789d8aa3ef7f38570660617f54523 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
<?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\Tests\Integration;
use PHPUnit_Framework_TestCase;
use OCP\IDb;
use OCP\IUserSession;
use OCP\IUserManager;
use OCA\News\AppInfo\Application;
use OCA\News\Tests\Integration\Fixtures\Fixture;
use OCA\News\Tests\Integration\Fixtures\ItemFixture;
use OCA\News\Tests\Integration\Fixtures\FeedFixture;
use OCA\News\Tests\Integration\Fixtures\FolderFixture;
use OCA\News\Db\FeedMapper;
use OCA\News\Db\ItemMapper;
use OCA\News\Db\FolderMapper;
abstract class IntegrationTest extends PHPUnit_Framework_TestCase {
protected $user = 'test';
protected $userPassword = 'test';
/** @var ItemMapper */
protected $itemMapper;
/** @var FeedMapper */
protected $feedMapper;
/** @var FolderMapper */
protected $folderMapper;
protected function setUp() {
parent::setUp();
$app = new Application();
$this->container = $app->getContainer();
$this->tearDownUser($this->user);
$this->setupUser($this->user, $this->userPassword);
// set up database layers
$this->itemMapper = $this->container->query(ItemMapper::class);
$this->feedMapper = $this->container->query(FeedMapper::class);
$this->folderMapper = $this->container->query(FolderMapper::class);
}
/**
* Saves a fixture in a database and returns the saved result
* @param Fixture $fixture
* @return \OCP\AppFramework\Db\Entity
*/
protected function loadFixture(Fixture $fixture) {
if ($fixture instanceof FeedFixture) {
return $this->feedMapper->insert($fixture);
} elseif ($fixture instanceof ItemFixture) {
return $this->itemMapper->insert($fixture);
} elseif ($fixture instanceof FolderFixture) {
return $this->folderMapper->insert($fixture);
}
throw new \InvalidArgumentException('Invalid fixture class given');
}
/**
* Creates and logs in a new ownCloud user
* @param $user
* @param $password
*/
protected function setupUser($user, $password) {
$userManager = $this->container->query(IUserManager::class);
$userManager->createUser($user, $password);
$session = $this->container->query(IUserSession::class);
$session->login($user, $password);
}
/**
* Removes a user and his News app database entries from the database
* @param $user
*/
protected function tearDownUser($user) {
$userManager = $this->container->query(IUserManager::class);
if ($userManager->userExists($user)) {
$userManager->get($user)->delete();
}
$this->clearNewsDatabase($user);
}
/**
* Deletes all news entries of a given user
* @param string $user
*/
protected function clearUserNewsDatabase($user) {
$sql = [
'DELETE FROM *PREFIX*news_items WHERE feed_id IN ' .
'(SELECT id FROM *PREFIX*news_feeds WHERE user_id = ?)',
'DELETE FROM *PREFIX*news_feeds WHERE user_id = ?',
'DELETE FROM *PREFIX*news_folders WHERE user_id = ?'
];
$db = $this->container->query(IDb::class);
foreach ($sql as $query) {
$db->prepareQuery($query)->execute([$user]);
}
}
protected function tearDown() {
parent::tearDown();
$this->tearDownUser($this->user);
}
}
|