|
31 | 31 |
|
32 | 32 | use OCA\User_LDAP\Group_LDAP as GroupLDAP; |
33 | 33 | use OCA\User_LDAP\ILDAPWrapper; |
| 34 | +use Test\TestCase; |
34 | 35 |
|
35 | 36 | /** |
36 | 37 | * Class GroupLDAPTest |
|
39 | 40 | * |
40 | 41 | * @package OCA\User_LDAP\Tests |
41 | 42 | */ |
42 | | -class Group_LDAPTest extends \Test\TestCase { |
| 43 | +class Group_LDAPTest extends TestCase { |
43 | 44 | private function getAccessMock() { |
44 | 45 | static $conMethods; |
45 | 46 | static $accMethods; |
@@ -653,4 +654,86 @@ public function testGetGroupsByMember() { |
653 | 654 | $groupsAgain = $groupBackend->getUserGroups('userX'); |
654 | 655 | $this->assertEquals(['group1', 'group2'], $groupsAgain); |
655 | 656 | } |
| 657 | + |
| 658 | + public function groupMemberProvider() { |
| 659 | + $base = 'dc=species,dc=earth'; |
| 660 | + |
| 661 | + $groups0 = [ |
| 662 | + 'uid=3723,' . $base, |
| 663 | + 'uid=8372,' . $base, |
| 664 | + 'uid=8427,' . $base, |
| 665 | + 'uid=2333,' . $base, |
| 666 | + 'uid=4754,' . $base, |
| 667 | + ]; |
| 668 | + $groups1 = [ |
| 669 | + '3723', |
| 670 | + '8372', |
| 671 | + '8427', |
| 672 | + '2333', |
| 673 | + '4754', |
| 674 | + ]; |
| 675 | + $groups2Nested = ['6642', '1424']; |
| 676 | + $expGroups2 = array_merge($groups1, $groups2Nested); |
| 677 | + |
| 678 | + return [ |
| 679 | + [ #0 – test DNs |
| 680 | + 'cn=Birds,' . $base, |
| 681 | + $groups0, |
| 682 | + ['cn=Birds,' . $base => $groups0] |
| 683 | + ], |
| 684 | + [ #1 – test uids |
| 685 | + 'cn=Birds,' . $base, |
| 686 | + $groups1, |
| 687 | + ['cn=Birds,' . $base => $groups1] |
| 688 | + ], |
| 689 | + [ #2 – test uids with nested groups |
| 690 | + 'cn=Birds,' . $base, |
| 691 | + $expGroups2, |
| 692 | + [ |
| 693 | + 'cn=Birds,' . $base => $groups1, |
| 694 | + '8427' => $groups2Nested, // simplified - nested groups would work with DNs |
| 695 | + ], |
| 696 | + ], |
| 697 | + ]; |
| 698 | + } |
| 699 | + |
| 700 | + /** |
| 701 | + * @param string $groupDN |
| 702 | + * @param string[] $expectedMembers |
| 703 | + * @param array $groupsInfo |
| 704 | + * @dataProvider groupMemberProvider |
| 705 | + */ |
| 706 | + public function testGroupMembers($groupDN, $expectedMembers, $groupsInfo = null) { |
| 707 | + $access = $this->getAccessMock(); |
| 708 | + $access->expects($this->any()) |
| 709 | + ->method('readAttribute') |
| 710 | + ->willReturnCallback(function($group) use ($groupDN, $expectedMembers, $groupsInfo) { |
| 711 | + if(isset($groupsInfo[$group])) { |
| 712 | + return $groupsInfo[$group]; |
| 713 | + } |
| 714 | + return []; |
| 715 | + }); |
| 716 | + |
| 717 | + $access->connection = $this->createMock(Connection::class); |
| 718 | + if(count($groupsInfo) > 1) { |
| 719 | + $access->connection->expects($this->any()) |
| 720 | + ->method('__get') |
| 721 | + ->willReturnCallback(function($name) { |
| 722 | + if($name === 'ldapNestedGroups') { |
| 723 | + return 1; |
| 724 | + } |
| 725 | + return null; |
| 726 | + }); |
| 727 | + } |
| 728 | + |
| 729 | + /** @var GroupPluginManager $pluginManager */ |
| 730 | + $pluginManager = $this->createMock(GroupPluginManager::class); |
| 731 | + |
| 732 | + $ldap = new GroupLDAP($access, $pluginManager); |
| 733 | + $resultingMembers = $this->invokePrivate($ldap, '_groupMembers', [$groupDN]); |
| 734 | + |
| 735 | + $expected = array_keys(array_flip($expectedMembers)); |
| 736 | + |
| 737 | + $this->assertEquals($expected, array_keys($resultingMembers), '', 0.0, 10, true); |
| 738 | + } |
656 | 739 | } |
0 commit comments