config = $this->getMockBuilder(IConfig::class) ->disableOriginalConstructor() ->getMock(); $this->encryptionManager = $this->getMockBuilder(IManager::class) ->disableOriginalConstructor() ->getMock(); $this->appManager = $this->getMockBuilder(IAppManager::class) ->disableOriginalConstructor() ->getMock(); $this->encryptionModule = $this->getMockBuilder(IEncryptionModule::class) ->disableOriginalConstructor() ->getMock(); $this->questionHelper = $this->getMockBuilder(QuestionHelper::class) ->disableOriginalConstructor() ->getMock(); $this->consoleInput = $this->getMockBuilder(InputInterface::class)->getMock(); $this->consoleInput->expects($this->any()) ->method('isInteractive') ->willReturn(true); $this->consoleOutput = $this->getMockBuilder(OutputInterface::class)->getMock(); } public function testEncryptAll(): void { // trash bin needs to be disabled in order to avoid adding dummy files to the users // trash bin which gets deleted during the encryption process $this->appManager->expects($this->once())->method('disableApp')->with('files_trashbin'); // enable single user mode to avoid that other user login during encryption // destructor should disable the single user mode again $this->config->expects($this->once())->method('getSystemValueBool')->with('maintenance', false)->willReturn(false); $this->config->expects($this->exactly(2)) ->method('setSystemValue') ->withConsecutive( ['maintenance', true], ['maintenance', false], ); $instance = new EncryptAll($this->encryptionManager, $this->appManager, $this->config, $this->questionHelper); $this->invokePrivate($instance, 'forceMaintenanceAndTrashbin'); $this->invokePrivate($instance, 'resetMaintenanceAndTrashbin'); } /** * @dataProvider dataTestExecute */ public function testExecute($answer, $askResult): void { $command = new EncryptAll($this->encryptionManager, $this->appManager, $this->config, $this->questionHelper); $this->encryptionManager->expects($this->once())->method('isEnabled')->willReturn(true); $this->questionHelper->expects($this->once())->method('ask')->willReturn($askResult); if ($answer === 'Y' || $answer === 'y') { $this->encryptionManager->expects($this->once()) ->method('getEncryptionModule')->willReturn($this->encryptionModule); $this->encryptionModule->expects($this->once()) ->method('encryptAll')->with($this->consoleInput, $this->consoleOutput); } else { $this->encryptionManager->expects($this->never())->method('getEncryptionModule'); $this->encryptionModule->expects($this->never())->method('encryptAll'); } $this->invokePrivate($command, 'execute', [$this->consoleInput, $this->consoleOutput]); } public function dataTestExecute() { return [ ['y', true], ['Y', true], ['n', false], ['N', false], ['', false] ]; } public function testExecuteException(): void { $this->expectException(\Exception::class); $command = new EncryptAll($this->encryptionManager, $this->appManager, $this->config, $this->questionHelper); $this->encryptionManager->expects($this->once())->method('isEnabled')->willReturn(false); $this->encryptionManager->expects($this->never())->method('getEncryptionModule'); $this->encryptionModule->expects($this->never())->method('encryptAll'); $this->invokePrivate($command, 'execute', [$this->consoleInput, $this->consoleOutput]); } }