diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/data/db_structure.xml | 4 | ||||
-rw-r--r-- | tests/data/db_structure2.xml | 2 | ||||
-rw-r--r-- | tests/lib/backgroundjob/dummyjoblist.php | 131 | ||||
-rw-r--r-- | tests/lib/backgroundjob/queuedjob.php | 42 | ||||
-rw-r--r-- | tests/lib/backgroundjob/timedjob.php | 68 | ||||
-rw-r--r-- | tests/lib/cache/file.php | 10 | ||||
-rw-r--r-- | tests/lib/db.php | 33 | ||||
-rw-r--r-- | tests/lib/dbschema.php | 7 | ||||
-rw-r--r-- | tests/lib/files/cache/cache.php | 85 | ||||
-rw-r--r-- | tests/lib/files/cache/watcher.php | 6 | ||||
-rw-r--r-- | tests/lib/files/filesystem.php | 2 | ||||
-rw-r--r-- | tests/lib/files/view.php | 24 | ||||
-rw-r--r-- | tests/lib/geo.php | 4 | ||||
-rw-r--r-- | tests/lib/user/backend.php | 99 | ||||
-rw-r--r-- | tests/lib/user/database.php | 44 | ||||
-rw-r--r-- | tests/lib/user/dummy.php | 27 | ||||
-rw-r--r-- | tests/lib/user/manager.php | 304 | ||||
-rw-r--r-- | tests/lib/user/session.php | 155 | ||||
-rw-r--r-- | tests/lib/user/user.php | 364 | ||||
-rw-r--r-- | tests/phpunit-autotest.xml | 34 | ||||
-rw-r--r-- | tests/phpunit.xml | 16 |
21 files changed, 1425 insertions, 36 deletions
diff --git a/tests/data/db_structure.xml b/tests/data/db_structure.xml index af2e5ce3439..8f6dc5e2ecd 100644 --- a/tests/data/db_structure.xml +++ b/tests/data/db_structure.xml @@ -9,7 +9,7 @@ <table> - <name>*dbprefix*contacts_addressbooks</name> + <name>*dbprefix*cntcts_addrsbks</name> <declaration> @@ -77,7 +77,7 @@ <table> - <name>*dbprefix*contacts_cards</name> + <name>*dbprefix*cntcts_cards</name> <declaration> diff --git a/tests/data/db_structure2.xml b/tests/data/db_structure2.xml index c1bbb550483..fc6fe0bba7d 100644 --- a/tests/data/db_structure2.xml +++ b/tests/data/db_structure2.xml @@ -9,7 +9,7 @@ <table> - <name>*dbprefix*contacts_addressbooks</name> + <name>*dbprefix*cntcts_addrsbks</name> <declaration> diff --git a/tests/lib/backgroundjob/dummyjoblist.php b/tests/lib/backgroundjob/dummyjoblist.php new file mode 100644 index 00000000000..d91d6b344b5 --- /dev/null +++ b/tests/lib/backgroundjob/dummyjoblist.php @@ -0,0 +1,131 @@ +<?php +/** + * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\BackgroundJob; + +class JobRun extends \Exception { +} + +/** + * Class DummyJobList + * + * in memory job list for testing purposes + */ +class DummyJobList extends \OC\BackgroundJob\JobList { + /** + * @var \OC\BackgroundJob\Job[] + */ + private $jobs = array(); + + private $last = 0; + + /** + * @param \OC\BackgroundJob\Job|string $job + * @param mixed $argument + */ + public function add($job, $argument = null) { + $job->setArgument($argument); + if (!$this->has($job, null)) { + $this->jobs[] = $job; + } + } + + /** + * @param \OC\BackgroundJob\Job|string $job + * @param mixed $argument + */ + public function remove($job, $argument = null) { + $index = array_search($job, $this->jobs); + if ($index !== false) { + unset($this->jobs[$index]); + } + } + + /** + * check if a job is in the list + * + * @param $job + * @param mixed $argument + * @return bool + */ + public function has($job, $argument) { + return array_search($job, $this->jobs) !== false; + } + + /** + * get all jobs in the list + * + * @return \OC\BackgroundJob\Job[] + */ + public function getAll() { + return $this->jobs; + } + + /** + * get the next job in the list + * + * @return \OC\BackgroundJob\Job + */ + public function getNext() { + if (count($this->jobs) > 0) { + if ($this->last < (count($this->jobs) - 1)) { + $i = $this->last + 1; + } else { + $i = 0; + } + return $this->jobs[$i]; + } else { + return null; + } + } + + /** + * set the job that was last ran + * + * @param \OC\BackgroundJob\Job $job + */ + public function setLastJob($job) { + $i = array_search($job, $this->jobs); + if ($i !== false) { + $this->last = $i; + } else { + $this->last = 0; + } + } + + /** + * @param int $id + * @return Job + */ + public function getById($id) { + foreach ($this->jobs as $job) { + if ($job->getId() === $id) { + return $job; + } + } + return null; + } + + /** + * get the id of the last ran job + * + * @return int + */ + public function getLastJob() { + return $this->last; + } + + /** + * set the lastRun of $job to now + * + * @param \OC\BackgroundJob\Job $job + */ + public function setLastRun($job) { + $job->setLastRun(time()); + } +} diff --git a/tests/lib/backgroundjob/queuedjob.php b/tests/lib/backgroundjob/queuedjob.php new file mode 100644 index 00000000000..1d373473cd7 --- /dev/null +++ b/tests/lib/backgroundjob/queuedjob.php @@ -0,0 +1,42 @@ +<?php +/** + * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\BackgroundJob; + +class TestQueuedJob extends \OC\BackgroundJob\QueuedJob { + public function run($argument) { + throw new JobRun(); //throw an exception so we can detect if this function is called + } +} + +class QueuedJob extends \PHPUnit_Framework_TestCase { + /** + * @var DummyJobList $jobList + */ + private $jobList; + /** + * @var \OC\BackgroundJob\TimedJob $job + */ + private $job; + + public function setup() { + $this->jobList = new DummyJobList(); + $this->job = new TestQueuedJob(); + $this->jobList->add($this->job); + } + + public function testJobShouldBeRemoved() { + try { + $this->assertTrue($this->jobList->has($this->job, null)); + $this->job->execute($this->jobList); + $this->fail("job should have been run"); + } catch (JobRun $e) { + $this->assertFalse($this->jobList->has($this->job, null)); + } + } +} diff --git a/tests/lib/backgroundjob/timedjob.php b/tests/lib/backgroundjob/timedjob.php new file mode 100644 index 00000000000..0af933afef8 --- /dev/null +++ b/tests/lib/backgroundjob/timedjob.php @@ -0,0 +1,68 @@ +<?php +/** + * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\BackgroundJob; + +class TestTimedJob extends \OC\BackgroundJob\TimedJob { + public function __construct() { + $this->setInterval(10); + } + + public function run($argument) { + throw new JobRun(); //throw an exception so we can detect if this function is called + } +} + +class TimedJob extends \PHPUnit_Framework_TestCase { + /** + * @var DummyJobList $jobList + */ + private $jobList; + /** + * @var \OC\BackgroundJob\TimedJob $job + */ + private $job; + + public function setup() { + $this->jobList = new DummyJobList(); + $this->job = new TestTimedJob(); + $this->jobList->add($this->job); + } + + public function testShouldRunAfterInterval() { + $this->job->setLastRun(time() - 12); + try { + $this->job->execute($this->jobList); + $this->fail("job should have run"); + } catch (JobRun $e) { + } + } + + public function testShouldNotRunWithinInterval() { + $this->job->setLastRun(time() - 5); + try { + $this->job->execute($this->jobList); + } catch (JobRun $e) { + $this->fail("job should not have run"); + } + } + + public function testShouldNotTwice() { + $this->job->setLastRun(time() - 15); + try { + $this->job->execute($this->jobList); + $this->fail("job should have run the first time"); + } catch (JobRun $e) { + try { + $this->job->execute($this->jobList); + } catch (JobRun $e) { + $this->fail("job should not have run the second time"); + } + } + } +} diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php index 7da5a8b85c6..038cb21b257 100644 --- a/tests/lib/cache/file.php +++ b/tests/lib/cache/file.php @@ -22,7 +22,8 @@ class Test_Cache_File extends Test_Cache { private $user; - + private $datadir; + function skip() { //$this->skipUnless(OC_User::isLoggedIn()); } @@ -40,7 +41,11 @@ class Test_Cache_File extends Test_Cache { //set up temporary storage \OC\Files\Filesystem::clearMounts(); - \OC\Files\Filesystem::mount('\OC\Files\Storage\Temporary',array(),'/'); + $storage = new \OC\Files\Storage\Temporary(array()); + \OC\Files\Filesystem::mount($storage,array(),'/'); + $datadir = str_replace('local::', '', $storage->getId()); + $this->datadir = OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data'); + OC_Config::setValue('datadirectory', $datadir); OC_User::clearBackends(); OC_User::useBackend(new OC_User_Dummy()); @@ -60,5 +65,6 @@ class Test_Cache_File extends Test_Cache { public function tearDown() { OC_User::setUserId($this->user); + OC_Config::setValue('datadirectory', $this->datadir); } } diff --git a/tests/lib/db.php b/tests/lib/db.php index 440f3fb6bfd..afbdb413c3d 100644 --- a/tests/lib/db.php +++ b/tests/lib/db.php @@ -22,8 +22,8 @@ class Test_DB extends PHPUnit_Framework_TestCase { OC_DB::createDbFromStructure(self::$schema_file); $this->test_prefix = $r; - $this->table1 = $this->test_prefix.'contacts_addressbooks'; - $this->table2 = $this->test_prefix.'contacts_cards'; + $this->table1 = $this->test_prefix.'cntcts_addrsbks'; + $this->table2 = $this->test_prefix.'cntcts_cards'; $this->table3 = $this->test_prefix.'vcategory'; } @@ -33,38 +33,41 @@ class Test_DB extends PHPUnit_Framework_TestCase { } public function testQuotes() { - $query = OC_DB::prepare('SELECT `fullname` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?'); + $query = OC_DB::prepare('SELECT `fullname` FROM `*PREFIX*'.$this->table2.'` WHERE `uri` = ?'); $result = $query->execute(array('uri_1')); $this->assertTrue((bool)$result); $row = $result->fetchRow(); - $this->assertFalse($row); - $query = OC_DB::prepare('INSERT INTO *PREFIX*'.$this->table2.' (`fullname`,`uri`) VALUES (?,?)'); + $this->assertFalse((bool)$row); //PDO returns false, MDB2 returns null + $query = OC_DB::prepare('INSERT INTO `*PREFIX*'.$this->table2.'` (`fullname`,`uri`) VALUES (?,?)'); $result = $query->execute(array('fullname test', 'uri_1')); $this->assertTrue((bool)$result); - $query = OC_DB::prepare('SELECT `fullname`,`uri` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?'); + $query = OC_DB::prepare('SELECT `fullname`,`uri` FROM `*PREFIX*'.$this->table2.'` WHERE `uri` = ?'); $result = $query->execute(array('uri_1')); $this->assertTrue((bool)$result); $row = $result->fetchRow(); $this->assertArrayHasKey('fullname', $row); $this->assertEquals($row['fullname'], 'fullname test'); $row = $result->fetchRow(); - $this->assertFalse($row); + $this->assertFalse((bool)$row); //PDO returns false, MDB2 returns null } + /** + * @medium + */ public function testNOW() { - $query = OC_DB::prepare('INSERT INTO *PREFIX*'.$this->table2.' (`fullname`,`uri`) VALUES (NOW(),?)'); + $query = OC_DB::prepare('INSERT INTO `*PREFIX*'.$this->table2.'` (`fullname`,`uri`) VALUES (NOW(),?)'); $result = $query->execute(array('uri_2')); $this->assertTrue((bool)$result); - $query = OC_DB::prepare('SELECT `fullname`,`uri` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?'); + $query = OC_DB::prepare('SELECT `fullname`,`uri` FROM `*PREFIX*'.$this->table2.'` WHERE `uri` = ?'); $result = $query->execute(array('uri_2')); $this->assertTrue((bool)$result); } public function testUNIX_TIMESTAMP() { - $query = OC_DB::prepare('INSERT INTO *PREFIX*'.$this->table2.' (`fullname`,`uri`) VALUES (UNIX_TIMESTAMP(),?)'); + $query = OC_DB::prepare('INSERT INTO `*PREFIX*'.$this->table2.'` (`fullname`,`uri`) VALUES (UNIX_TIMESTAMP(),?)'); $result = $query->execute(array('uri_3')); $this->assertTrue((bool)$result); - $query = OC_DB::prepare('SELECT `fullname`,`uri` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?'); + $query = OC_DB::prepare('SELECT `fullname`,`uri` FROM `*PREFIX*'.$this->table2.'` WHERE `uri` = ?'); $result = $query->execute(array('uri_3')); $this->assertTrue((bool)$result); } @@ -88,7 +91,7 @@ class Test_DB extends PHPUnit_Framework_TestCase { $this->assertTrue((bool)$result); } - $query = OC_DB::prepare('SELECT * FROM *PREFIX*'.$this->table3); + $query = OC_DB::prepare('SELECT * FROM `*PREFIX*'.$this->table3.'`'); $result = $query->execute(); $this->assertTrue((bool)$result); $this->assertEquals('4', $result->numRows()); @@ -100,10 +103,10 @@ class Test_DB extends PHPUnit_Framework_TestCase { $carddata = 'This is a vCard'; // Normal test to have same known data inserted. - $query = OC_DB::prepare('INSERT INTO *PREFIX*'.$this->table2.' (`fullname`, `uri`, `carddata`) VALUES (?, ?, ?)'); + $query = OC_DB::prepare('INSERT INTO `*PREFIX*'.$this->table2.'` (`fullname`, `uri`, `carddata`) VALUES (?, ?, ?)'); $result = $query->execute(array($fullname, $uri, $carddata)); $this->assertTrue((bool)$result); - $query = OC_DB::prepare('SELECT `fullname`, `uri`, `carddata` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?'); + $query = OC_DB::prepare('SELECT `fullname`, `uri`, `carddata` FROM `*PREFIX*'.$this->table2.'` WHERE `uri` = ?'); $result = $query->execute(array($uri)); $this->assertTrue((bool)$result); $row = $result->fetchRow(); @@ -119,7 +122,7 @@ class Test_DB extends PHPUnit_Framework_TestCase { )); $this->assertTrue((bool)$result); - $query = OC_DB::prepare('SELECT `fullname`, `uri`, `carddata` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?'); + $query = OC_DB::prepare('SELECT `fullname`, `uri`, `carddata` FROM `*PREFIX*'.$this->table2.'` WHERE `uri` = ?'); $result = $query->execute(array($uri)); $this->assertTrue((bool)$result); $row = $result->fetchRow(); diff --git a/tests/lib/dbschema.php b/tests/lib/dbschema.php index e20a04ef7fd..6631c929cf2 100644 --- a/tests/lib/dbschema.php +++ b/tests/lib/dbschema.php @@ -26,8 +26,8 @@ class Test_DBSchema extends PHPUnit_Framework_TestCase { file_put_contents( self::$schema_file2, $content ); $this->test_prefix = $r; - $this->table1 = $this->test_prefix.'contacts_addressbooks'; - $this->table2 = $this->test_prefix.'contacts_cards'; + $this->table1 = $this->test_prefix.'cntcts_addrsbks'; + $this->table2 = $this->test_prefix.'cntcts_cards'; } public function tearDown() { @@ -36,6 +36,9 @@ class Test_DBSchema extends PHPUnit_Framework_TestCase { } // everything in one test, they depend on each other + /** + * @medium + */ public function testSchema() { $this->doTestSchemaCreating(); $this->doTestSchemaChanging(); diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php index d8b6541bd0c..f272655925b 100644 --- a/tests/lib/files/cache/cache.php +++ b/tests/lib/files/cache/cache.php @@ -8,6 +8,8 @@ namespace Test\Files\Cache; +use PHPUnit_Framework_MockObject_MockObject; + class LongId extends \OC\Files\Storage\Temporary { public function getId() { return 'long:' . str_repeat('foo', 50) . parent::getId(); @@ -262,6 +264,89 @@ class Cache extends \PHPUnit_Framework_TestCase { $this->assertEquals(array(md5($storageId), 'foo'), \OC\Files\Cache\Cache::getById($id)); } + /** + * @brief this test show the bug resulting if we have no normalizer installed + */ + public function testWithoutNormalizer() { + // folder name "Schön" with U+00F6 (normalized) + $folderWith00F6 = "\x53\x63\x68\xc3\xb6\x6e"; + + // folder name "Schön" with U+0308 (un-normalized) + $folderWith0308 = "\x53\x63\x68\x6f\xcc\x88\x6e"; + + /** + * @var \OC\Files\Cache\Cache | PHPUnit_Framework_MockObject_MockObject $cacheMock + */ + $cacheMock = $this->getMock('\OC\Files\Cache\Cache', array('normalize'), array($this->storage), '', true); + + $cacheMock->expects($this->any()) + ->method('normalize') + ->will($this->returnArgument(0)); + + $data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory'); + + // put root folder + $this->assertFalse($cacheMock->get('folder')); + $this->assertGreaterThan(0, $cacheMock->put('folder', $data)); + + // put un-normalized folder + $this->assertFalse($cacheMock->get('folder/' .$folderWith0308)); + $this->assertGreaterThan(0, $cacheMock->put('folder/' .$folderWith0308, $data)); + + // get un-normalized folder by name + $unNormalizedFolderName = $cacheMock->get('folder/' .$folderWith0308); + + // check if database layer normalized the folder name (this should not happen) + $this->assertEquals($folderWith0308, $unNormalizedFolderName['name']); + + // put normalized folder + $this->assertFalse($cacheMock->get('folder/' . $folderWith00F6)); + $this->assertGreaterThan(0, $cacheMock->put('folder/' .$folderWith00F6, $data)); + + // this is our bug, we have two different hashes with the same name (Schön) + $this->assertEquals(2, count($cacheMock->getFolderContents('folder'))); + } + + /** + * @brief this test shows that there is no bug if we use the normalizer + */ + public function testWithNormalizer() { + + if(!class_exists('Patchwork\PHP\Shim\Normalizer')) { + $this->markTestSkipped('The 3rdparty Normalizer extension is not available.'); + return; + } + + // folder name "Schön" with U+00F6 (normalized) + $folderWith00F6 = "\x53\x63\x68\xc3\xb6\x6e"; + + // folder name "Schön" with U+0308 (un-normalized) + $folderWith0308 = "\x53\x63\x68\x6f\xcc\x88\x6e"; + + $data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory'); + + // put root folder + $this->assertFalse($this->cache->get('folder')); + $this->assertGreaterThan(0, $this->cache->put('folder', $data)); + + // put un-normalized folder + $this->assertFalse($this->cache->get('folder/' .$folderWith0308)); + $this->assertGreaterThan(0, $this->cache->put('folder/' .$folderWith0308, $data)); + + // get un-normalized folder by name + $unNormalizedFolderName = $this->cache->get('folder/' .$folderWith0308); + + // check if folder name was normalized + $this->assertEquals($folderWith00F6, $unNormalizedFolderName['name']); + + // put normalized folder + $this->assertTrue(is_array($this->cache->get('folder/' . $folderWith00F6))); + $this->assertGreaterThan(0, $this->cache->put('folder/' .$folderWith00F6, $data)); + + // at this point we should have only one folder named "Schön" + $this->assertEquals(1, count($this->cache->getFolderContents('folder'))); + } + public function tearDown() { $this->cache->clear(); } diff --git a/tests/lib/files/cache/watcher.php b/tests/lib/files/cache/watcher.php index e43c86ed438..749b1ab75a3 100644 --- a/tests/lib/files/cache/watcher.php +++ b/tests/lib/files/cache/watcher.php @@ -29,6 +29,9 @@ class Watcher extends \PHPUnit_Framework_TestCase { } } + /** + * @medium + */ function testWatcher() { $storage = $this->getTestStorage(); $cache = $storage->getCache(); @@ -63,6 +66,9 @@ class Watcher extends \PHPUnit_Framework_TestCase { $this->assertFalse($cache->inCache('folder/bar2.txt')); } + /** + * @medium + */ public function testFileToFolder() { $storage = $this->getTestStorage(); $cache = $storage->getCache(); diff --git a/tests/lib/files/filesystem.php b/tests/lib/files/filesystem.php index 6ce45e6178a..bef70cc725b 100644 --- a/tests/lib/files/filesystem.php +++ b/tests/lib/files/filesystem.php @@ -72,7 +72,7 @@ class Filesystem extends \PHPUnit_Framework_TestCase { $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('\path')); $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo//bar/')); $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo////bar')); - if (class_exists('Normalizer')) { + if (class_exists('Patchwork\PHP\Shim\Normalizer')) { $this->assertEquals("/foo/bar\xC3\xBC", \OC\Files\Filesystem::normalizePath("/foo/baru\xCC\x88")); } } diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php index 01f9a9cca11..830913a91ad 100644 --- a/tests/lib/files/view.php +++ b/tests/lib/files/view.php @@ -33,6 +33,9 @@ class View extends \PHPUnit_Framework_TestCase { } } + /** + * @medium + */ public function testCacheAPI() { $storage1 = $this->getTestStorage(); $storage2 = $this->getTestStorage(); @@ -104,6 +107,9 @@ class View extends \PHPUnit_Framework_TestCase { $this->assertEquals(array(), $rootView->getDirectoryContent('/non/existing')); } + /** + * @medium + */ function testGetPath() { $storage1 = $this->getTestStorage(); $storage2 = $this->getTestStorage(); @@ -127,6 +133,9 @@ class View extends \PHPUnit_Framework_TestCase { $this->assertNull($folderView->getPath($id1)); } + /** + * @medium + */ function testMountPointOverwrite() { $storage1 = $this->getTestStorage(false); $storage2 = $this->getTestStorage(); @@ -170,6 +179,9 @@ class View extends \PHPUnit_Framework_TestCase { $this->assertEquals($textSize, $folderData[0]['size']); } + /** + * @medium + */ function testSearch() { $storage1 = $this->getTestStorage(); $storage2 = $this->getTestStorage(); @@ -217,6 +229,9 @@ class View extends \PHPUnit_Framework_TestCase { $this->assertEquals(3, count($folderView->searchByMime('text'))); } + /** + * @medium + */ function testWatcher() { $storage1 = $this->getTestStorage(); \OC\Files\Filesystem::mount($storage1, array(), '/'); @@ -234,6 +249,9 @@ class View extends \PHPUnit_Framework_TestCase { $this->assertEquals(3, $cachedData['size']); } + /** + * @medium + */ function testCopyBetweenStorages() { $storage1 = $this->getTestStorage(); $storage2 = $this->getTestStorage(); @@ -255,6 +273,9 @@ class View extends \PHPUnit_Framework_TestCase { $this->assertTrue($rootView->file_exists('/substorage/folder/bar.txt')); } + /** + * @medium + */ function testMoveBetweenStorages() { $storage1 = $this->getTestStorage(); $storage2 = $this->getTestStorage(); @@ -271,6 +292,9 @@ class View extends \PHPUnit_Framework_TestCase { $this->assertTrue($rootView->file_exists('anotherfolder/bar.txt')); } + /** + * @medium + */ function testTouch() { $storage = $this->getTestStorage(true, '\Test\Files\TemporaryNoTouch'); diff --git a/tests/lib/geo.php b/tests/lib/geo.php index 82e61608687..2c3611c092e 100644 --- a/tests/lib/geo.php +++ b/tests/lib/geo.php @@ -7,6 +7,10 @@ */ class Test_Geo extends PHPUnit_Framework_TestCase { + + /** + * @medium + */ function testTimezone() { $result = OC_Geo::timezone(3, 3); $expected = 'Africa/Porto-Novo'; diff --git a/tests/lib/user/backend.php b/tests/lib/user/backend.php new file mode 100644 index 00000000000..40674424c96 --- /dev/null +++ b/tests/lib/user/backend.php @@ -0,0 +1,99 @@ +<?php +/** +* ownCloud +* +* @author Robin Appelman +* @copyright 2012 Robin Appelman icewind@owncloud.com +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +/** + * Abstract class to provide the basis of backend-specific unit test classes. + * + * All subclasses MUST assign a backend property in setUp() which implements + * user operations (add, remove, etc.). Test methods in this class will then be + * run on each separate subclass and backend therein. + * + * For an example see /tests/lib/user/dummy.php + */ + +abstract class Test_User_Backend extends PHPUnit_Framework_TestCase { + /** + * @var OC_User_Backend $backend + */ + protected $backend; + + /** + * get a new unique user name + * test cases can override this in order to clean up created user + * @return array + */ + public function getUser() { + return uniqid('test_'); + } + + public function testAddRemove() { + //get the number of groups we start with, in case there are exising groups + $startCount=count($this->backend->getUsers()); + + $name1=$this->getUser(); + $name2=$this->getUser(); + $this->backend->createUser($name1, ''); + $count=count($this->backend->getUsers())-$startCount; + $this->assertEquals(1, $count); + $this->assertTrue((array_search($name1, $this->backend->getUsers())!==false)); + $this->assertFalse((array_search($name2, $this->backend->getUsers())!==false)); + $this->backend->createUser($name2, ''); + $count=count($this->backend->getUsers())-$startCount; + $this->assertEquals(2, $count); + $this->assertTrue((array_search($name1, $this->backend->getUsers())!==false)); + $this->assertTrue((array_search($name2, $this->backend->getUsers())!==false)); + + $this->backend->deleteUser($name2); + $count=count($this->backend->getUsers())-$startCount; + $this->assertEquals(1, $count); + $this->assertTrue((array_search($name1, $this->backend->getUsers())!==false)); + $this->assertFalse((array_search($name2, $this->backend->getUsers())!==false)); + } + + public function testLogin() { + $name1=$this->getUser(); + $name2=$this->getUser(); + + $this->assertFalse($this->backend->userExists($name1)); + $this->assertFalse($this->backend->userExists($name2)); + + $this->backend->createUser($name1, 'pass1'); + $this->backend->createUser($name2, 'pass2'); + + $this->assertTrue($this->backend->userExists($name1)); + $this->assertTrue($this->backend->userExists($name2)); + + $this->assertTrue($this->backend->checkPassword($name1, 'pass1')); + $this->assertTrue($this->backend->checkPassword($name2, 'pass2')); + + $this->assertFalse($this->backend->checkPassword($name1, 'pass2')); + $this->assertFalse($this->backend->checkPassword($name2, 'pass1')); + + $this->assertFalse($this->backend->checkPassword($name1, 'dummy')); + $this->assertFalse($this->backend->checkPassword($name2, 'foobar')); + + $this->backend->setPassword($name1, 'newpass1'); + $this->assertFalse($this->backend->checkPassword($name1, 'pass1')); + $this->assertTrue($this->backend->checkPassword($name1, 'newpass1')); + $this->assertFalse($this->backend->checkPassword($name2, 'newpass1')); + } +} diff --git a/tests/lib/user/database.php b/tests/lib/user/database.php new file mode 100644 index 00000000000..fe7d87c44de --- /dev/null +++ b/tests/lib/user/database.php @@ -0,0 +1,44 @@ +<?php +/** +* ownCloud +* +* @author Robin Appelman +* @copyright 2012 Robin Appelman icewind@owncloud.com +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +class Test_User_Database extends Test_User_Backend { + /** + * get a new unique user name + * test cases can override this in order to clean up created user + * @return array + */ + public function getUser() { + $user=uniqid('test_'); + $this->users[]=$user; + return $user; + } + + public function setUp() { + $this->backend=new OC_User_Dummy(); + } + + public function tearDown() { + foreach($this->users as $user) { + $this->backend->deleteUser($user); + } + } +} diff --git a/tests/lib/user/dummy.php b/tests/lib/user/dummy.php new file mode 100644 index 00000000000..e417fd97603 --- /dev/null +++ b/tests/lib/user/dummy.php @@ -0,0 +1,27 @@ +<?php +/** +* ownCloud +* +* @author Robin Appelman +* @copyright 2012 Robin Appelman icewind@owncloud.com +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +class Test_User_Dummy extends Test_User_Backend { + public function setUp() { + $this->backend=new OC_User_Dummy(); + } +} diff --git a/tests/lib/user/manager.php b/tests/lib/user/manager.php new file mode 100644 index 00000000000..bc49f6db4b2 --- /dev/null +++ b/tests/lib/user/manager.php @@ -0,0 +1,304 @@ +<?php + +/** + * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\User; + +class Manager extends \PHPUnit_Framework_TestCase { + public function testUserExistsSingleBackendExists() { + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->once()) + ->method('userExists') + ->with($this->equalTo('foo')) + ->will($this->returnValue(true)); + + $manager = new \OC\User\Manager(); + $manager->registerBackend($backend); + + $this->assertTrue($manager->userExists('foo')); + } + + public function testUserExistsSingleBackendNotExists() { + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->once()) + ->method('userExists') + ->with($this->equalTo('foo')) + ->will($this->returnValue(false)); + + $manager = new \OC\User\Manager(); + $manager->registerBackend($backend); + + $this->assertFalse($manager->userExists('foo')); + } + + public function testUserExistsNoBackends() { + $manager = new \OC\User\Manager(); + + $this->assertFalse($manager->userExists('foo')); + } + + public function testUserExistsTwoBackendsSecondExists() { + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend1 + */ + $backend1 = $this->getMock('\OC_User_Dummy'); + $backend1->expects($this->once()) + ->method('userExists') + ->with($this->equalTo('foo')) + ->will($this->returnValue(false)); + + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend2 + */ + $backend2 = $this->getMock('\OC_User_Dummy'); + $backend2->expects($this->once()) + ->method('userExists') + ->with($this->equalTo('foo')) + ->will($this->returnValue(true)); + + $manager = new \OC\User\Manager(); + $manager->registerBackend($backend1); + $manager->registerBackend($backend2); + + $this->assertTrue($manager->userExists('foo')); + } + + public function testUserExistsTwoBackendsFirstExists() { + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend1 + */ + $backend1 = $this->getMock('\OC_User_Dummy'); + $backend1->expects($this->once()) + ->method('userExists') + ->with($this->equalTo('foo')) + ->will($this->returnValue(true)); + + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend2 + */ + $backend2 = $this->getMock('\OC_User_Dummy'); + $backend2->expects($this->never()) + ->method('userExists'); + + $manager = new \OC\User\Manager(); + $manager->registerBackend($backend1); + $manager->registerBackend($backend2); + + $this->assertTrue($manager->userExists('foo')); + } + + public function testGetOneBackendExists() { + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->once()) + ->method('userExists') + ->with($this->equalTo('foo')) + ->will($this->returnValue(true)); + + $manager = new \OC\User\Manager(); + $manager->registerBackend($backend); + + $this->assertEquals('foo', $manager->get('foo')->getUID()); + } + + public function testGetOneBackendNotExists() { + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->once()) + ->method('userExists') + ->with($this->equalTo('foo')) + ->will($this->returnValue(false)); + + $manager = new \OC\User\Manager(); + $manager->registerBackend($backend); + + $this->assertEquals(null, $manager->get('foo')); + } + + public function testSearchOneBackend() { + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->once()) + ->method('getUsers') + ->with($this->equalTo('fo')) + ->will($this->returnValue(array('foo', 'afoo'))); + + $manager = new \OC\User\Manager(); + $manager->registerBackend($backend); + + $result = $manager->search('fo'); + $this->assertEquals(2, count($result)); + $this->assertEquals('afoo', $result[0]->getUID()); + $this->assertEquals('foo', $result[1]->getUID()); + } + + public function testSearchTwoBackendLimitOffset() { + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend1 + */ + $backend1 = $this->getMock('\OC_User_Dummy'); + $backend1->expects($this->once()) + ->method('getUsers') + ->with($this->equalTo('fo'), $this->equalTo(3), $this->equalTo(1)) + ->will($this->returnValue(array('foo1', 'foo2'))); + + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend2 + */ + $backend2 = $this->getMock('\OC_User_Dummy'); + $backend2->expects($this->once()) + ->method('getUsers') + ->with($this->equalTo('fo'), $this->equalTo(1), $this->equalTo(0)) + ->will($this->returnValue(array('foo3'))); + + $manager = new \OC\User\Manager(); + $manager->registerBackend($backend1); + $manager->registerBackend($backend2); + + $result = $manager->search('fo', 3, 1); + $this->assertEquals(3, count($result)); + $this->assertEquals('foo1', $result[0]->getUID()); + $this->assertEquals('foo2', $result[1]->getUID()); + $this->assertEquals('foo3', $result[2]->getUID()); + } + + public function testCreateUserSingleBackendNotExists() { + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(true)); + + $backend->expects($this->once()) + ->method('createUser') + ->with($this->equalTo('foo'), $this->equalTo('bar')); + + $backend->expects($this->once()) + ->method('userExists') + ->with($this->equalTo('foo')) + ->will($this->returnValue(false)); + + $manager = new \OC\User\Manager(); + $manager->registerBackend($backend); + + $user = $manager->createUser('foo', 'bar'); + $this->assertEquals('foo', $user->getUID()); + } + + /** + * @expectedException \Exception + */ + public function testCreateUserSingleBackendExists() { + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(true)); + + $backend->expects($this->never()) + ->method('createUser'); + + $backend->expects($this->once()) + ->method('userExists') + ->with($this->equalTo('foo')) + ->will($this->returnValue(true)); + + $manager = new \OC\User\Manager(); + $manager->registerBackend($backend); + + $manager->createUser('foo', 'bar'); + } + + public function testCreateUserSingleBackendNotSupported() { + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(false)); + + $backend->expects($this->never()) + ->method('createUser'); + + $backend->expects($this->once()) + ->method('userExists') + ->with($this->equalTo('foo')) + ->will($this->returnValue(false)); + + $manager = new \OC\User\Manager(); + $manager->registerBackend($backend); + + $this->assertFalse($manager->createUser('foo', 'bar')); + } + + public function testCreateUserNoBackends() { + $manager = new \OC\User\Manager(); + + $this->assertFalse($manager->createUser('foo', 'bar')); + } + + /** + * @expectedException \Exception + */ + public function testCreateUserTwoBackendExists() { + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend1 + */ + $backend1 = $this->getMock('\OC_User_Dummy'); + $backend1->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(true)); + + $backend1->expects($this->never()) + ->method('createUser'); + + $backend1->expects($this->once()) + ->method('userExists') + ->with($this->equalTo('foo')) + ->will($this->returnValue(false)); + + /** + * @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend2 + */ + $backend2 = $this->getMock('\OC_User_Dummy'); + $backend2->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(true)); + + $backend2->expects($this->never()) + ->method('createUser'); + + $backend2->expects($this->once()) + ->method('userExists') + ->with($this->equalTo('foo')) + ->will($this->returnValue(true)); + + $manager = new \OC\User\Manager(); + $manager->registerBackend($backend1); + $manager->registerBackend($backend2); + + $manager->createUser('foo', 'bar'); + } +} diff --git a/tests/lib/user/session.php b/tests/lib/user/session.php new file mode 100644 index 00000000000..274e9e2831e --- /dev/null +++ b/tests/lib/user/session.php @@ -0,0 +1,155 @@ +<?php + +/** + * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\User; + +class Session extends \PHPUnit_Framework_TestCase { + public function testGetUser() { + $session = $this->getMock('\OC\Session\Memory', array(), array('')); + $session->expects($this->once()) + ->method('get') + ->with('user_id') + ->will($this->returnValue('foo')); + + $backend = $this->getMock('OC_User_Dummy'); + $backend->expects($this->once()) + ->method('userExists') + ->with('foo') + ->will($this->returnValue(true)); + + $manager = new \OC\User\Manager(); + $manager->registerBackend($backend); + + $userSession = new \OC\User\Session($manager, $session); + $user = $userSession->getUser(); + $this->assertEquals('foo', $user->getUID()); + } + + public function testSetUser() { + $session = $this->getMock('\OC\Session\Memory', array(), array('')); + $session->expects($this->once()) + ->method('set') + ->with('user_id', 'foo'); + + $manager = $this->getMock('\OC\User\Manager'); + + $backend = $this->getMock('OC_User_Dummy'); + + $user = $this->getMock('\OC\User\User', array(), array('foo', $backend)); + $user->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('foo')); + + $userSession = new \OC\User\Session($manager, $session); + $userSession->setUser($user); + } + + public function testLoginValidPasswordEnabled() { + $session = $this->getMock('\OC\Session\Memory', array(), array('')); + $session->expects($this->once()) + ->method('set') + ->with('user_id', 'foo'); + + $manager = $this->getMock('\OC\User\Manager'); + + $backend = $this->getMock('OC_User_Dummy'); + + $user = $this->getMock('\OC\User\User', array(), array('foo', $backend)); + $user->expects($this->once()) + ->method('checkPassword') + ->with('bar') + ->will($this->returnValue(true)); + $user->expects($this->once()) + ->method('isEnabled') + ->will($this->returnValue(true)); + $user->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('foo')); + + $manager->expects($this->once()) + ->method('get') + ->with('foo') + ->will($this->returnValue($user)); + + $userSession = new \OC\User\Session($manager, $session); + $userSession->login('foo', 'bar'); + $this->assertEquals($user, $userSession->getUser()); + } + + public function testLoginValidPasswordDisabled() { + $session = $this->getMock('\OC\Session\Memory', array(), array('')); + $session->expects($this->never()) + ->method('set'); + + $manager = $this->getMock('\OC\User\Manager'); + + $backend = $this->getMock('OC_User_Dummy'); + + $user = $this->getMock('\OC\User\User', array(), array('foo', $backend)); + $user->expects($this->once()) + ->method('checkPassword') + ->with('bar') + ->will($this->returnValue(true)); + $user->expects($this->once()) + ->method('isEnabled') + ->will($this->returnValue(false)); + + $manager->expects($this->once()) + ->method('get') + ->with('foo') + ->will($this->returnValue($user)); + + $userSession = new \OC\User\Session($manager, $session); + $userSession->login('foo', 'bar'); + } + + public function testLoginInValidPassword() { + $session = $this->getMock('\OC\Session\Memory', array(), array('')); + $session->expects($this->never()) + ->method('set'); + + $manager = $this->getMock('\OC\User\Manager'); + + $backend = $this->getMock('OC_User_Dummy'); + + $user = $this->getMock('\OC\User\User', array(), array('foo', $backend)); + $user->expects($this->once()) + ->method('checkPassword') + ->with('bar') + ->will($this->returnValue(false)); + $user->expects($this->never()) + ->method('isEnabled'); + + $manager->expects($this->once()) + ->method('get') + ->with('foo') + ->will($this->returnValue($user)); + + $userSession = new \OC\User\Session($manager, $session); + $userSession->login('foo', 'bar'); + } + + public function testLoginNonExisting() { + $session = $this->getMock('\OC\Session\Memory', array(), array('')); + $session->expects($this->never()) + ->method('set'); + + $manager = $this->getMock('\OC\User\Manager'); + + $backend = $this->getMock('OC_User_Dummy'); + + $manager->expects($this->once()) + ->method('get') + ->with('foo') + ->will($this->returnValue(null)); + + $userSession = new \OC\User\Session($manager, $session); + $userSession->login('foo', 'bar'); + } +} diff --git a/tests/lib/user/user.php b/tests/lib/user/user.php new file mode 100644 index 00000000000..b0d170cbfc5 --- /dev/null +++ b/tests/lib/user/user.php @@ -0,0 +1,364 @@ +<?php + +/** + * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\User; + +use OC\Hooks\PublicEmitter; + +class User extends \PHPUnit_Framework_TestCase { + public function testDisplayName() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Backend'); + $backend->expects($this->once()) + ->method('getDisplayName') + ->with($this->equalTo('foo')) + ->will($this->returnValue('Foo')); + + $backend->expects($this->any()) + ->method('implementsActions') + ->with($this->equalTo(\OC_USER_BACKEND_GET_DISPLAYNAME)) + ->will($this->returnValue(true)); + + $user = new \OC\User\User('foo', $backend); + $this->assertEquals('Foo', $user->getDisplayName()); + } + + public function testDisplayNameNotSupported() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Backend'); + $backend->expects($this->never()) + ->method('getDisplayName'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->with($this->equalTo(\OC_USER_BACKEND_GET_DISPLAYNAME)) + ->will($this->returnValue(false)); + + $user = new \OC\User\User('foo', $backend); + $this->assertEquals('foo', $user->getDisplayName()); + } + + public function testSetPassword() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->once()) + ->method('setPassword') + ->with($this->equalTo('foo'), $this->equalTo('bar')); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnCallback(function ($actions) { + if ($actions === \OC_USER_BACKEND_SET_PASSWORD) { + return true; + } else { + return false; + } + })); + + $user = new \OC\User\User('foo', $backend); + $this->assertTrue($user->setPassword('bar','')); + } + + public function testSetPasswordNotSupported() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->never()) + ->method('setPassword'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(false)); + + $user = new \OC\User\User('foo', $backend); + $this->assertFalse($user->setPassword('bar','')); + } + + public function testDelete() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->once()) + ->method('deleteUser') + ->with($this->equalTo('foo')); + + $user = new \OC\User\User('foo', $backend); + $this->assertTrue($user->delete()); + } + + public function testCheckPassword() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->once()) + ->method('checkPassword') + ->with($this->equalTo('foo'), $this->equalTo('bar')) + ->will($this->returnValue(true)); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnCallback(function ($actions) { + if ($actions === \OC_USER_BACKEND_CHECK_PASSWORD) { + return true; + } else { + return false; + } + })); + + $user = new \OC\User\User('foo', $backend); + $this->assertTrue($user->checkPassword('bar')); + } + + public function testCheckPasswordNotSupported() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->never()) + ->method('checkPassword'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(false)); + + $user = new \OC\User\User('foo', $backend); + $this->assertFalse($user->checkPassword('bar')); + } + + public function testGetHome() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->once()) + ->method('getHome') + ->with($this->equalTo('foo')) + ->will($this->returnValue('/home/foo')); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnCallback(function ($actions) { + if ($actions === \OC_USER_BACKEND_GET_HOME) { + return true; + } else { + return false; + } + })); + + $user = new \OC\User\User('foo', $backend); + $this->assertEquals('/home/foo', $user->getHome()); + } + + public function testGetHomeNotSupported() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->never()) + ->method('getHome'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(false)); + + $user = new \OC\User\User('foo', $backend); + $this->assertEquals(\OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data") . '/foo', $user->getHome()); + } + + public function testCanChangePassword() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnCallback(function ($actions) { + if ($actions === \OC_USER_BACKEND_SET_PASSWORD) { + return true; + } else { + return false; + } + })); + + $user = new \OC\User\User('foo', $backend); + $this->assertTrue($user->canChangePassword()); + } + + public function testCanChangePasswordNotSupported() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(false)); + + $user = new \OC\User\User('foo', $backend); + $this->assertFalse($user->canChangePassword()); + } + + public function testCanChangeDisplayName() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnCallback(function ($actions) { + if ($actions === \OC_USER_BACKEND_SET_DISPLAYNAME) { + return true; + } else { + return false; + } + })); + + $user = new \OC\User\User('foo', $backend); + $this->assertTrue($user->canChangeDisplayName()); + } + + public function testCanChangeDisplayNameNotSupported() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(false)); + + $user = new \OC\User\User('foo', $backend); + $this->assertFalse($user->canChangeDisplayName()); + } + + public function testSetDisplayNameSupported() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Database'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnCallback(function ($actions) { + if ($actions === \OC_USER_BACKEND_SET_DISPLAYNAME) { + return true; + } else { + return false; + } + })); + + $backend->expects($this->once()) + ->method('setDisplayName') + ->with('foo','Foo'); + + $user = new \OC\User\User('foo', $backend); + $this->assertTrue($user->setDisplayName('Foo')); + $this->assertEquals('Foo',$user->getDisplayName()); + } + + public function testSetDisplayNameNotSupported() { + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Database'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnCallback(function ($actions) { + return false; + })); + + $backend->expects($this->never()) + ->method('setDisplayName'); + + $user = new \OC\User\User('foo', $backend); + $this->assertFalse($user->setDisplayName('Foo')); + $this->assertEquals('foo',$user->getDisplayName()); + } + + public function testSetPasswordHooks() { + $hooksCalled = 0; + $test = $this; + + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->once()) + ->method('setPassword'); + + /** + * @param \OC\User\User $user + * @param string $password + */ + $hook = function ($user, $password) use ($test, &$hooksCalled) { + $hooksCalled++; + $test->assertEquals('foo', $user->getUID()); + $test->assertEquals('bar', $password); + }; + + $emitter = new PublicEmitter(); + $emitter->listen('\OC\User', 'preSetPassword', $hook); + $emitter->listen('\OC\User', 'postSetPassword', $hook); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnCallback(function ($actions) { + if ($actions === \OC_USER_BACKEND_SET_PASSWORD) { + return true; + } else { + return false; + } + })); + + $user = new \OC\User\User('foo', $backend, $emitter); + + $user->setPassword('bar',''); + $this->assertEquals(2, $hooksCalled); + } + + public function testDeleteHooks() { + $hooksCalled = 0; + $test = $this; + + /** + * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC_User_Dummy'); + $backend->expects($this->once()) + ->method('deleteUser'); + + /** + * @param \OC\User\User $user + */ + $hook = function ($user) use ($test, &$hooksCalled) { + $hooksCalled++; + $test->assertEquals('foo', $user->getUID()); + }; + + $emitter = new PublicEmitter(); + $emitter->listen('\OC\User', 'preDelete', $hook); + $emitter->listen('\OC\User', 'postDelete', $hook); + + $user = new \OC\User\User('foo', $backend, $emitter); + $this->assertTrue($user->delete()); + $this->assertEquals(2, $hooksCalled); + } +} diff --git a/tests/phpunit-autotest.xml b/tests/phpunit-autotest.xml index 23cd123edc6..71fe69c6aa8 100644 --- a/tests/phpunit-autotest.xml +++ b/tests/phpunit-autotest.xml @@ -1,14 +1,34 @@ <?xml version="1.0" encoding="utf-8" ?> -<phpunit bootstrap="bootstrap.php"> +<phpunit bootstrap="bootstrap.php" + strict="true" + timeoutForSmallTests="900" + timeoutForMediumTests="900" + timeoutForLargeTests="900" +> <testsuite name='ownCloud'> <directory suffix='.php'>lib/</directory> <file>apps.php</file> </testsuite> <!-- filters for code coverage --> - <whitelist processUncoveredFilesFromWhitelist="true"> - <directory suffix=".php">..</directory> - <exclude> - <directory suffix=".php">../3rdparty</directory> - </exclude> - </whitelist> + <filter> + <!-- whitelist processUncoveredFilesFromWhitelist="true" --> + <whitelist> + <directory suffix=".php">..</directory> + <exclude> + <directory suffix=".php">../3rdparty</directory> + <directory suffix=".php">../apps/files/l10n</directory> + <directory suffix=".php">../apps/files_external/l10n</directory> + <directory suffix=".php">../apps/files_external/3rdparty</directory> + <directory suffix=".php">../apps/files_versions/l10n</directory> + <directory suffix=".php">../apps/files_encryption/l10n</directory> + <directory suffix=".php">../apps/files_encryption/3rdparty</directory> + <directory suffix=".php">../apps/files_sharing/l10n</directory> + <directory suffix=".php">../apps/files_trashbin/l10n</directory> + <directory suffix=".php">../apps/user_ldap/l10n</directory> + <directory suffix=".php">../apps/user_webdavauth/l10n</directory> + <directory suffix=".php">../lib/MDB2</directory> + </exclude> + </whitelist> + </filter> </phpunit> + diff --git a/tests/phpunit.xml b/tests/phpunit.xml index f5a686c3020..510c38a3c8b 100644 --- a/tests/phpunit.xml +++ b/tests/phpunit.xml @@ -5,12 +5,16 @@ <file>apps.php</file> </testsuite> <!-- filters for code coverage --> - <whitelist processUncoveredFilesFromWhitelist="true"> - <directory suffix=".php">..</directory> - <exclude> - <directory suffix=".php">../3rdparty</directory> - </exclude> - </whitelist> + <filter> + <!-- whitelist processUncoveredFilesFromWhitelist="true" --> + <whitelist> + <directory suffix=".php">..</directory> + <exclude> + <directory suffix=".php">../3rdparty</directory> + <directory suffix=".php">../lib/MDB2</directory> + </exclude> + </whitelist> + </filter> <listeners> <listener class="PHPUnit_Util_Log_JSON"></listener> </listeners> |