aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/data/db_structure.xml4
-rw-r--r--tests/data/db_structure2.xml2
-rw-r--r--tests/lib/backgroundjob/dummyjoblist.php131
-rw-r--r--tests/lib/backgroundjob/queuedjob.php42
-rw-r--r--tests/lib/backgroundjob/timedjob.php68
-rw-r--r--tests/lib/cache/file.php10
-rw-r--r--tests/lib/db.php33
-rw-r--r--tests/lib/dbschema.php7
-rw-r--r--tests/lib/files/cache/cache.php85
-rw-r--r--tests/lib/files/cache/watcher.php6
-rw-r--r--tests/lib/files/filesystem.php2
-rw-r--r--tests/lib/files/view.php24
-rw-r--r--tests/lib/geo.php4
-rw-r--r--tests/lib/user/backend.php99
-rw-r--r--tests/lib/user/database.php44
-rw-r--r--tests/lib/user/dummy.php27
-rw-r--r--tests/lib/user/manager.php304
-rw-r--r--tests/lib/user/session.php155
-rw-r--r--tests/lib/user/user.php364
-rw-r--r--tests/phpunit-autotest.xml34
-rw-r--r--tests/phpunit.xml16
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>