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.

479 lines
13 KiB

10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
  1. <?php
  2. /**
  3. * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
  4. * This file is licensed under the Affero General Public License version 3 or
  5. * later.
  6. * See the COPYING-README file.
  7. */
  8. namespace Test\User;
  9. use OC\Hooks\PublicEmitter;
  10. /**
  11. * Class UserTest
  12. *
  13. * @group DB
  14. *
  15. * @package Test\User
  16. */
  17. class UserTest extends \Test\TestCase {
  18. public function testDisplayName() {
  19. /**
  20. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  21. */
  22. $backend = $this->getMock('\OC\User\Backend');
  23. $backend->expects($this->once())
  24. ->method('getDisplayName')
  25. ->with($this->equalTo('foo'))
  26. ->will($this->returnValue('Foo'));
  27. $backend->expects($this->any())
  28. ->method('implementsActions')
  29. ->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
  30. ->will($this->returnValue(true));
  31. $user = new \OC\User\User('foo', $backend);
  32. $this->assertEquals('Foo', $user->getDisplayName());
  33. }
  34. /**
  35. * if the display name contain whitespaces only, we expect the uid as result
  36. */
  37. public function testDisplayNameEmpty() {
  38. /**
  39. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  40. */
  41. $backend = $this->getMock('\OC\User\Backend');
  42. $backend->expects($this->once())
  43. ->method('getDisplayName')
  44. ->with($this->equalTo('foo'))
  45. ->will($this->returnValue(' '));
  46. $backend->expects($this->any())
  47. ->method('implementsActions')
  48. ->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
  49. ->will($this->returnValue(true));
  50. $user = new \OC\User\User('foo', $backend);
  51. $this->assertEquals('foo', $user->getDisplayName());
  52. }
  53. public function testDisplayNameNotSupported() {
  54. /**
  55. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  56. */
  57. $backend = $this->getMock('\OC\User\Backend');
  58. $backend->expects($this->never())
  59. ->method('getDisplayName');
  60. $backend->expects($this->any())
  61. ->method('implementsActions')
  62. ->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
  63. ->will($this->returnValue(false));
  64. $user = new \OC\User\User('foo', $backend);
  65. $this->assertEquals('foo', $user->getDisplayName());
  66. }
  67. public function testSetPassword() {
  68. /**
  69. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  70. */
  71. $backend = $this->getMock('\Test\Util\User\Dummy');
  72. $backend->expects($this->once())
  73. ->method('setPassword')
  74. ->with($this->equalTo('foo'), $this->equalTo('bar'));
  75. $backend->expects($this->any())
  76. ->method('implementsActions')
  77. ->will($this->returnCallback(function ($actions) {
  78. if ($actions === \OC\User\Backend::SET_PASSWORD) {
  79. return true;
  80. } else {
  81. return false;
  82. }
  83. }));
  84. $user = new \OC\User\User('foo', $backend);
  85. $this->assertTrue($user->setPassword('bar',''));
  86. }
  87. public function testSetPasswordNotSupported() {
  88. /**
  89. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  90. */
  91. $backend = $this->getMock('\Test\Util\User\Dummy');
  92. $backend->expects($this->never())
  93. ->method('setPassword');
  94. $backend->expects($this->any())
  95. ->method('implementsActions')
  96. ->will($this->returnValue(false));
  97. $user = new \OC\User\User('foo', $backend);
  98. $this->assertFalse($user->setPassword('bar',''));
  99. }
  100. public function testChangeAvatarSupportedYes() {
  101. /**
  102. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  103. */
  104. $backend = $this->getMock('Test\User\AvatarUserDummy');
  105. $backend->expects($this->once())
  106. ->method('canChangeAvatar')
  107. ->with($this->equalTo('foo'))
  108. ->will($this->returnValue(true));
  109. $backend->expects($this->any())
  110. ->method('implementsActions')
  111. ->will($this->returnCallback(function ($actions) {
  112. if ($actions === \OC\User\Backend::PROVIDE_AVATAR) {
  113. return true;
  114. } else {
  115. return false;
  116. }
  117. }));
  118. $user = new \OC\User\User('foo', $backend);
  119. $this->assertTrue($user->canChangeAvatar());
  120. }
  121. public function testChangeAvatarSupportedNo() {
  122. /**
  123. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  124. */
  125. $backend = $this->getMock('Test\User\AvatarUserDummy');
  126. $backend->expects($this->once())
  127. ->method('canChangeAvatar')
  128. ->with($this->equalTo('foo'))
  129. ->will($this->returnValue(false));
  130. $backend->expects($this->any())
  131. ->method('implementsActions')
  132. ->will($this->returnCallback(function ($actions) {
  133. if ($actions === \OC\User\Backend::PROVIDE_AVATAR) {
  134. return true;
  135. } else {
  136. return false;
  137. }
  138. }));
  139. $user = new \OC\User\User('foo', $backend);
  140. $this->assertFalse($user->canChangeAvatar());
  141. }
  142. public function testChangeAvatarNotSupported() {
  143. /**
  144. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  145. */
  146. $backend = $this->getMock('Test\User\AvatarUserDummy');
  147. $backend->expects($this->never())
  148. ->method('canChangeAvatar');
  149. $backend->expects($this->any())
  150. ->method('implementsActions')
  151. ->will($this->returnCallback(function ($actions) {
  152. return false;
  153. }));
  154. $user = new \OC\User\User('foo', $backend);
  155. $this->assertTrue($user->canChangeAvatar());
  156. }
  157. public function testDelete() {
  158. /**
  159. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  160. */
  161. $backend = $this->getMock('\Test\Util\User\Dummy');
  162. $backend->expects($this->once())
  163. ->method('deleteUser')
  164. ->with($this->equalTo('foo'));
  165. $user = new \OC\User\User('foo', $backend);
  166. $this->assertTrue($user->delete());
  167. }
  168. public function testGetHome() {
  169. /**
  170. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  171. */
  172. $backend = $this->getMock('\Test\Util\User\Dummy');
  173. $backend->expects($this->once())
  174. ->method('getHome')
  175. ->with($this->equalTo('foo'))
  176. ->will($this->returnValue('/home/foo'));
  177. $backend->expects($this->any())
  178. ->method('implementsActions')
  179. ->will($this->returnCallback(function ($actions) {
  180. if ($actions === \OC\User\Backend::GET_HOME) {
  181. return true;
  182. } else {
  183. return false;
  184. }
  185. }));
  186. $user = new \OC\User\User('foo', $backend);
  187. $this->assertEquals('/home/foo', $user->getHome());
  188. }
  189. public function testGetBackendClassName() {
  190. $user = new \OC\User\User('foo', new \Test\Util\User\Dummy());
  191. $this->assertEquals('Dummy', $user->getBackendClassName());
  192. $user = new \OC\User\User('foo', new \OC\User\Database());
  193. $this->assertEquals('Database', $user->getBackendClassName());
  194. }
  195. public function testGetHomeNotSupported() {
  196. /**
  197. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  198. */
  199. $backend = $this->getMock('\Test\Util\User\Dummy');
  200. $backend->expects($this->never())
  201. ->method('getHome');
  202. $backend->expects($this->any())
  203. ->method('implementsActions')
  204. ->will($this->returnValue(false));
  205. $allConfig = $this->getMockBuilder('\OCP\IConfig')
  206. ->disableOriginalConstructor()
  207. ->getMock();
  208. $allConfig->expects($this->any())
  209. ->method('getUserValue')
  210. ->will($this->returnValue(true));
  211. $allConfig->expects($this->any())
  212. ->method('getSystemValue')
  213. ->with($this->equalTo('datadirectory'))
  214. ->will($this->returnValue('arbitrary/path'));
  215. $user = new \OC\User\User('foo', $backend, null, $allConfig);
  216. $this->assertEquals('arbitrary/path/foo', $user->getHome());
  217. }
  218. public function testCanChangePassword() {
  219. /**
  220. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  221. */
  222. $backend = $this->getMock('\Test\Util\User\Dummy');
  223. $backend->expects($this->any())
  224. ->method('implementsActions')
  225. ->will($this->returnCallback(function ($actions) {
  226. if ($actions === \OC\User\Backend::SET_PASSWORD) {
  227. return true;
  228. } else {
  229. return false;
  230. }
  231. }));
  232. $user = new \OC\User\User('foo', $backend);
  233. $this->assertTrue($user->canChangePassword());
  234. }
  235. public function testCanChangePasswordNotSupported() {
  236. /**
  237. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  238. */
  239. $backend = $this->getMock('\Test\Util\User\Dummy');
  240. $backend->expects($this->any())
  241. ->method('implementsActions')
  242. ->will($this->returnValue(false));
  243. $user = new \OC\User\User('foo', $backend);
  244. $this->assertFalse($user->canChangePassword());
  245. }
  246. public function testCanChangeDisplayName() {
  247. /**
  248. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  249. */
  250. $backend = $this->getMock('\Test\Util\User\Dummy');
  251. $backend->expects($this->any())
  252. ->method('implementsActions')
  253. ->will($this->returnCallback(function ($actions) {
  254. if ($actions === \OC\User\Backend::SET_DISPLAYNAME) {
  255. return true;
  256. } else {
  257. return false;
  258. }
  259. }));
  260. $user = new \OC\User\User('foo', $backend);
  261. $this->assertTrue($user->canChangeDisplayName());
  262. }
  263. public function testCanChangeDisplayNameNotSupported() {
  264. /**
  265. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  266. */
  267. $backend = $this->getMock('\Test\Util\User\Dummy');
  268. $backend->expects($this->any())
  269. ->method('implementsActions')
  270. ->will($this->returnValue(false));
  271. $user = new \OC\User\User('foo', $backend);
  272. $this->assertFalse($user->canChangeDisplayName());
  273. }
  274. public function testSetDisplayNameSupported() {
  275. /**
  276. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  277. */
  278. $backend = $this->getMock('\OC\User\Database');
  279. $backend->expects($this->any())
  280. ->method('implementsActions')
  281. ->will($this->returnCallback(function ($actions) {
  282. if ($actions === \OC\User\Backend::SET_DISPLAYNAME) {
  283. return true;
  284. } else {
  285. return false;
  286. }
  287. }));
  288. $backend->expects($this->once())
  289. ->method('setDisplayName')
  290. ->with('foo','Foo')
  291. ->willReturn(true);
  292. $user = new \OC\User\User('foo', $backend);
  293. $this->assertTrue($user->setDisplayName('Foo'));
  294. $this->assertEquals('Foo',$user->getDisplayName());
  295. }
  296. /**
  297. * don't allow display names containing whitespaces only
  298. */
  299. public function testSetDisplayNameEmpty() {
  300. /**
  301. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  302. */
  303. $backend = $this->getMock('\OC\User\Database');
  304. $backend->expects($this->any())
  305. ->method('implementsActions')
  306. ->will($this->returnCallback(function ($actions) {
  307. if ($actions === \OC\User\Backend::SET_DISPLAYNAME) {
  308. return true;
  309. } else {
  310. return false;
  311. }
  312. }));
  313. $user = new \OC\User\User('foo', $backend);
  314. $this->assertFalse($user->setDisplayName(' '));
  315. $this->assertEquals('foo',$user->getDisplayName());
  316. }
  317. public function testSetDisplayNameNotSupported() {
  318. /**
  319. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  320. */
  321. $backend = $this->getMock('\OC\User\Database');
  322. $backend->expects($this->any())
  323. ->method('implementsActions')
  324. ->will($this->returnCallback(function ($actions) {
  325. return false;
  326. }));
  327. $backend->expects($this->never())
  328. ->method('setDisplayName');
  329. $user = new \OC\User\User('foo', $backend);
  330. $this->assertFalse($user->setDisplayName('Foo'));
  331. $this->assertEquals('foo',$user->getDisplayName());
  332. }
  333. public function testSetPasswordHooks() {
  334. $hooksCalled = 0;
  335. $test = $this;
  336. /**
  337. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  338. */
  339. $backend = $this->getMock('\Test\Util\User\Dummy');
  340. $backend->expects($this->once())
  341. ->method('setPassword');
  342. /**
  343. * @param \OC\User\User $user
  344. * @param string $password
  345. */
  346. $hook = function ($user, $password) use ($test, &$hooksCalled) {
  347. $hooksCalled++;
  348. $test->assertEquals('foo', $user->getUID());
  349. $test->assertEquals('bar', $password);
  350. };
  351. $emitter = new PublicEmitter();
  352. $emitter->listen('\OC\User', 'preSetPassword', $hook);
  353. $emitter->listen('\OC\User', 'postSetPassword', $hook);
  354. $backend->expects($this->any())
  355. ->method('implementsActions')
  356. ->will($this->returnCallback(function ($actions) {
  357. if ($actions === \OC\User\Backend::SET_PASSWORD) {
  358. return true;
  359. } else {
  360. return false;
  361. }
  362. }));
  363. $user = new \OC\User\User('foo', $backend, $emitter);
  364. $user->setPassword('bar','');
  365. $this->assertEquals(2, $hooksCalled);
  366. }
  367. public function testDeleteHooks() {
  368. $hooksCalled = 0;
  369. $test = $this;
  370. /**
  371. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  372. */
  373. $backend = $this->getMock('\Test\Util\User\Dummy');
  374. $backend->expects($this->once())
  375. ->method('deleteUser');
  376. /**
  377. * @param \OC\User\User $user
  378. */
  379. $hook = function ($user) use ($test, &$hooksCalled) {
  380. $hooksCalled++;
  381. $test->assertEquals('foo', $user->getUID());
  382. };
  383. $emitter = new PublicEmitter();
  384. $emitter->listen('\OC\User', 'preDelete', $hook);
  385. $emitter->listen('\OC\User', 'postDelete', $hook);
  386. $user = new \OC\User\User('foo', $backend, $emitter);
  387. $this->assertTrue($user->delete());
  388. $this->assertEquals(2, $hooksCalled);
  389. }
  390. public function testGetCloudId() {
  391. /**
  392. * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
  393. */
  394. $backend = $this->getMock('\Test\Util\User\Dummy');
  395. $urlGenerator = $this->getMockBuilder('\OC\URLGenerator')
  396. ->setMethods(['getAbsoluteURL'])
  397. ->disableOriginalConstructor()->getMock();
  398. $urlGenerator
  399. ->expects($this->any())
  400. ->method('getAbsoluteURL')
  401. ->withAnyParameters()
  402. ->willReturn('http://localhost:8888/owncloud');
  403. $user = new \OC\User\User('foo', $backend, null, null, $urlGenerator);
  404. $this->assertEquals("foo@localhost:8888/owncloud", $user->getCloudId());
  405. }
  406. }