* @author Clark Tomlinson * @author Joas Schilling * @author Morris Jobke * @author Roeland Jago Douma * * @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 * */ namespace OCA\Encryption\Tests\Users; use OCA\Encryption\Crypto\Crypt; use OCA\Encryption\KeyManager; use OCA\Encryption\Users\Setup; use OCP\ILogger; use OCP\IUserSession; use Test\TestCase; class SetupTest extends TestCase { /** * @var \OCA\Encryption\KeyManager|\PHPUnit\Framework\MockObject\MockObject */ private $keyManagerMock; /** * @var \OCA\Encryption\Crypto\Crypt|\PHPUnit\Framework\MockObject\MockObject */ private $cryptMock; /** * @var Setup */ private $instance; protected function setUp(): void { parent::setUp(); $logMock = $this->createMock(ILogger::class); $userSessionMock = $this->getMockBuilder(IUserSession::class) ->disableOriginalConstructor() ->getMock(); $this->cryptMock = $this->getMockBuilder(Crypt::class) ->disableOriginalConstructor() ->getMock(); $this->keyManagerMock = $this->getMockBuilder(KeyManager::class) ->disableOriginalConstructor() ->getMock(); /** @var \OCP\ILogger $logMock */ /** @var \OCP\IUserSession $userSessionMock */ $this->instance = new Setup($logMock, $userSessionMock, $this->cryptMock, $this->keyManagerMock); } public function testSetupSystem() { $this->keyManagerMock->expects($this->once())->method('validateShareKey'); $this->keyManagerMock->expects($this->once())->method('validateMasterKey'); $this->instance->setupSystem(); } /** * @dataProvider dataTestSetupUser * * @param bool $hasKeys * @param bool $expected */ public function testSetupUser($hasKeys, $expected) { $this->keyManagerMock->expects($this->once())->method('userHasKeys') ->with('uid')->willReturn($hasKeys); if ($hasKeys) { $this->keyManagerMock->expects($this->never())->method('storeKeyPair'); } else { $this->cryptMock->expects($this->once())->method('createKeyPair')->willReturn(['publicKey' => 'publicKey', 'privateKey' => 'privateKey']); $this->keyManagerMock->expects($this->once())->method('storeKeyPair') ->with('uid', 'password', ['publicKey' => 'publicKey', 'privateKey' => 'privateKey'])->willReturn(true); } $this->assertSame($expected, $this->instance->setupUser('uid', 'password') ); } public function dataTestSetupUser() { return [ [true, true], [false, true] ]; } }