You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

activitytest.php 8.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. <?php
  2. /**
  3. * @author Joas Schilling <nickvergessen@owncloud.com>
  4. * @author Morris Jobke <hey@morrisjobke.de>
  5. *
  6. * @copyright Copyright (c) 2015, ownCloud, Inc.
  7. * @license AGPL-3.0
  8. *
  9. * This code is free software: you can redistribute it and/or modify
  10. * it under the terms of the GNU Affero General Public License, version 3,
  11. * as published by the Free Software Foundation.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU Affero General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU Affero General Public License, version 3,
  19. * along with this program. If not, see <http://www.gnu.org/licenses/>
  20. *
  21. */
  22. namespace OCA\Files\Tests;
  23. use OCA\Files\Activity;
  24. use Test\TestCase;
  25. class ActivityTest extends TestCase {
  26. /** @var \OC\ActivityManager */
  27. private $activityManager;
  28. /** @var \PHPUnit_Framework_MockObject_MockObject */
  29. protected $request;
  30. /** @var \PHPUnit_Framework_MockObject_MockObject */
  31. protected $session;
  32. /** @var \PHPUnit_Framework_MockObject_MockObject */
  33. protected $config;
  34. /** @var \PHPUnit_Framework_MockObject_MockObject */
  35. protected $activityHelper;
  36. /** @var \OCA\Files\Activity */
  37. protected $activityExtension;
  38. protected function setUp() {
  39. parent::setUp();
  40. $this->request = $this->getMockBuilder('OCP\IRequest')
  41. ->disableOriginalConstructor()
  42. ->getMock();
  43. $this->session = $this->getMockBuilder('OCP\IUserSession')
  44. ->disableOriginalConstructor()
  45. ->getMock();
  46. $this->config = $this->getMockBuilder('OCP\IConfig')
  47. ->disableOriginalConstructor()
  48. ->getMock();
  49. $this->activityHelper = $this->getMockBuilder('OCA\Files\ActivityHelper')
  50. ->disableOriginalConstructor()
  51. ->getMock();
  52. $this->activityManager = new \OC\ActivityManager(
  53. $this->request,
  54. $this->session,
  55. $this->config
  56. );
  57. $this->activityExtension = $activityExtension = new Activity(
  58. new \OC\L10N\Factory(),
  59. $this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(),
  60. $this->activityManager,
  61. $this->activityHelper,
  62. $this->config
  63. );
  64. $this->activityManager->registerExtension(function() use ($activityExtension) {
  65. return $activityExtension;
  66. });
  67. }
  68. public function testNotificationTypes() {
  69. $result = $this->activityExtension->getNotificationTypes('en');
  70. $this->assertTrue(is_array($result), 'Asserting getNotificationTypes() returns an array');
  71. $this->assertCount(5, $result);
  72. $this->assertArrayHasKey(Activity::TYPE_SHARE_CREATED, $result);
  73. $this->assertArrayHasKey(Activity::TYPE_SHARE_CHANGED, $result);
  74. $this->assertArrayHasKey(Activity::TYPE_FAVORITES, $result);
  75. $this->assertArrayHasKey(Activity::TYPE_SHARE_DELETED, $result);
  76. $this->assertArrayHasKey(Activity::TYPE_SHARE_RESTORED, $result);
  77. }
  78. public function testDefaultTypes() {
  79. $result = $this->activityExtension->getDefaultTypes('stream');
  80. $this->assertTrue(is_array($result), 'Asserting getDefaultTypes(stream) returns an array');
  81. $this->assertCount(4, $result);
  82. $result = array_flip($result);
  83. $this->assertArrayHasKey(Activity::TYPE_SHARE_CREATED, $result);
  84. $this->assertArrayHasKey(Activity::TYPE_SHARE_CHANGED, $result);
  85. $this->assertArrayNotHasKey(Activity::TYPE_FAVORITES, $result);
  86. $this->assertArrayHasKey(Activity::TYPE_SHARE_DELETED, $result);
  87. $this->assertArrayHasKey(Activity::TYPE_SHARE_RESTORED, $result);
  88. $result = $this->activityExtension->getDefaultTypes('email');
  89. $this->assertFalse($result, 'Asserting getDefaultTypes(email) returns false');
  90. }
  91. public function testTranslate() {
  92. $this->assertFalse(
  93. $this->activityExtension->translate('files_sharing', '', [], false, false, 'en'),
  94. 'Asserting that no translations are set for files_sharing'
  95. );
  96. }
  97. public function testGetSpecialParameterList() {
  98. $this->assertFalse(
  99. $this->activityExtension->getSpecialParameterList('files_sharing', ''),
  100. 'Asserting that no special parameters are set for files_sharing'
  101. );
  102. }
  103. public function typeIconData() {
  104. return [
  105. [Activity::TYPE_SHARE_CHANGED, 'icon-change'],
  106. [Activity::TYPE_SHARE_CREATED, 'icon-add-color'],
  107. [Activity::TYPE_SHARE_DELETED, 'icon-delete-color'],
  108. [Activity::TYPE_SHARE_RESTORED, false],
  109. [Activity::TYPE_FAVORITES, false],
  110. ['unknown type', false],
  111. ];
  112. }
  113. /**
  114. * @dataProvider typeIconData
  115. *
  116. * @param string $type
  117. * @param mixed $expected
  118. */
  119. public function testTypeIcon($type, $expected) {
  120. $this->assertSame($expected, $this->activityExtension->getTypeIcon($type));
  121. }
  122. public function testGroupParameter() {
  123. $this->assertFalse(
  124. $this->activityExtension->getGroupParameter(['app' => 'files_sharing']),
  125. 'Asserting that no group parameters are set for files_sharing'
  126. );
  127. }
  128. public function testNavigation() {
  129. $result = $this->activityExtension->getNavigation();
  130. $this->assertCount(1, $result['top']);
  131. $this->assertArrayHasKey(Activity::FILTER_FAVORITES, $result['top']);
  132. $this->assertCount(1, $result['apps']);
  133. $this->assertArrayHasKey(Activity::FILTER_FILES, $result['apps']);
  134. }
  135. public function testIsFilterValid() {
  136. $this->assertTrue($this->activityExtension->isFilterValid(Activity::FILTER_FAVORITES));
  137. $this->assertTrue($this->activityExtension->isFilterValid(Activity::FILTER_FILES));
  138. $this->assertFalse($this->activityExtension->isFilterValid('unknown filter'));
  139. }
  140. public function filterNotificationTypesData() {
  141. return [
  142. [
  143. Activity::FILTER_FILES,
  144. [
  145. 'NT0',
  146. Activity::TYPE_SHARE_CREATED,
  147. Activity::TYPE_SHARE_CHANGED,
  148. Activity::TYPE_SHARE_DELETED,
  149. Activity::TYPE_SHARE_RESTORED,
  150. Activity::TYPE_FAVORITES,
  151. ], [
  152. Activity::TYPE_SHARE_CREATED,
  153. Activity::TYPE_SHARE_CHANGED,
  154. Activity::TYPE_SHARE_DELETED,
  155. Activity::TYPE_SHARE_RESTORED,
  156. ],
  157. ],
  158. [
  159. Activity::FILTER_FILES,
  160. [
  161. 'NT0',
  162. Activity::TYPE_SHARE_CREATED,
  163. Activity::TYPE_FAVORITES,
  164. ],
  165. [
  166. Activity::TYPE_SHARE_CREATED,
  167. ],
  168. ],
  169. [
  170. Activity::FILTER_FAVORITES,
  171. [
  172. 'NT0',
  173. Activity::TYPE_SHARE_CREATED,
  174. Activity::TYPE_SHARE_CHANGED,
  175. Activity::TYPE_SHARE_DELETED,
  176. Activity::TYPE_SHARE_RESTORED,
  177. Activity::TYPE_FAVORITES,
  178. ], [
  179. Activity::TYPE_SHARE_CREATED,
  180. Activity::TYPE_SHARE_CHANGED,
  181. Activity::TYPE_SHARE_DELETED,
  182. Activity::TYPE_SHARE_RESTORED,
  183. ],
  184. ],
  185. [
  186. 'unknown filter',
  187. [
  188. 'NT0',
  189. Activity::TYPE_SHARE_CREATED,
  190. Activity::TYPE_SHARE_CHANGED,
  191. Activity::TYPE_SHARE_DELETED,
  192. Activity::TYPE_SHARE_RESTORED,
  193. Activity::TYPE_FAVORITES,
  194. ],
  195. false,
  196. ],
  197. ];
  198. }
  199. /**
  200. * @dataProvider filterNotificationTypesData
  201. *
  202. * @param string $filter
  203. * @param array $types
  204. * @param mixed $expected
  205. */
  206. public function testFilterNotificationTypes($filter, $types, $expected) {
  207. $result = $this->activityExtension->filterNotificationTypes($types, $filter);
  208. $this->assertEquals($expected, $result);
  209. }
  210. public function queryForFilterData() {
  211. return [
  212. [
  213. new \RuntimeException(),
  214. '`app` = ?',
  215. ['files']
  216. ],
  217. [
  218. [
  219. 'items' => [],
  220. 'folders' => [],
  221. ],
  222. ' CASE WHEN `app` = ? THEN ((`type` <> ? AND `type` <> ?)) ELSE `app` <> ? END ',
  223. ['files', Activity::TYPE_SHARE_CREATED, Activity::TYPE_SHARE_CHANGED, 'files']
  224. ],
  225. [
  226. [
  227. 'items' => ['file.txt', 'folder'],
  228. 'folders' => ['folder'],
  229. ],
  230. ' CASE WHEN `app` = ? THEN ((`type` <> ? AND `type` <> ?) OR `file` = ? OR `file` = ? OR `file` LIKE ?) ELSE `app` <> ? END ',
  231. ['files', Activity::TYPE_SHARE_CREATED, Activity::TYPE_SHARE_CHANGED, 'file.txt', 'folder', 'folder/%', 'files']
  232. ],
  233. ];
  234. }
  235. /**
  236. * @dataProvider queryForFilterData
  237. *
  238. * @param mixed $will
  239. * @param string $query
  240. * @param array $parameters
  241. */
  242. public function testQueryForFilter($will, $query, $parameters) {
  243. $this->mockUserSession('test');
  244. $this->config->expects($this->any())
  245. ->method('getUserValue')
  246. ->willReturnMap([
  247. ['test', 'activity', 'notify_stream_' . Activity::TYPE_FAVORITES, false, true],
  248. ]);
  249. if (is_array($will)) {
  250. $this->activityHelper->expects($this->any())
  251. ->method('getFavoriteFilePaths')
  252. ->with('test')
  253. ->willReturn($will);
  254. } else {
  255. $this->activityHelper->expects($this->any())
  256. ->method('getFavoriteFilePaths')
  257. ->with('test')
  258. ->willThrowException($will);
  259. }
  260. $result = $this->activityExtension->getQueryForFilter('all');
  261. $this->assertEquals([$query, $parameters], $result);
  262. }
  263. protected function mockUserSession($user) {
  264. $mockUser = $this->getMockBuilder('\OCP\IUser')
  265. ->disableOriginalConstructor()
  266. ->getMock();
  267. $mockUser->expects($this->any())
  268. ->method('getUID')
  269. ->willReturn($user);
  270. $this->session->expects($this->any())
  271. ->method('isLoggedIn')
  272. ->willReturn(true);
  273. $this->session->expects($this->any())
  274. ->method('getUser')
  275. ->willReturn($mockUser);
  276. }
  277. }