From a7d9b7c87641a22c4ac60c7e9c6fcc918c902979 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Thu, 29 Dec 2016 11:26:49 +0100 Subject: Add Group Command tests Signed-off-by: Roeland Jago Douma --- tests/Core/Command/Group/AddUserTest.php | 119 +++++++++++++++++++++++++ tests/Core/Command/Group/ListCommandTest.php | 127 +++++++++++++++++++++++++++ tests/Core/Command/Group/RemoveUserTest.php | 119 +++++++++++++++++++++++++ 3 files changed, 365 insertions(+) create mode 100644 tests/Core/Command/Group/AddUserTest.php create mode 100644 tests/Core/Command/Group/ListCommandTest.php create mode 100644 tests/Core/Command/Group/RemoveUserTest.php (limited to 'tests/Core') diff --git a/tests/Core/Command/Group/AddUserTest.php b/tests/Core/Command/Group/AddUserTest.php new file mode 100644 index 00000000000..af860e244d6 --- /dev/null +++ b/tests/Core/Command/Group/AddUserTest.php @@ -0,0 +1,119 @@ + + * + * @author Roeland Jago Douma + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see . + * + */ +namespace Test\Core\Command\Group; + +use OC\Core\Command\Group\AddUser; +use OCP\IGroup; +use OCP\IGroupManager; +use OCP\IUser; +use OCP\IUserManager; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Test\TestCase; + +class AddUserTest extends TestCase { + + /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */ + private $groupManager; + + /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ + private $userManager; + + /** @var AddUser */ + private $command; + + /** @var InputInterface|\PHPUnit_Framework_MockObject_MockObject */ + private $input; + + /** @var OutputInterface|\PHPUnit_Framework_MockObject_MockObject */ + private $output; + + public function setUp() { + parent::setUp(); + + $this->groupManager = $this->createMock(IGroupManager::class); + $this->userManager = $this->createMock(IUserManager::class); + $this->command = new AddUser($this->userManager, $this->groupManager); + + $this->input = $this->createMock(InputInterface::class); + $this->input->method('getArgument') + ->willReturnCallback(function($arg) { + if ($arg === 'group') { + return 'myGroup'; + } else if ($arg === 'user') { + return 'myUser'; + } + throw new \Exception(); + }); + $this->output = $this->createMock(OutputInterface::class); + } + + public function testNoGroup() { + $this->groupManager->method('get') + ->with('myGroup') + ->willReturn(null); + + $this->output->expects($this->once()) + ->method('writeln') + ->with('group not found'); + + $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); + } + + public function testNoUser() { + $group = $this->createMock(IGroup::class); + $this->groupManager->method('get') + ->with('myGroup') + ->willReturn($group); + + $this->userManager->method('get') + ->with('myUser') + ->willReturn(null); + + $this->output->expects($this->once()) + ->method('writeln') + ->with('user not found'); + + $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); + } + + public function testAdd() { + $group = $this->createMock(IGroup::class); + $this->groupManager->method('get') + ->with('myGroup') + ->willReturn($group); + + $user = $this->createMock(IUser::class); + $this->userManager->method('get') + ->with('myUser') + ->willReturn($user); + + $group->expects($this->once()) + ->method('addUser') + ->with($user); + + $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); + } + + +} diff --git a/tests/Core/Command/Group/ListCommandTest.php b/tests/Core/Command/Group/ListCommandTest.php new file mode 100644 index 00000000000..ac872e74ac8 --- /dev/null +++ b/tests/Core/Command/Group/ListCommandTest.php @@ -0,0 +1,127 @@ + + * + * @author Roeland Jago Douma + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see . + * + */ +namespace Test\Core\Command\Group; + +use OC\Core\Command\Group\ListCommand; +use OCP\IGroup; +use OCP\IGroupManager; +use OCP\IUser; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Test\TestCase; + +class ListCommandTest extends TestCase { + + /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */ + private $groupManager; + + /** @var ListCommand|\PHPUnit_Framework_MockObject_MockObject */ + private $command; + + /** @var InputInterface|\PHPUnit_Framework_MockObject_MockObject */ + private $input; + + /** @var OutputInterface|\PHPUnit_Framework_MockObject_MockObject */ + private $output; + + public function setUp() { + parent::setUp(); + + $this->groupManager = $this->createMock(IGroupManager::class); + $this->command = $this->getMockBuilder(ListCommand::class) + ->setConstructorArgs([$this->groupManager]) + ->setMethods(['writeArrayInOutputFormat']) + ->getMock(); + + $this->input = $this->createMock(InputInterface::class); + $this->input->method('getOption') + ->willReturnCallback(function($arg) { + if ($arg === 'limit') { + return '100'; + } else if ($arg === 'offset') { + return '42'; + } + throw new \Exception(); + }); + + + $this->output = $this->createMock(OutputInterface::class); + } + + public function testExecute() { + $group1 = $this->createMock(IGroup::class); + $group1->method('getGID')->willReturn('group1'); + $group2 = $this->createMock(IGroup::class); + $group2->method('getGID')->willReturn('group2'); + $group3 = $this->createMock(IGroup::class); + $group3->method('getGID')->willReturn('group3'); + + $user = $this->createMock(IUser::class); + + $this->groupManager->method('search') + ->with( + '', + 100, + 42 + )->willReturn([$group1, $group2, $group3]); + + $group1->method('getUsers') + ->willReturn([ + 'user1' => $user, + 'user2' => $user, + ]); + + $group2->method('getUsers') + ->willReturn([ + ]); + + $group3->method('getUsers') + ->willReturn([ + 'user1' => $user, + 'user3' => $user, + ]); + + $this->command->expects($this->once()) + ->method('writeArrayInOutputFormat') + ->with( + $this->equalTo($this->input), + $this->equalTo($this->output), + [ + 'group1' => [ + 'user1', + 'user2', + ], + 'group2' => [ + ], + 'group3' => [ + 'user1', + 'user3', + ] + ] + ); + + $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); + } + + +} diff --git a/tests/Core/Command/Group/RemoveUserTest.php b/tests/Core/Command/Group/RemoveUserTest.php new file mode 100644 index 00000000000..ec7b0f2d714 --- /dev/null +++ b/tests/Core/Command/Group/RemoveUserTest.php @@ -0,0 +1,119 @@ + + * + * @author Roeland Jago Douma + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see . + * + */ +namespace Test\Core\Command\Group; + +use OC\Core\Command\Group\RemoveUser; +use OCP\IGroup; +use OCP\IGroupManager; +use OCP\IUser; +use OCP\IUserManager; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Test\TestCase; + +class RemoveUserTest extends TestCase { + + /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */ + private $groupManager; + + /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ + private $userManager; + + /** @var RemoveUser */ + private $command; + + /** @var InputInterface|\PHPUnit_Framework_MockObject_MockObject */ + private $input; + + /** @var OutputInterface|\PHPUnit_Framework_MockObject_MockObject */ + private $output; + + public function setUp() { + parent::setUp(); + + $this->groupManager = $this->createMock(IGroupManager::class); + $this->userManager = $this->createMock(IUserManager::class); + $this->command = new RemoveUser($this->userManager, $this->groupManager); + + $this->input = $this->createMock(InputInterface::class); + $this->input->method('getArgument') + ->willReturnCallback(function($arg) { + if ($arg === 'group') { + return 'myGroup'; + } else if ($arg === 'user') { + return 'myUser'; + } + throw new \Exception(); + }); + $this->output = $this->createMock(OutputInterface::class); + } + + public function testNoGroup() { + $this->groupManager->method('get') + ->with('myGroup') + ->willReturn(null); + + $this->output->expects($this->once()) + ->method('writeln') + ->with('group not found'); + + $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); + } + + public function testNoUser() { + $group = $this->createMock(IGroup::class); + $this->groupManager->method('get') + ->with('myGroup') + ->willReturn($group); + + $this->userManager->method('get') + ->with('myUser') + ->willReturn(null); + + $this->output->expects($this->once()) + ->method('writeln') + ->with('user not found'); + + $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); + } + + public function testAdd() { + $group = $this->createMock(IGroup::class); + $this->groupManager->method('get') + ->with('myGroup') + ->willReturn($group); + + $user = $this->createMock(IUser::class); + $this->userManager->method('get') + ->with('myUser') + ->willReturn($user); + + $group->expects($this->once()) + ->method('removeUser') + ->with($user); + + $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); + } + + +} -- cgit v1.2.3