|
30 | 30 |
|
31 | 31 | use OCA\User_LDAP\Group_LDAP as GroupLDAP; |
32 | 32 | use OCA\User_LDAP\ILDAPWrapper; |
| 33 | +use Test\TestCase; |
33 | 34 |
|
34 | 35 | /** |
35 | 36 | * Class GroupLDAPTest |
|
38 | 39 | * |
39 | 40 | * @package OCA\User_LDAP\Tests |
40 | 41 | */ |
41 | | -class Group_LDAPTest extends \Test\TestCase { |
| 42 | +class Group_LDAPTest extends TestCase { |
42 | 43 | private function getAccessMock() { |
43 | 44 | static $conMethods; |
44 | 45 | static $accMethods; |
@@ -511,4 +512,86 @@ public function testGetGroupsByMember() { |
511 | 512 | $groupsAgain = $groupBackend->getUserGroups('userX'); |
512 | 513 | $this->assertEquals(['group1', 'group2'], $groupsAgain); |
513 | 514 | } |
| 515 | + |
| 516 | + public function groupMemberProvider() { |
| 517 | + $base = 'dc=species,dc=earth'; |
| 518 | + |
| 519 | + $groups0 = [ |
| 520 | + 'uid=3723,' . $base, |
| 521 | + 'uid=8372,' . $base, |
| 522 | + 'uid=8427,' . $base, |
| 523 | + 'uid=2333,' . $base, |
| 524 | + 'uid=4754,' . $base, |
| 525 | + ]; |
| 526 | + $groups1 = [ |
| 527 | + '3723', |
| 528 | + '8372', |
| 529 | + '8427', |
| 530 | + '2333', |
| 531 | + '4754', |
| 532 | + ]; |
| 533 | + $groups2Nested = ['6642', '1424']; |
| 534 | + $expGroups2 = array_merge($groups1, $groups2Nested); |
| 535 | + |
| 536 | + return [ |
| 537 | + [ #0 – test DNs |
| 538 | + 'cn=Birds,' . $base, |
| 539 | + $groups0, |
| 540 | + ['cn=Birds,' . $base => $groups0] |
| 541 | + ], |
| 542 | + [ #1 – test uids |
| 543 | + 'cn=Birds,' . $base, |
| 544 | + $groups1, |
| 545 | + ['cn=Birds,' . $base => $groups1] |
| 546 | + ], |
| 547 | + [ #2 – test uids with nested groups |
| 548 | + 'cn=Birds,' . $base, |
| 549 | + $expGroups2, |
| 550 | + [ |
| 551 | + 'cn=Birds,' . $base => $groups1, |
| 552 | + '8427' => $groups2Nested, // simplified - nested groups would work with DNs |
| 553 | + ], |
| 554 | + ], |
| 555 | + ]; |
| 556 | + } |
| 557 | + |
| 558 | + /** |
| 559 | + * @param string $groupDN |
| 560 | + * @param string[] $expectedMembers |
| 561 | + * @param array $groupsInfo |
| 562 | + * @dataProvider groupMemberProvider |
| 563 | + */ |
| 564 | + public function testGroupMembers($groupDN, $expectedMembers, $groupsInfo = null) { |
| 565 | + $access = $this->getAccessMock(); |
| 566 | + $access->expects($this->any()) |
| 567 | + ->method('readAttribute') |
| 568 | + ->willReturnCallback(function($group) use ($groupDN, $expectedMembers, $groupsInfo) { |
| 569 | + if(isset($groupsInfo[$group])) { |
| 570 | + return $groupsInfo[$group]; |
| 571 | + } |
| 572 | + return []; |
| 573 | + }); |
| 574 | + |
| 575 | + $access->connection = $this->createMock(Connection::class); |
| 576 | + if(count($groupsInfo) > 1) { |
| 577 | + $access->connection->expects($this->any()) |
| 578 | + ->method('__get') |
| 579 | + ->willReturnCallback(function($name) { |
| 580 | + if($name === 'ldapNestedGroups') { |
| 581 | + return 1; |
| 582 | + } |
| 583 | + return null; |
| 584 | + }); |
| 585 | + } |
| 586 | + |
| 587 | + /** @var GroupPluginManager $pluginManager */ |
| 588 | + $pluginManager = $this->createMock(GroupPluginManager::class); |
| 589 | + |
| 590 | + $ldap = new GroupLDAP($access, $pluginManager); |
| 591 | + $resultingMembers = $this->invokePrivate($ldap, '_groupMembers', [$groupDN]); |
| 592 | + |
| 593 | + $expected = array_keys(array_flip($expectedMembers)); |
| 594 | + |
| 595 | + $this->assertEquals($expected, array_keys($resultingMembers), '', 0.0, 10, true); |
| 596 | + } |
514 | 597 | } |
0 commit comments