diff options
Diffstat (limited to 'apps/encryption/tests/UtilTest.php')
-rw-r--r-- | apps/encryption/tests/UtilTest.php | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/apps/encryption/tests/UtilTest.php b/apps/encryption/tests/UtilTest.php new file mode 100644 index 00000000000..e052bff8633 --- /dev/null +++ b/apps/encryption/tests/UtilTest.php @@ -0,0 +1,213 @@ +<?php +/** + * @author Björn Schießle <schiessle@owncloud.com> + * @author Clark Tomlinson <fallen013@gmail.com> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + + +namespace OCA\Encryption\Tests; + + +use OCA\Encryption\Util; +use Test\TestCase; + +class UtilTest extends TestCase { + private static $tempStorage = []; + + /** @var \OCP\IConfig|\PHPUnit_Framework_MockObject_MockObject */ + private $configMock; + + /** @var \OC\Files\View|\PHPUnit_Framework_MockObject_MockObject */ + private $filesMock; + + /** @var \OCP\IUserManager|\PHPUnit_Framework_MockObject_MockObject */ + private $userManagerMock; + + /** @var \OCP\Files\Mount\IMountPoint|\PHPUnit_Framework_MockObject_MockObject */ + private $mountMock; + + /** @var Util */ + private $instance; + + public function testSetRecoveryForUser() { + $this->instance->setRecoveryForUser('1'); + $this->assertArrayHasKey('recoveryEnabled', self::$tempStorage); + } + + public function testIsRecoveryEnabledForUser() { + $this->assertTrue($this->instance->isRecoveryEnabledForUser('admin')); + + // Assert recovery will return default value if not set + unset(self::$tempStorage['recoveryEnabled']); + $this->assertEquals(0, $this->instance->isRecoveryEnabledForUser('admin')); + } + + public function testUserHasFiles() { + $this->filesMock->expects($this->once()) + ->method('file_exists') + ->will($this->returnValue(true)); + + $this->assertTrue($this->instance->userHasFiles('admin')); + } + + protected function setUp() { + parent::setUp(); + $this->mountMock = $this->getMock('\OCP\Files\Mount\IMountPoint'); + $this->filesMock = $this->getMock('OC\Files\View'); + $this->userManagerMock = $this->getMock('\OCP\IUserManager'); + + /** @var \OCA\Encryption\Crypto\Crypt $cryptMock */ + $cryptMock = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt') + ->disableOriginalConstructor() + ->getMock(); + /** @var \OCP\ILogger $loggerMock */ + $loggerMock = $this->getMock('OCP\ILogger'); + /** @var \OCP\IUserSession|\PHPUnit_Framework_MockObject_MockObject $userSessionMock */ + $userSessionMock = $this->getMockBuilder('OCP\IUserSession') + ->disableOriginalConstructor() + ->setMethods([ + 'isLoggedIn', + 'getUID', + 'login', + 'logout', + 'setUser', + 'getUser' + ]) + ->getMock(); + + $userSessionMock->method('isLoggedIn')->will($this->returnValue(true)); + + $userSessionMock->method('getUID')->will($this->returnValue('admin')); + + $userSessionMock->expects($this->any()) + ->method($this->anything()) + ->will($this->returnSelf()); + + + $this->configMock = $this->getMock('OCP\IConfig'); + + $this->configMock->expects($this->any()) + ->method('getUserValue') + ->will($this->returnCallback([$this, 'getValueTester'])); + + $this->configMock->expects($this->any()) + ->method('setUserValue') + ->will($this->returnCallback([$this, 'setValueTester'])); + + $this->instance = new Util($this->filesMock, $cryptMock, $loggerMock, $userSessionMock, $this->configMock, $this->userManagerMock); + } + + /** + * @param $userId + * @param $app + * @param $key + * @param $value + */ + public function setValueTester($userId, $app, $key, $value) { + self::$tempStorage[$key] = $value; + } + + /** + * @param $userId + * @param $app + * @param $key + * @param $default + * @return mixed + */ + public function getValueTester($userId, $app, $key, $default) { + if (!empty(self::$tempStorage[$key])) { + return self::$tempStorage[$key]; + } + return $default ?: null; + } + + /** + * @dataProvider dataTestIsMasterKeyEnabled + * + * @param string $value + * @param bool $expect + */ + public function testIsMasterKeyEnabled($value, $expect) { + $this->configMock->expects($this->once())->method('getAppValue') + ->with('encryption', 'useMasterKey', '0')->willReturn($value); + $this->assertSame($expect, + $this->instance->isMasterKeyEnabled() + ); + } + + public function dataTestIsMasterKeyEnabled() { + return [ + ['0', false], + ['1', true] + ]; + } + + /** + * @dataProvider dataTestShouldEncryptHomeStorage + * @param string $returnValue return value from getAppValue() + * @param bool $expected + */ + public function testShouldEncryptHomeStorage($returnValue, $expected) { + $this->configMock->expects($this->once())->method('getAppValue') + ->with('encryption', 'encryptHomeStorage', '1') + ->willReturn($returnValue); + + $this->assertSame($expected, + $this->instance->shouldEncryptHomeStorage()); + } + + public function dataTestShouldEncryptHomeStorage() { + return [ + ['1', true], + ['0', false] + ]; + } + + /** + * @dataProvider dataTestSetEncryptHomeStorage + * @param $value + * @param $expected + */ + public function testSetEncryptHomeStorage($value, $expected) { + $this->configMock->expects($this->once())->method('setAppValue') + ->with('encryption', 'encryptHomeStorage', $expected); + $this->instance->setEncryptHomeStorage($value); + } + + public function dataTestSetEncryptHomeStorage() { + return [ + [true, '1'], + [false, '0'] + ]; + } + + public function testGetStorage() { + $return = $this->getMockBuilder('OC\Files\Storage\Storage') + ->disableOriginalConstructor() + ->getMock(); + + $path = '/foo/bar.txt'; + $this->filesMock->expects($this->once())->method('getMount')->with($path) + ->willReturn($this->mountMock); + $this->mountMock->expects($this->once())->method('getStorage')->willReturn($return); + + $this->assertEquals($return, $this->instance->getStorage($path)); + } + +} |