tests for retrieving group members with numerical uids

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
This commit is contained in:
Arthur Schiwon 2018-02-23 12:04:48 +01:00
parent 7e424e52a3
commit b02d3a27ba
No known key found for this signature in database
GPG Key ID: 7424F1874854DF23
1 changed files with 85 additions and 2 deletions

View File

@ -39,6 +39,7 @@ use OCA\User_LDAP\Connection;
use OCA\User_LDAP\Group_LDAP as GroupLDAP; use OCA\User_LDAP\Group_LDAP as GroupLDAP;
use OCA\User_LDAP\ILDAPWrapper; use OCA\User_LDAP\ILDAPWrapper;
use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\User\Manager;
use Test\TestCase;
/** /**
* Class GroupLDAPTest * Class GroupLDAPTest
@ -47,7 +48,7 @@ use OCA\User_LDAP\User\Manager;
* *
* @package OCA\User_LDAP\Tests * @package OCA\User_LDAP\Tests
*/ */
class Group_LDAPTest extends \Test\TestCase { class Group_LDAPTest extends TestCase {
/** /**
* @return \PHPUnit_Framework_MockObject_MockObject|Access * @return \PHPUnit_Framework_MockObject_MockObject|Access
*/ */
@ -965,6 +966,88 @@ class Group_LDAPTest extends \Test\TestCase {
$ldap = new GroupLDAP($access, $pluginManager); $ldap = new GroupLDAP($access, $pluginManager);
$ldap->getGroupDetails('gid'); $ldap->getGroupDetails('gid');
} }
public function groupMemberProvider() {
$base = 'dc=species,dc=earth';
$groups0 = [
'uid=3723,' . $base,
'uid=8372,' . $base,
'uid=8427,' . $base,
'uid=2333,' . $base,
'uid=4754,' . $base,
];
$groups1 = [
'3723',
'8372',
'8427',
'2333',
'4754',
];
$groups2Nested = ['6642', '1424'];
$expGroups2 = array_merge($groups1, $groups2Nested);
return [
[ #0 test DNs
'cn=Birds,' . $base,
$groups0,
['cn=Birds,' . $base => $groups0]
],
[ #1 test uids
'cn=Birds,' . $base,
$groups1,
['cn=Birds,' . $base => $groups1]
],
[ #2 test uids with nested groups
'cn=Birds,' . $base,
$expGroups2,
[
'cn=Birds,' . $base => $groups1,
'8427' => $groups2Nested, // simplified - nested groups would work with DNs
],
],
];
}
/**
* @param string $groupDN
* @param string[] $expectedMembers
* @param array $groupsInfo
* @dataProvider groupMemberProvider
*/
public function testGroupMembers($groupDN, $expectedMembers, $groupsInfo = null) {
$access = $this->getAccessMock();
$access->expects($this->any())
->method('readAttribute')
->willReturnCallback(function($group) use ($groupDN, $expectedMembers, $groupsInfo) {
if(isset($groupsInfo[$group])) {
return $groupsInfo[$group];
}
return [];
});
$access->connection = $this->createMock(Connection::class);
if(count($groupsInfo) > 1) {
$access->connection->expects($this->any())
->method('__get')
->willReturnCallback(function($name) {
if($name === 'ldapNestedGroups') {
return 1;
}
return null;
});
}
/** @var GroupPluginManager $pluginManager */
$pluginManager = $this->createMock(GroupPluginManager::class);
$ldap = new GroupLDAP($access, $pluginManager);
$resultingMembers = $this->invokePrivate($ldap, '_groupMembers', [$groupDN]);
$expected = array_keys(array_flip($expectedMembers));
$this->assertEquals($expected, array_keys($resultingMembers), '', 0.0, 10, true);
}
} }