diff --git a/lib/private/Group/Group.php b/lib/private/Group/Group.php index 5e1c835a7464..da73a12e3743 100644 --- a/lib/private/Group/Group.php +++ b/lib/private/Group/Group.php @@ -31,6 +31,8 @@ use OCP\IGroup; use OCP\IUser; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\GenericEvent; class Group implements IGroup { /** @@ -63,6 +65,9 @@ class Group implements IGroup { */ private $userManager; + /** @var EventDispatcherInterface */ + private $eventDispatcher; + /** * @param string $gid * @param \OC\Group\Backend[] $backends @@ -70,10 +75,11 @@ class Group implements IGroup { * @param \OC\Hooks\PublicEmitter $emitter * @param string $displayName */ - public function __construct($gid, $backends, $userManager, $emitter = null, $displayName = null) { + public function __construct($gid, $backends, $userManager, EventDispatcherInterface $eventDispatcher, $emitter = null, $displayName = null) { $this->gid = $gid; $this->backends = $backends; $this->userManager = $userManager; + $this->eventDispatcher = $eventDispatcher; $this->emitter = $emitter; $this->displayName = $displayName; } @@ -147,6 +153,7 @@ public function addUser($user) { if ($this->emitter) { $this->emitter->emit('\OC\Group', 'preAddUser', [$this, $user]); } + $this->eventDispatcher->dispatch('group.preAddUser', new GenericEvent($this, ['user' => $user])); foreach ($this->backends as $backend) { if ($backend->implementsActions(\OC\Group\Backend::ADD_TO_GROUP)) { $backend->addToGroup($user->getUID(), $this->gid); @@ -156,6 +163,7 @@ public function addUser($user) { if ($this->emitter) { $this->emitter->emit('\OC\Group', 'postAddUser', [$this, $user]); } + $this->eventDispatcher->dispatch('group.postAddUser', new GenericEvent($this, ['user' => $user])); return; } } @@ -171,6 +179,7 @@ public function removeUser($user) { if ($this->emitter) { $this->emitter->emit('\OC\Group', 'preRemoveUser', [$this, $user]); } + $this->eventDispatcher->dispatch('group.preRemoveUser', new GenericEvent($this, ['user' => $user])); foreach ($this->backends as $backend) { if ($backend->implementsActions(\OC\Group\Backend::REMOVE_FROM_GOUP) and $backend->inGroup($user->getUID(), $this->gid)) { $backend->removeFromGroup($user->getUID(), $this->gid); @@ -181,6 +190,7 @@ public function removeUser($user) { if ($this->emitter) { $this->emitter->emit('\OC\Group', 'postRemoveUser', [$this, $user]); } + $this->eventDispatcher->dispatch('group.postRemoveUser', new GenericEvent($this, ['user' => $user])); if ($this->users) { foreach ($this->users as $index => $groupUser) { if ($groupUser->getUID() === $user->getUID()) { @@ -268,6 +278,7 @@ public function delete() { if ($this->emitter) { $this->emitter->emit('\OC\Group', 'preDelete', [$this]); } + $this->eventDispatcher->dispatch('group.preDelete', new GenericEvent($this)); foreach ($this->backends as $backend) { if ($backend->implementsActions(\OC\Group\Backend::DELETE_GROUP)) { $result = true; @@ -277,6 +288,7 @@ public function delete() { if ($result and $this->emitter) { $this->emitter->emit('\OC\Group', 'postDelete', [$this]); } + $this->eventDispatcher->dispatch('group.postDelete', new GenericEvent($this)); return $result; } diff --git a/lib/private/Group/Manager.php b/lib/private/Group/Manager.php index 047d00e8eb11..7516f90dd7d7 100644 --- a/lib/private/Group/Manager.php +++ b/lib/private/Group/Manager.php @@ -40,6 +40,8 @@ use OCP\GroupInterface; use OCP\IGroupManager; use OCP\Util\UserSearch; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\GenericEvent; /** * Class Manager @@ -85,13 +87,17 @@ class Manager extends PublicEmitter implements IGroupManager { /** @var \OC\SubAdmin */ private $subAdmin = null; + /** @var EventDispatcherInterface */ + private $eventDispatcher; + /** * @param \OC\User\Manager $userManager * @param UserSearch $userSearch */ - public function __construct(UserManager $userManager, UserSearch $userSearch) { + public function __construct(UserManager $userManager, UserSearch $userSearch, EventDispatcherInterface $eventDispatcher) { $this->userManager = $userManager; $this->userSearch = $userSearch; + $this->eventDispatcher = $eventDispatcher; $cachedGroups = & $this->cachedGroups; $cachedUserGroups = & $this->cachedUserGroups; $this->listen('\OC\Group', 'postDelete', function ($group) use (&$cachedGroups, &$cachedUserGroups) { @@ -186,7 +192,7 @@ protected function getGroupObject($gid, $displayName = null) { if (count($backends) === 0) { return null; } - $this->cachedGroups[$gid] = new Group($gid, $backends, $this->userManager, $this, $displayName); + $this->cachedGroups[$gid] = new Group($gid, $backends, $this->userManager, $this->eventDispatcher, $this, $displayName); return $this->cachedGroups[$gid]; } @@ -209,11 +215,13 @@ public function createGroup($gid) { return $group; } else { $this->emit('\OC\Group', 'preCreate', [$gid]); + $this->eventDispatcher->dispatch('group.preCreate', new GenericEvent(null, ['gid' => $gid])); foreach ($this->backends as $backend) { if ($backend->implementsActions(\OC\Group\Backend::CREATE_GROUP)) { $backend->createGroup($gid); $group = $this->getGroupObject($gid); $this->emit('\OC\Group', 'postCreate', [$group]); + $this->eventDispatcher->dispatch('group.postCreate', new GenericEvent($group, ['gid' => $gid])); return $group; } } diff --git a/lib/private/Server.php b/lib/private/Server.php index 79770166fd9d..0c6c6d42dbb1 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -260,8 +260,10 @@ public function __construct($webRoot, \OC\Config $config) { $this->getUserManager(), new UserSearch( $c->getConfig() - ) + ), + $this->getEventDispatcher() ); + $groupManager->listen('\OC\Group', 'preCreate', function ($gid) { \OC_Hook::emit('OC_Group', 'pre_createGroup', ['run' => true, 'gid' => $gid]); }); diff --git a/tests/lib/App/ManagerTest.php b/tests/lib/App/ManagerTest.php index 270386494be8..6c3b892d2b56 100644 --- a/tests/lib/App/ManagerTest.php +++ b/tests/lib/App/ManagerTest.php @@ -164,8 +164,8 @@ public function testNotEnableIfNotInstalled() { public function testEnableAppForGroups() { $groups = [ - new Group('group1', [], null), - new Group('group2', [], null) + new Group('group1', [], null, $this->eventDispatcher), + new Group('group2', [], null, $this->eventDispatcher) ]; $this->expectClearCache(); $this->manager->enableAppForGroups('test', $groups); @@ -191,8 +191,8 @@ public function dataEnableAppForGroupsAllowedTypes() { */ public function testEnableAppForGroupsAllowedTypes(array $appInfo) { $groups = [ - new Group('group1', [], null), - new Group('group2', [], null) + new Group('group1', [], null, $this->eventDispatcher), + new Group('group2', [], null, $this->eventDispatcher) ]; $this->expectClearCache(); @@ -236,8 +236,8 @@ public function dataEnableAppForGroupsForbiddenTypes() { */ public function testEnableAppForGroupsForbiddenTypes($type) { $groups = [ - new Group('group1', [], null), - new Group('group2', [], null) + new Group('group1', [], null, $this->eventDispatcher), + new Group('group2', [], null, $this->eventDispatcher) ]; /** @var AppManager|\PHPUnit_Framework_MockObject_MockObject $manager */ diff --git a/tests/lib/Group/GroupTest.php b/tests/lib/Group/GroupTest.php index 4879d60fd511..65d6188dcc3d 100644 --- a/tests/lib/Group/GroupTest.php +++ b/tests/lib/Group/GroupTest.php @@ -10,6 +10,9 @@ namespace Test\Group; use OCP\IUser; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\GenericEvent; +use OC\Group\Group; class GroupTest extends \Test\TestCase { /** @@ -33,10 +36,35 @@ protected function getUserManager() { return $userManager; } + private function getEventDispatcherMock() { + $eventMap = []; + $eventDispatcher = $this->getMockBuilder(EventDispatcherInterface::class) + ->disableOriginalConstructor() + ->getMock(); + $eventDispatcher->method('addListener') + ->will($this->returnCallback(function($eventName, $callable, $priority) use (&$eventMap){ + if (!isset($eventMap[$eventName])) { + $eventMap[$eventName] = []; + } + // ignore priority for now + $eventMap[$eventName][] = $callable; + })); + $eventDispatcher->method('dispatch') + ->will($this->returnCallback(function($eventName, $event) use (&$eventMap){ + if (isset($eventMap[$eventName])) { + foreach ($eventMap[$eventName] as $callable) { + $callable($event); + } + } + return $event; + })); + return $eventDispatcher; + } + public function testGetUsersSingleBackend() { $backend = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend], $userManager); + $group = new \OC\Group\Group('group1', [$backend], $userManager, $this->getEventDispatcherMock()); $backend->expects($this->once()) ->method('usersInGroup') @@ -56,7 +84,7 @@ public function testGetUsersMultipleBackends() { $backend1 = $this->createMock('OC\Group\Database'); $backend2 = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend1, $backend2], $userManager); + $group = new \OC\Group\Group('group1', [$backend1, $backend2], $userManager, $this->getEventDispatcherMock()); $backend1->expects($this->once()) ->method('usersInGroup') @@ -82,7 +110,7 @@ public function testGetUsersMultipleBackends() { public function testInGroupSingleBackend() { $backend = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend], $userManager); + $group = new \OC\Group\Group('group1', [$backend], $userManager, $this->getEventDispatcherMock()); $backend->expects($this->once()) ->method('inGroup') @@ -99,7 +127,7 @@ public function testInGroupMultipleBackends() { $backend1 = $this->createMock('OC\Group\Database'); $backend2 = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend1, $backend2], $userManager); + $group = new \OC\Group\Group('group1', [$backend1, $backend2], $userManager, $this->getEventDispatcherMock()); $backend1->expects($this->once()) ->method('inGroup') @@ -120,7 +148,42 @@ public function testInGroupMultipleBackends() { public function testAddUser() { $backend = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend], $userManager); + $group = new \OC\Group\Group('group1', [$backend], $userManager, $this->getEventDispatcherMock()); + + $backend->expects($this->once()) + ->method('inGroup') + ->with('user1', 'group1') + ->will($this->returnValue(false)); + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(true)); + + $backend->expects($this->once()) + ->method('addToGroup') + ->with('user1', 'group1'); + + $user1 = $this->createMock(IUser::class); + $user1->expects($this->any())->method('getUID')->willReturn('user1'); + + $group->addUser($user1); + } + + public function testAddUserWithDispatcher() { + $backend = $this->createMock('OC\Group\Database'); + $userManager = $this->getUserManager(); + + $eventsCalled = ['group.preAddUser' => [], 'group.postAddUser' => []]; + $dispatcher = $this->getEventDispatcherMock(); + $dispatcher->addListener('group.preAddUser', function(GenericEvent $event) use (&$eventsCalled){ + $eventsCalled['group.preAddUser']['subject'] = $event->getSubject(); + $eventsCalled['group.preAddUser']['arguments'] = $event->getArguments(); + }); + $dispatcher->addListener('group.postAddUser', function(GenericEvent $event) use (&$eventsCalled){ + $eventsCalled['group.postAddUser']['subject'] = $event->getSubject(); + $eventsCalled['group.postAddUser']['arguments'] = $event->getArguments(); + }); + + $group = new \OC\Group\Group('group1', [$backend], $userManager, $dispatcher); $backend->expects($this->once()) ->method('inGroup') @@ -138,12 +201,53 @@ public function testAddUser() { $user1->expects($this->any())->method('getUID')->willReturn('user1'); $group->addUser($user1); + + $this->assertNotEmpty($eventsCalled['group.preAddUser']); + $this->assertInstanceOf(Group::class, $eventsCalled['group.preAddUser']['subject']); + $this->assertEquals(['user' => $user1], $eventsCalled['group.preAddUser']['arguments']); + $this->assertNotEmpty($eventsCalled['group.postAddUser']); + $this->assertInstanceOf(Group::class, $eventsCalled['group.postAddUser']['subject']); + $this->assertEquals(['user' => $user1], $eventsCalled['group.postAddUser']['arguments']); } public function testAddUserAlreadyInGroup() { $backend = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend], $userManager); + $group = new \OC\Group\Group('group1', [$backend], $userManager, $this->getEventDispatcherMock()); + + $backend->expects($this->once()) + ->method('inGroup') + ->with('user1', 'group1') + ->will($this->returnValue(true)); + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(true)); + + $backend->expects($this->never()) + ->method('addToGroup'); + + $user1 = $this->createMock(IUser::class); + $user1->expects($this->any())->method('getUID')->willReturn('user1'); + + $group->addUser($user1); + } + + public function testAddUserAlreadyInGroupWithDispatcher() { + $backend = $this->createMock('OC\Group\Database'); + $userManager = $this->getUserManager(); + + $eventsCalled = ['group.preAddUser' => [], 'group.postAddUser' => []]; + $dispatcher = $this->getEventDispatcherMock(); + $dispatcher->addListener('group.preAddUser', function(GenericEvent $event) use (&$eventsCalled){ + $eventsCalled['group.preAddUser']['subject'] = $event->getSubject(); + $eventsCalled['group.preAddUser']['arguments'] = $event->getArguments(); + }); + $dispatcher->addListener('group.postAddUser', function(GenericEvent $event) use (&$eventsCalled){ + $eventsCalled['group.postAddUser']['subject'] = $event->getSubject(); + $eventsCalled['group.postAddUser']['arguments'] = $event->getArguments(); + }); + + $group = new \OC\Group\Group('group1', [$backend], $userManager, $dispatcher); $backend->expects($this->once()) ->method('inGroup') @@ -160,12 +264,50 @@ public function testAddUserAlreadyInGroup() { $user1->expects($this->any())->method('getUID')->willReturn('user1'); $group->addUser($user1); + + $this->assertEmpty($eventsCalled['group.preAddUser']); + $this->assertEmpty($eventsCalled['group.postAddUser']); } public function testRemoveUser() { $backend = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend], $userManager); + $group = new \OC\Group\Group('group1', [$backend], $userManager, $this->getEventDispatcherMock()); + + $backend->expects($this->once()) + ->method('inGroup') + ->with('user1', 'group1') + ->will($this->returnValue(true)); + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(true)); + + $backend->expects($this->once()) + ->method('removeFromGroup') + ->with('user1', 'group1'); + + $user1 = $this->createMock(IUser::class); + $user1->expects($this->any())->method('getUID')->willReturn('user1'); + + $group->removeUser($user1); + } + + public function testRemoveUserWithDispatcher() { + $backend = $this->createMock('OC\Group\Database'); + $userManager = $this->getUserManager(); + + $eventsCalled = ['group.preRemoveUser' => [], 'group.postRemoveUser' => []]; + $dispatcher = $this->getEventDispatcherMock(); + $dispatcher->addListener('group.preRemoveUser', function(GenericEvent $event) use (&$eventsCalled){ + $eventsCalled['group.preRemoveUser']['subject'] = $event->getSubject(); + $eventsCalled['group.preRemoveUser']['arguments'] = $event->getArguments(); + }); + $dispatcher->addListener('group.postRemoveUser', function(GenericEvent $event) use (&$eventsCalled){ + $eventsCalled['group.postRemoveUser']['subject'] = $event->getSubject(); + $eventsCalled['group.postRemoveUser']['arguments'] = $event->getArguments(); + }); + + $group = new \OC\Group\Group('group1', [$backend], $userManager, $dispatcher); $backend->expects($this->once()) ->method('inGroup') @@ -183,12 +325,31 @@ public function testRemoveUser() { $user1->expects($this->any())->method('getUID')->willReturn('user1'); $group->removeUser($user1); + + $this->assertNotEmpty($eventsCalled['group.preRemoveUser']); + $this->assertInstanceOf(Group::class, $eventsCalled['group.preRemoveUser']['subject']); + $this->assertEquals(['user' => $user1], $eventsCalled['group.preRemoveUser']['arguments']); + $this->assertNotEmpty($eventsCalled['group.postRemoveUser']); + $this->assertInstanceOf(Group::class, $eventsCalled['group.postRemoveUser']['subject']); + $this->assertEquals(['user' => $user1], $eventsCalled['group.postRemoveUser']['arguments']); } public function testRemoveUserNotInGroup() { $backend = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend], $userManager); + + $eventsCalled = ['group.preRemoveUser' => [], 'group.postRemoveUser' => []]; + $dispatcher = $this->getEventDispatcherMock(); + $dispatcher->addListener('group.preRemoveUser', function(GenericEvent $event) use (&$eventsCalled){ + $eventsCalled['group.preRemoveUser']['subject'] = $event->getSubject(); + $eventsCalled['group.preRemoveUser']['arguments'] = $event->getArguments(); + }); + $dispatcher->addListener('group.postRemoveUser', function(GenericEvent $event) use (&$eventsCalled){ + $eventsCalled['group.postRemoveUser']['subject'] = $event->getSubject(); + $eventsCalled['group.postRemoveUser']['arguments'] = $event->getArguments(); + }); + + $group = new \OC\Group\Group('group1', [$backend], $userManager, $dispatcher); $backend->expects($this->once()) ->method('inGroup') @@ -204,13 +365,19 @@ public function testRemoveUserNotInGroup() { $user1->expects($this->any())->method('getUID')->willReturn('user1'); $group->removeUser($user1); + + // preRemoveUser is triggered but not postRemoveUser + $this->assertNotEmpty($eventsCalled['group.preRemoveUser']); + $this->assertInstanceOf(Group::class, $eventsCalled['group.preRemoveUser']['subject']); + $this->assertEquals(['user' => $user1], $eventsCalled['group.preRemoveUser']['arguments']); + $this->assertEmpty($eventsCalled['group.postRemoveUser']); } public function testRemoveUserMultipleBackends() { $backend1 = $this->createMock('OC\Group\Database'); $backend2 = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend1, $backend2], $userManager); + $group = new \OC\Group\Group('group1', [$backend1, $backend2], $userManager, $this->getEventDispatcherMock()); $backend1->expects($this->once()) ->method('inGroup') @@ -245,7 +412,7 @@ public function testRemoveUserMultipleBackends() { public function testSearchUsers() { $backend = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend], $userManager); + $group = new \OC\Group\Group('group1', [$backend], $userManager, $this->getEventDispatcherMock()); $backend->expects($this->once()) ->method('usersInGroup') @@ -263,7 +430,7 @@ public function testSearchUsersMultipleBackends() { $backend1 = $this->createMock('OC\Group\Database'); $backend2 = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend1, $backend2], $userManager); + $group = new \OC\Group\Group('group1', [$backend1, $backend2], $userManager, $this->getEventDispatcherMock()); $backend1->expects($this->once()) ->method('usersInGroup') @@ -284,7 +451,7 @@ public function testSearchUsersMultipleBackends() { public function testSearchUsersLimitAndOffset() { $backend = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend], $userManager); + $group = new \OC\Group\Group('group1', [$backend], $userManager, $this->getEventDispatcherMock()); $backend->expects($this->once()) ->method('usersInGroup') @@ -302,7 +469,7 @@ public function testSearchUsersMultipleBackendsLimitAndOffset() { $backend1 = $this->createMock('OC\Group\Database'); $backend2 = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend1, $backend2], $userManager); + $group = new \OC\Group\Group('group1', [$backend1, $backend2], $userManager, $this->getEventDispatcherMock()); $backend1->expects($this->once()) ->method('usersInGroup') @@ -325,7 +492,7 @@ public function testSearchUsersMultipleBackendsLimitAndOffset() { public function testCountUsers() { $backend1 = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend1], $userManager); + $group = new \OC\Group\Group('group1', [$backend1], $userManager, $this->getEventDispatcherMock()); $backend1->expects($this->once()) ->method('countUsersInGroup') @@ -345,7 +512,7 @@ public function testCountUsersMultipleBackends() { $backend1 = $this->createMock('OC\Group\Database'); $backend2 = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend1, $backend2], $userManager); + $group = new \OC\Group\Group('group1', [$backend1, $backend2], $userManager, $this->getEventDispatcherMock()); $backend1->expects($this->once()) ->method('countUsersInGroup') @@ -371,7 +538,7 @@ public function testCountUsersMultipleBackends() { public function testCountUsersNoMethod() { $backend1 = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend1], $userManager); + $group = new \OC\Group\Group('group1', [$backend1], $userManager, $this->getEventDispatcherMock()); $backend1->expects($this->never()) ->method('countUsersInGroup'); @@ -387,7 +554,7 @@ public function testCountUsersNoMethod() { public function testDelete() { $backend = $this->createMock('OC\Group\Database'); $userManager = $this->getUserManager(); - $group = new \OC\Group\Group('group1', [$backend], $userManager); + $group = new \OC\Group\Group('group1', [$backend], $userManager, $this->getEventDispatcherMock()); $backend->expects($this->once()) ->method('deleteGroup') @@ -398,4 +565,36 @@ public function testDelete() { $group->delete(); } + + public function testDeleteWithDispatcher() { + $backend = $this->createMock('OC\Group\Database'); + $userManager = $this->getUserManager(); + + $eventsCalled = ['group.preDelete' => [], 'group.postDelete' => []]; + $dispatcher = $this->getEventDispatcherMock(); + $dispatcher->addListener('group.preDelete', function(GenericEvent $event) use (&$eventsCalled){ + $eventsCalled['group.preDelete']['subject'] = $event->getSubject(); + $eventsCalled['group.preDelete']['arguments'] = $event->getArguments(); + }); + $dispatcher->addListener('group.postDelete', function(GenericEvent $event) use (&$eventsCalled){ + $eventsCalled['group.postDelete']['subject'] = $event->getSubject(); + $eventsCalled['group.postDelete']['arguments'] = $event->getArguments(); + }); + + $group = new \OC\Group\Group('group1', [$backend], $userManager, $dispatcher); + + $backend->expects($this->once()) + ->method('deleteGroup') + ->with('group1'); + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(true)); + + $group->delete(); + + $this->assertNotEmpty($eventsCalled['group.preDelete']); + $this->assertInstanceOf(Group::class, $eventsCalled['group.preDelete']['subject']); + $this->assertNotEmpty($eventsCalled['group.postDelete']); + $this->assertInstanceOf(Group::class, $eventsCalled['group.postDelete']['subject']); + } } diff --git a/tests/lib/Group/ManagerTest.php b/tests/lib/Group/ManagerTest.php index fa9c71d71e42..80c5a855e735 100644 --- a/tests/lib/Group/ManagerTest.php +++ b/tests/lib/Group/ManagerTest.php @@ -23,10 +23,13 @@ namespace Test\Group; use OC\Group\Database; +use OC\Group\Group; use OC\User\Manager; use OCP\GroupInterface; use OCP\IUser; -use OCP\Util\UserSearch; +use OCP\Util\UserSearch; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\GenericEvent; class ManagerTest extends \Test\TestCase { @@ -40,6 +43,12 @@ class ManagerTest extends \Test\TestCase { */ protected $userSearch; + /** @var EventDispatcherInterface */ + protected $eventDispatcher; + + /** @var \OC\Group\Manager */ + protected $manager; + protected function setUp() { parent::setUp(); $this->userSearch = $this->getMockBuilder(UserSearch::class) @@ -50,6 +59,9 @@ protected function setUp() { ->willReturn(true); $this->userManager = $this->createMock(Manager::class); + $this->eventDispatcher = $this->getEventDispatcherMock(); + + $this->manager = new \OC\Group\Manager($this->userManager, $this->userSearch, $this->eventDispatcher); } private function getTestUser($userId) { @@ -107,6 +119,31 @@ private function getTestBackend($implementedActions = null, $visibleForScopes = return $backend; } + private function getEventDispatcherMock() { + $eventMap = []; + $eventDispatcher = $this->getMockBuilder(EventDispatcherInterface::class) + ->disableOriginalConstructor() + ->getMock(); + $eventDispatcher->method('addListener') + ->will($this->returnCallback(function($eventName, $callable, $priority) use (&$eventMap){ + if (!isset($eventMap[$eventName])) { + $eventMap[$eventName] = []; + } + // ignore priority for now + $eventMap[$eventName][] = $callable; + })); + $eventDispatcher->method('dispatch') + ->will($this->returnCallback(function($eventName, $event) use (&$eventMap){ + if (isset($eventMap[$eventName])) { + foreach ($eventMap[$eventName] as $callable) { + $callable($event); + } + } + return $event; + })); + return $eventDispatcher; + } + public function testGet() { /** * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend @@ -117,19 +154,15 @@ public function testGet() { ->with('group1') ->will($this->returnValue(true)); + $this->manager->addBackend($backend); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); - - $group = $manager->get('group1'); + $group = $this->manager->get('group1'); $this->assertNotNull($group); $this->assertEquals('group1', $group->getGID()); } public function testGetNoBackend() { - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - - $this->assertNull($manager->get('group1')); + $this->assertNull($this->manager->get('group1')); } public function testGetNotExists() { @@ -142,23 +175,20 @@ public function testGetNotExists() { ->with('group1') ->will($this->returnValue(false)); + $this->manager->addBackend($backend); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); - - $this->assertNull($manager->get('group1')); + $this->assertNull($this->manager->get('group1')); } public function testGetDeleted() { $backend = new \Test\Util\Group\Dummy(); $backend->createGroup('group1'); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $group = $manager->get('group1'); + $group = $this->manager->get('group1'); $group->delete(); - $this->assertNull($manager->get('group1')); + $this->assertNull($this->manager->get('group1')); } public function testGetMultipleBackends() { @@ -180,11 +210,10 @@ public function testGetMultipleBackends() { ->with('group1') ->will($this->returnValue(true)); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend1); - $manager->addBackend($backend2); + $this->manager->addBackend($backend1); + $this->manager->addBackend($backend2); - $group = $manager->get('group1'); + $group = $this->manager->get('group1'); $this->assertNotNull($group); $this->assertEquals('group1', $group->getGID()); } @@ -207,13 +236,51 @@ public function testCreate() { $backendGroupCreated = true; }));; - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $group = $manager->createGroup('group1'); + $group = $this->manager->createGroup('group1'); $this->assertEquals('group1', $group->getGID()); } + public function testCreateWithDispatcher() { + /** + * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend + */ + $backendGroupCreated = false; + $backend = $this->getTestBackend(); + $backend->expects($this->any()) + ->method('groupExists') + ->with('group1') + ->will($this->returnCallback(function () use (&$backendGroupCreated) { + return $backendGroupCreated; + })); + $backend->expects($this->once()) + ->method('createGroup') + ->will($this->returnCallback(function () use (&$backendGroupCreated) { + $backendGroupCreated = true; + }));; + + $eventsCalled = ['group.preCreate' => [], 'group.postCreate' => []]; + $this->eventDispatcher->addListener('group.preCreate', function(GenericEvent $event) use (&$eventsCalled){ + $eventsCalled['group.preCreate']['subject'] = $event->getSubject(); + $eventsCalled['group.preCreate']['arguments'] = $event->getArguments(); + }); + $this->eventDispatcher->addListener('group.postCreate', function(GenericEvent $event) use (&$eventsCalled){ + $eventsCalled['group.postCreate']['subject'] = $event->getSubject(); + $eventsCalled['group.postCreate']['arguments'] = $event->getArguments(); + }); + + $this->manager->addBackend($backend); + + $group = $this->manager->createGroup('group1'); + $this->assertNotEmpty($eventsCalled['group.preCreate']); + $this->assertNull($eventsCalled['group.preCreate']['subject']); + $this->assertEquals(['gid' => 'group1'], $eventsCalled['group.preCreate']['arguments']); + $this->assertNotEmpty($eventsCalled['group.postCreate']); + $this->assertInstanceOf(Group::class, $eventsCalled['group.postCreate']['subject']); + $this->assertEquals(['gid' => 'group1'], $eventsCalled['group.postCreate']['arguments']); + } + public function testCreateExists() { /** * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend @@ -226,13 +293,42 @@ public function testCreateExists() { $backend->expects($this->never()) ->method('createGroup'); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $group = $manager->createGroup('group1'); + $group = $this->manager->createGroup('group1'); $this->assertEquals('group1', $group->getGID()); } + public function testCreateExistsWithDispatcher() { + /** + * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend + */ + $backend = $this->getTestBackend(); + $backend->expects($this->any()) + ->method('groupExists') + ->with('group1') + ->will($this->returnValue(true)); + $backend->expects($this->never()) + ->method('createGroup'); + + $eventsCalled = ['group.preCreate' => [], 'group.postCreate' => []]; + $this->eventDispatcher->addListener('group.preCreate', function(GenericEvent $event) use (&$eventsCalled){ + $eventsCalled['group.preCreate']['subject'] = $event->getSubject(); + $eventsCalled['group.preCreate']['arguments'] = $event->getArguments(); + }); + $this->eventDispatcher->addListener('group.postCreate', function(GenericEvent $event) use (&$eventsCalled){ + $eventsCalled['group.postCreate']['subject'] = $event->getSubject(); + $eventsCalled['group.postCreate']['arguments'] = $event->getArguments(); + }); + + $this->manager->addBackend($backend); + + $group = $this->manager->createGroup('group1'); + // events shouldn't be called + $this->assertEmpty($eventsCalled['group.preCreate']); + $this->assertEmpty($eventsCalled['group.postCreate']); + } + public function testSearch() { /** * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend @@ -247,10 +343,9 @@ public function testSearch() { ->with('group1') ->will($this->returnValue(true)); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $groups = $manager->search('1'); + $groups = $this->manager->search('1'); $this->assertCount(1, $groups); $group1 = reset($groups); $this->assertEquals('group1', $group1->getGID()); @@ -281,11 +376,10 @@ public function testSearchMultipleBackends() { ->method('groupExists') ->will($this->returnValue(true)); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend1); - $manager->addBackend($backend2); + $this->manager->addBackend($backend1); + $this->manager->addBackend($backend2); - $groups = $manager->search('1'); + $groups = $this->manager->search('1'); $this->assertCount(2, $groups); $group1 = reset($groups); $group12 = next($groups); @@ -318,11 +412,10 @@ public function testSearchMultipleBackendsLimitAndOffset() { ->method('groupExists') ->will($this->returnValue(true)); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend1); - $manager->addBackend($backend2); + $this->manager->addBackend($backend1); + $this->manager->addBackend($backend2); - $groups = $manager->search('1', 2, 1); + $groups = $this->manager->search('1', 2, 1); $this->assertCount(2, $groups); $group1 = reset($groups); $group12 = next($groups); @@ -347,10 +440,9 @@ public function testSearchResultExistsButGroupDoesNot() { ->method('isVisibleForScope') ->will($this->returnValue(true)); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $groups = $manager->search('1'); + $groups = $this->manager->search('1'); $this->assertEmpty($groups); } @@ -382,18 +474,17 @@ public function testSearchBackendsForScope() { ->method('groupExists') ->will($this->returnValue(true)); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend1); - $manager->addBackend($backend2); + $this->manager->addBackend($backend1); + $this->manager->addBackend($backend2); // search without scope - $groups = $manager->search('1', null, null, null); + $groups = $this->manager->search('1', null, null, null); $this->assertCount(1, $groups); $group1 = reset($groups); $this->assertEquals('group1', $group1->getGID()); // search with scope - $groups = $manager->search('1', null, null, 'sharing'); + $groups = $this->manager->search('1', null, null, 'sharing'); $this->assertCount(2, $groups); $group1 = reset($groups); $group12 = next($groups); @@ -415,11 +506,9 @@ public function testGetUserGroups() { ->with('group1') ->will($this->returnValue(true)); - $userBackend = $this->createMock(\OC_User_Backend::class); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $groups = $manager->getUserGroups($this->getTestUser('user1')); + $groups = $this->manager->getUserGroups($this->getTestUser('user1')); $this->assertCount(1, $groups); $group1 = reset($groups); $this->assertEquals('group1', $group1->getGID()); @@ -465,15 +554,13 @@ public function testGetUserGroupsWithDeletedGroup() { ->with('group1') ->will($this->returnValue(false)); - $userBackend = $this->createMock(\OC_User_Backend::class); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); /** @var \OC\User\User $user */ $user = $this->createMock(IUser::class); $user->method('getUID')->willReturn('user1'); - $groups = $manager->getUserGroups($user); + $groups = $this->manager->getUserGroups($user); $this->assertEmpty($groups); } @@ -494,14 +581,12 @@ public function testGetUserGroupsWithScope() { ->with('group1') ->will($this->returnValue(true)); - $userBackend = $this->createMock(\OC_User_Backend::class); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $groups = $manager->getUserGroups($this->getTestUser('user1')); + $groups = $this->manager->getUserGroups($this->getTestUser('user1')); $this->assertEmpty($groups); - $groups = $manager->getUserGroups($this->getTestUser('user1'), 'sharing'); + $groups = $this->manager->getUserGroups($this->getTestUser('user1'), 'sharing'); $this->assertCount(1, $groups); $group1 = reset($groups); $this->assertEquals('group1', $group1->getGID()); @@ -520,11 +605,9 @@ public function testIsInGroup() { ->method('groupExists') ->will($this->returnValue(true)); - $userBackend = $this->createMock(\OC_User_Backend::class); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $this->assertTrue($manager->isInGroup('user1', 'group1')); + $this->assertTrue($this->manager->isInGroup('user1', 'group1')); } public function testInGroup() { @@ -548,10 +631,10 @@ public function testInGroup() { ->method('get') ->with('user1') ->will($this->returnValue($user)); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); - $this->assertTrue($manager->inGroup('user1', 'group1')); + $this->manager->addBackend($backend); + + $this->assertTrue($this->manager->inGroup('user1', 'group1')); } public function testNotInGroup() { @@ -575,10 +658,10 @@ public function testNotInGroup() { ->method('get') ->with('user1') ->will($this->returnValue($user)); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); - $this->assertFalse($manager->inGroup('user1', 'group1')); + $this->manager->addBackend($backend); + + $this->assertFalse($this->manager->inGroup('user1', 'group1')); } public function testIsAdmin() { @@ -594,11 +677,9 @@ public function testIsAdmin() { ->method('groupExists') ->will($this->returnValue(true)); - $userBackend = $this->createMock(\OC_User_Backend::class); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $this->assertTrue($manager->isAdmin('user1')); + $this->assertTrue($this->manager->isAdmin('user1')); } public function testNotAdmin() { @@ -614,11 +695,9 @@ public function testNotAdmin() { ->method('groupExists') ->will($this->returnValue(true)); - $userBackend = $this->createMock(\OC_User_Backend::class); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $this->assertFalse($manager->isAdmin('user1')); + $this->assertFalse($this->manager->isAdmin('user1')); } public function testGetUserGroupsMultipleBackends() { @@ -646,12 +725,10 @@ public function testGetUserGroupsMultipleBackends() { ->method('groupExists') ->will($this->returnValue(true)); - $userBackend = $this->createMock(\OC_User_Backend::class); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend1); - $manager->addBackend($backend2); + $this->manager->addBackend($backend1); + $this->manager->addBackend($backend2); - $groups = $manager->getUserGroups($this->getTestUser('user1')); + $groups = $this->manager->getUserGroups($this->getTestUser('user1')); $this->assertCount(2, $groups); $group1 = reset($groups); $group2 = next($groups); @@ -682,12 +759,10 @@ public function testDisplayNamesInGroupWithOneUserBackend() { } })); - $userBackend = $this->createMock(\OC_User_Backend::class); - $this->userManager->expects($this->any()) ->method('searchDisplayName') ->with('user3') - ->will($this->returnCallback(function($search, $limit, $offset) use ($userBackend) { + ->will($this->returnCallback(function($search, $limit, $offset) { switch($offset) { case 0 : return ['user3' => $this->getTestUser('user3'), 'user33' => $this->getTestUser('user33')]; @@ -697,7 +772,7 @@ public function testDisplayNamesInGroupWithOneUserBackend() { $this->userManager->expects($this->any()) ->method('get') - ->will($this->returnCallback(function($uid) use ($userBackend) { + ->will($this->returnCallback(function($uid) { switch($uid) { case 'user1' : return $this->getTestUser('user1'); case 'user2' : return $this->getTestUser('user2'); @@ -708,10 +783,9 @@ public function testDisplayNamesInGroupWithOneUserBackend() { } })); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $users = $manager->displayNamesInGroup('testgroup', 'user3'); + $users = $this->manager->displayNamesInGroup('testgroup', 'user3'); $this->assertCount(1, $users); $this->assertArrayNotHasKey('user1', $users); $this->assertArrayNotHasKey('user2', $users); @@ -743,12 +817,11 @@ public function testDisplayNamesInGroupWithOneUserBackendWithLimitSpecified() { } })); - $userBackend = $this->createMock(\OC_User_Backend::class); $this->userManager->expects($this->any()) ->method('searchDisplayName') ->with('user3') - ->will($this->returnCallback(function($search, $limit, $offset) use ($userBackend) { + ->will($this->returnCallback(function($search, $limit, $offset) { switch($offset) { case 0 : return ['user3' => $this->getTestUser('user3'), 'user33' => $this->getTestUser('user33')]; @@ -758,7 +831,7 @@ public function testDisplayNamesInGroupWithOneUserBackendWithLimitSpecified() { $this->userManager->expects($this->any()) ->method('get') - ->will($this->returnCallback(function($uid) use ($userBackend) { + ->will($this->returnCallback(function($uid) { switch($uid) { case 'user1' : return $this->getTestUser('user1'); case 'user2' : return $this->getTestUser('user2'); @@ -770,10 +843,9 @@ public function testDisplayNamesInGroupWithOneUserBackendWithLimitSpecified() { } })); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $users = $manager->displayNamesInGroup('testgroup', 'user3', 1); + $users = $this->manager->displayNamesInGroup('testgroup', 'user3', 1); $this->assertCount(1, $users); $this->assertArrayNotHasKey('user1', $users); $this->assertArrayNotHasKey('user2', $users); @@ -806,12 +878,10 @@ public function testDisplayNamesInGroupWithOneUserBackendWithLimitAndOffsetSpeci } })); - $userBackend = $this->createMock(\OC_User_Backend::class); - $this->userManager->expects($this->any()) ->method('searchDisplayName') ->with('user3') - ->will($this->returnCallback(function($search, $limit, $offset) use ($userBackend) { + ->will($this->returnCallback(function($search, $limit, $offset) { switch($offset) { case 0 : return [ @@ -824,7 +894,7 @@ public function testDisplayNamesInGroupWithOneUserBackendWithLimitAndOffsetSpeci $this->userManager->expects($this->any()) ->method('get') - ->will($this->returnCallback(function($uid) use ($userBackend) { + ->will($this->returnCallback(function($uid) { switch($uid) { case 'user1' : return $this->getTestUser('user1'); case 'user2' : return $this->getTestUser('user2'); @@ -836,10 +906,9 @@ public function testDisplayNamesInGroupWithOneUserBackendWithLimitAndOffsetSpeci } })); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $users = $manager->displayNamesInGroup('testgroup', 'user3', 1, 1); + $users = $this->manager->displayNamesInGroup('testgroup', 'user3', 1, 1); $this->assertCount(1, $users); $this->assertArrayNotHasKey('user1', $users); $this->assertArrayNotHasKey('user2', $users); @@ -863,11 +932,9 @@ public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmpty() { ->with('testgroup', '', -1, 0) ->will($this->returnValue(['user2', 'user33'])); - $userBackend = $this->createMock(\OC_User_Backend::class); - $this->userManager->expects($this->any()) ->method('get') - ->will($this->returnCallback(function($uid) use ($userBackend) { + ->will($this->returnCallback(function($uid) { switch($uid) { case 'user1' : return $this->getTestUser('user1'); case 'user2' : return $this->getTestUser('user2'); @@ -878,10 +945,9 @@ public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmpty() { } })); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $users = $manager->displayNamesInGroup('testgroup', ''); + $users = $this->manager->displayNamesInGroup('testgroup', ''); $this->assertCount(2, $users); $this->assertArrayNotHasKey('user1', $users); $this->assertArrayHasKey('user2', $users); @@ -904,10 +970,9 @@ public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmptyAndLimitS ->with('testgroup', '', 1, 0) ->will($this->returnValue(['user2'])); - $userBackend = $this->createMock(\OC_User_Backend::class); $this->userManager->expects($this->any()) ->method('get') - ->will($this->returnCallback(function($uid) use ($userBackend) { + ->will($this->returnCallback(function($uid) { switch($uid) { case 'user1' : return $this->getTestUser('user1'); case 'user2' : return $this->getTestUser('user2'); @@ -918,10 +983,9 @@ public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmptyAndLimitS } })); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $users = $manager->displayNamesInGroup('testgroup', '', 1); + $users = $this->manager->displayNamesInGroup('testgroup', '', 1); $this->assertCount(1, $users); $this->assertArrayNotHasKey('user1', $users); $this->assertArrayHasKey('user2', $users); @@ -945,10 +1009,9 @@ public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmptyAndLimitA ->will($this->returnValue(['user33'])); - $userBackend = $this->createMock(\OC_User_Backend::class); $this->userManager->expects($this->any()) ->method('get') - ->will($this->returnCallback(function($uid) use ($userBackend) { + ->will($this->returnCallback(function($uid) { switch($uid) { case 'user1' : return $this->getTestUser('user1'); case 'user2' : return $this->getTestUser('user2'); @@ -959,10 +1022,9 @@ public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmptyAndLimitA } })); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $users = $manager->displayNamesInGroup('testgroup', '', 1, 1); + $users = $this->manager->displayNamesInGroup('testgroup', '', 1, 1); $this->assertCount(1, $users); $this->assertArrayNotHasKey('user1', $users); $this->assertArrayNotHasKey('user2', $users); @@ -987,22 +1049,20 @@ public function testGetUserGroupsWithAddUser() { ->with('group1') ->will($this->returnValue(true)); - - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); // prime cache $user1 = $this->getTestUser('user1'); - $groups = $manager->getUserGroups($user1); + $groups = $this->manager->getUserGroups($user1); $this->assertEquals([], $groups); // add user - $group = $manager->get('group1'); + $group = $this->manager->get('group1'); $group->addUser($user1); $expectedGroups = ['group1']; // check result - $groups = $manager->getUserGroups($user1); + $groups = $this->manager->getUserGroups($user1); $this->assertCount(1, $groups); $group1 = reset($groups); $this->assertEquals('group1', $group1->getGID()); @@ -1031,24 +1091,22 @@ public function testGetUserGroupsWithRemoveUser() { ->method('removeFromGroup') ->will($this->returnValue(true)); - - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); // prime cache $user1 = $this->getTestUser('user1'); - $groups = $manager->getUserGroups($user1); + $groups = $this->manager->getUserGroups($user1); $this->assertCount(1, $groups); $group1 = reset($groups); $this->assertEquals('group1', $group1->getGID()); // remove user - $group = $manager->get('group1'); + $group = $this->manager->get('group1'); $group->removeUser($user1); $expectedGroups = []; // check result - $groups = $manager->getUserGroups($user1); + $groups = $this->manager->getUserGroups($user1); $this->assertEquals($expectedGroups, $groups); } @@ -1062,11 +1120,9 @@ public function testGetUserIdGroups() { ->with('user1') ->will($this->returnValue(null)); + $this->manager->addBackend($backend); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); - - $groups = $manager->getUserIdGroups('user1'); + $groups = $this->manager->getUserIdGroups('user1'); $this->assertEquals([], $groups); } @@ -1089,17 +1145,16 @@ public function testGroupDisplayName() { ['group2', ['gid' => 'group2']], ])); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); // group with display name - $group = $manager->get('group1'); + $group = $this->manager->get('group1'); $this->assertNotNull($group); $this->assertEquals('group1', $group->getGID()); $this->assertEquals('Group One', $group->getDisplayName()); // group without display name - $group = $manager->get('group2'); + $group = $this->manager->get('group2'); $this->assertNotNull($group); $this->assertEquals('group2', $group->getGID()); $this->assertEquals('group2', $group->getDisplayName()); @@ -1128,12 +1183,10 @@ public function testFindUsersInGroupWithOneUserBackend() { } })); - $userBackend = $this->createMock(\OC_User_Backend::class); - $this->userManager->expects($this->any()) ->method('find') ->with('user3') - ->will($this->returnCallback(function($search, $limit, $offset) use ($userBackend) { + ->will($this->returnCallback(function($search, $limit, $offset) { switch($offset) { case 0 : return ['user3' => $this->getTestUser('user3'), 'user33' => $this->getTestUser('user33')]; @@ -1143,7 +1196,7 @@ public function testFindUsersInGroupWithOneUserBackend() { $this->userManager->expects($this->any()) ->method('get') - ->will($this->returnCallback(function($uid) use ($userBackend) { + ->will($this->returnCallback(function($uid) { switch($uid) { case 'user1' : return $this->getTestUser('user1'); case 'user2' : return $this->getTestUser('user2'); @@ -1154,10 +1207,9 @@ public function testFindUsersInGroupWithOneUserBackend() { } })); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $users = $manager->findUsersInGroup('testgroup', 'user3'); + $users = $this->manager->findUsersInGroup('testgroup', 'user3'); $this->assertCount(1, $users); $this->assertArrayNotHasKey('user1', $users); $this->assertArrayNotHasKey('user2', $users); @@ -1189,12 +1241,10 @@ public function testFindUsersInGroupWithOneUserBackendWithLimitSpecified() { } })); - $userBackend = $this->createMock(\OC_User_Backend::class); - $this->userManager->expects($this->any()) ->method('find') ->with('user3') - ->will($this->returnCallback(function($search, $limit, $offset) use ($userBackend) { + ->will($this->returnCallback(function($search, $limit, $offset) { switch($offset) { case 0 : return ['user3' => $this->getTestUser('user3'), 'user33' => $this->getTestUser('user33')]; @@ -1204,7 +1254,7 @@ public function testFindUsersInGroupWithOneUserBackendWithLimitSpecified() { $this->userManager->expects($this->any()) ->method('get') - ->will($this->returnCallback(function($uid) use ($userBackend) { + ->will($this->returnCallback(function($uid) { switch($uid) { case 'user1' : return $this->getTestUser('user1'); case 'user2' : return $this->getTestUser('user2'); @@ -1216,10 +1266,9 @@ public function testFindUsersInGroupWithOneUserBackendWithLimitSpecified() { } })); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $users = $manager->findUsersInGroup('testgroup', 'user3', 1); + $users = $this->manager->findUsersInGroup('testgroup', 'user3', 1); $this->assertCount(1, $users); $this->assertArrayNotHasKey('user1', $users); $this->assertArrayNotHasKey('user2', $users); @@ -1252,12 +1301,10 @@ public function testFindUsersInGroupWithOneUserBackendWithLimitAndOffsetSpecifie } })); - - $userBackend = $this->createMock(\OC_User_Backend::class); $this->userManager->expects($this->any()) ->method('find') ->with('user3') - ->will($this->returnCallback(function($search, $limit, $offset) use ($userBackend) { + ->will($this->returnCallback(function($search, $limit, $offset) { switch($offset) { case 0 : return [ @@ -1270,7 +1317,7 @@ public function testFindUsersInGroupWithOneUserBackendWithLimitAndOffsetSpecifie $this->userManager->expects($this->any()) ->method('get') - ->will($this->returnCallback(function($uid) use ($userBackend) { + ->will($this->returnCallback(function($uid) { switch($uid) { case 'user1' : return $this->getTestUser('user1'); case 'user2' : return $this->getTestUser('user2'); @@ -1282,10 +1329,9 @@ public function testFindUsersInGroupWithOneUserBackendWithLimitAndOffsetSpecifie } })); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $users = $manager->findUsersInGroup('testgroup', 'user3', 1, 1); + $users = $this->manager->findUsersInGroup('testgroup', 'user3', 1, 1); $this->assertCount(1, $users); $this->assertArrayNotHasKey('user1', $users); $this->assertArrayNotHasKey('user2', $users); @@ -1309,10 +1355,9 @@ public function testFindUsersInGroupWithOneUserBackendAndSearchEmpty() { ->with('testgroup', '', -1, 0) ->will($this->returnValue(['user2', 'user33'])); - $userBackend = $this->createMock(\OC_User_Backend::class); $this->userManager->expects($this->any()) ->method('get') - ->will($this->returnCallback(function($uid) use ($userBackend) { + ->will($this->returnCallback(function($uid) { switch($uid) { case 'user1' : return $this->getTestUser('user1'); case 'user2' : return $this->getTestUser('user2'); @@ -1323,10 +1368,9 @@ public function testFindUsersInGroupWithOneUserBackendAndSearchEmpty() { } })); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $users = $manager->findUsersInGroup('testgroup', ''); + $users = $this->manager->findUsersInGroup('testgroup', ''); $this->assertCount(2, $users); $this->assertArrayNotHasKey('user1', $users); $this->assertArrayHasKey('user2', $users); @@ -1349,10 +1393,9 @@ public function testFindUsersInGroupWithOneUserBackendAndSearchEmptyAndLimitSpec ->with('testgroup', '', 1, 0) ->will($this->returnValue(['user2'])); - $userBackend = $this->createMock(\OC_User_Backend::class); $this->userManager->expects($this->any()) ->method('get') - ->will($this->returnCallback(function($uid) use ($userBackend) { + ->will($this->returnCallback(function($uid) { switch($uid) { case 'user1' : return $this->getTestUser('user1'); case 'user2' : return $this->getTestUser('user2'); @@ -1363,10 +1406,9 @@ public function testFindUsersInGroupWithOneUserBackendAndSearchEmptyAndLimitSpec } })); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $users = $manager->findUsersInGroup('testgroup', '', 1); + $users = $this->manager->findUsersInGroup('testgroup', '', 1); $this->assertCount(1, $users); $this->assertArrayNotHasKey('user1', $users); $this->assertArrayHasKey('user2', $users); @@ -1390,10 +1432,9 @@ public function testFindUsersInGroupWithOneUserBackendAndSearchEmptyAndLimitAndO ->will($this->returnValue(['user33'])); - $userBackend = $this->createMock(\OC_User_Backend::class); $this->userManager->expects($this->any()) ->method('get') - ->will($this->returnCallback(function($uid) use ($userBackend) { + ->will($this->returnCallback(function($uid) { switch($uid) { case 'user1' : return $this->getTestUser('user1'); case 'user2' : return $this->getTestUser('user2'); @@ -1404,10 +1445,9 @@ public function testFindUsersInGroupWithOneUserBackendAndSearchEmptyAndLimitAndO } })); - $manager = new \OC\Group\Manager($this->userManager, $this->userSearch); - $manager->addBackend($backend); + $this->manager->addBackend($backend); - $users = $manager->findUsersInGroup('testgroup', '', 1, 1); + $users = $this->manager->findUsersInGroup('testgroup', '', 1, 1); $this->assertCount(1, $users); $this->assertArrayNotHasKey('user1', $users); $this->assertArrayNotHasKey('user2', $users);