Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 48 additions & 63 deletions apps/user_ldap/tests/AccessTest.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
<?php

declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
Expand Down Expand Up @@ -41,36 +43,25 @@
* @package OCA\User_LDAP\Tests
*/
class AccessTest extends TestCase {
/** @var UserMapping|MockObject */
protected $userMapper;
/** @var IManager|MockObject */
protected $shareManager;
/** @var GroupMapping|MockObject */
protected $groupMapper;
/** @var Connection|MockObject */
private $connection;
/** @var LDAP|MockObject */
private $ldap;
/** @var Manager|MockObject */
private $userManager;
/** @var Helper|MockObject */
private $helper;
/** @var IConfig|MockObject */
private $config;
/** @var IUserManager|MockObject */
private $ncUserManager;

protected UserMapping&MockObject $userMapper;
protected IManager&MockObject $shareManager;
protected GroupMapping&MockObject $groupMapper;
private Connection&MockObject $connection;
private LDAP&MockObject $ldap;
private Manager&MockObject $userManager;
private Helper&MockObject $helper;
private IConfig&MockObject $config;
private IUserManager&MockObject $ncUserManager;
private LoggerInterface&MockObject $logger;

private IAppConfig&MockObject $appConfig;

/** @var IEventDispatcher|MockObject */
private $dispatcher;
private IEventDispatcher&MockObject $dispatcher;
private Access $access;

protected function setUp(): void {
$this->connection = $this->createMock(Connection::class);
$this->ldap = $this->createMock(LDAP::class);
$this->connection = $this->getMockBuilder(Connection::class)
->setConstructorArgs([$this->ldap])
->getMock();
$this->userManager = $this->createMock(Manager::class);
$this->helper = $this->createMock(Helper::class);
$this->config = $this->createMock(IConfig::class);
Expand Down Expand Up @@ -126,19 +117,19 @@ private function getConnectorAndLdapMock() {

public function testEscapeFilterPartValidChars(): void {
$input = 'okay';
$this->assertTrue($input === $this->access->escapeFilterPart($input));
$this->assertSame($input, $this->access->escapeFilterPart($input));
}

public function testEscapeFilterPartEscapeWildcard(): void {
$input = '*';
$expected = '\\2a';
$this->assertTrue($expected === $this->access->escapeFilterPart($input));
$this->assertSame($expected, $this->access->escapeFilterPart($input));
}

public function testEscapeFilterPartEscapeWildcard2(): void {
$input = 'foo*bar';
$expected = 'foo\\2abar';
$this->assertTrue($expected === $this->access->escapeFilterPart($input));
$this->assertSame($expected, $this->access->escapeFilterPart($input));
}

/**
Expand All @@ -151,7 +142,7 @@ public function testConvertSID2StrSuccess(array $sidArray, $sidExpected): void {
$this->assertSame($sidExpected, $this->access->convertSID2Str($sidBinary));
}

public function convertSID2StrSuccessData() {
public static function convertSID2StrSuccessData(): array {
return [
[
[
Expand Down Expand Up @@ -209,55 +200,53 @@ public function testGetDomainDNFromDNError(): void {
$this->assertSame($expected, $this->access->getDomainDNFromDN($inputDN));
}

public function dnInputDataProvider() {
return [[
public static function dnInputDataProvider(): array {
return [
[
'input' => 'foo=bar,bar=foo,dc=foobar',
'interResult' => [
'foo=bar,bar=foo,dc=foobar',
[
'count' => 3,
0 => 'foo=bar',
1 => 'bar=foo',
2 => 'dc=foobar'
],
'expectedResult' => true
true
],
[
'input' => 'foobarbarfoodcfoobar',
'interResult' => false,
'expectedResult' => false
'foobarbarfoodcfoobar',
false,
false
]
]];
];
}

/**
* @dataProvider dnInputDataProvider
* @param array $case
*/
public function testStringResemblesDN($case): void {
public function testStringResemblesDN(string $input, array|bool $interResult, bool $expectedResult): void {
[$lw, $con, $um, $helper] = $this->getConnectorAndLdapMock();
/** @var IConfig|MockObject $config */
/** @var IConfig&MockObject $config */
$config = $this->createMock(IConfig::class);
$access = new Access($lw, $con, $um, $helper, $config, $this->ncUserManager, $this->logger, $this->appConfig, $this->dispatcher);

$lw->expects($this->exactly(1))
->method('explodeDN')
->willReturnCallback(function ($dn) use ($case) {
if ($dn === $case['input']) {
return $case['interResult'];
->willReturnCallback(function ($dn) use ($input, $interResult) {
if ($dn === $input) {
return $interResult;
}
return null;
});

$this->assertSame($case['expectedResult'], $access->stringResemblesDN($case['input']));
$this->assertSame($expectedResult, $access->stringResemblesDN($input));
}

/**
* @dataProvider dnInputDataProvider
* @param $case
*/
public function testStringResemblesDNLDAPmod($case): void {
public function testStringResemblesDNLDAPmod(string $input, array|bool $interResult, bool $expectedResult): void {
[, $con, $um, $helper] = $this->getConnectorAndLdapMock();
/** @var IConfig|MockObject $config */
/** @var IConfig&MockObject $config */
$config = $this->createMock(IConfig::class);
$lw = new LDAP();
$access = new Access($lw, $con, $um, $helper, $config, $this->ncUserManager, $this->logger, $this->appConfig, $this->dispatcher);
Expand All @@ -266,7 +255,7 @@ public function testStringResemblesDNLDAPmod($case): void {
$this->markTestSkipped('LDAP Module not available');
}

$this->assertSame($case['expectedResult'], $access->stringResemblesDN($case['input']));
$this->assertSame($expectedResult, $access->stringResemblesDN($input));
}

public function testCacheUserHome(): void {
Expand All @@ -290,7 +279,7 @@ public function testBatchApplyUserAttributes(): void {
->method('getAttributes')
->willReturn(['displayname' => ['bar', 'count' => 1]]);

/** @var UserMapping|MockObject $mapperMock */
/** @var UserMapping&MockObject $mapperMock */
$mapperMock = $this->createMock(UserMapping::class);
$mapperMock->expects($this->any())
->method('getNameByDN')
Expand Down Expand Up @@ -335,7 +324,7 @@ public function testBatchApplyUserAttributes(): void {
}

public function testBatchApplyUserAttributesSkipped(): void {
/** @var UserMapping|MockObject $mapperMock */
/** @var UserMapping&MockObject $mapperMock */
$mapperMock = $this->createMock(UserMapping::class);
$mapperMock->expects($this->any())
->method('getNameByDN')
Expand Down Expand Up @@ -376,7 +365,7 @@ public function testBatchApplyUserAttributesSkipped(): void {
}

public function testBatchApplyUserAttributesDontSkip(): void {
/** @var UserMapping|MockObject $mapperMock */
/** @var UserMapping&MockObject $mapperMock */
$mapperMock = $this->createMock(UserMapping::class);
$mapperMock->expects($this->any())
->method('getNameByDN')
Expand Down Expand Up @@ -416,7 +405,7 @@ public function testBatchApplyUserAttributesDontSkip(): void {
$this->access->batchApplyUserAttributes($data);
}

public function dNAttributeProvider() {
public static function dNAttributeProvider(): array {
// corresponds to Access::resemblesDN()
return [
'dn' => ['dn'],
Expand All @@ -428,11 +417,10 @@ public function dNAttributeProvider() {

/**
* @dataProvider dNAttributeProvider
* @param $attribute
*/
public function testSanitizeDN($attribute): void {
public function testSanitizeDN(string $attribute): void {
[$lw, $con, $um, $helper] = $this->getConnectorAndLdapMock();
/** @var IConfig|MockObject $config */
/** @var IConfig&MockObject $config */
$config = $this->createMock(IConfig::class);

$dnFromServer = 'cn=Mixed Cases,ou=Are Sufficient To,ou=Test,dc=example,dc=org';
Expand Down Expand Up @@ -628,7 +616,7 @@ public function testFetchListOfUsers(): void {
$this->userMapper->expects($this->exactly($fakeLdapEntries['count']))
->method('getNameByDN')
->willReturnCallback(function ($fdn) {
$parts = ldap_explode_dn($fdn, false);
$parts = ldap_explode_dn($fdn, 0);
return $parts[0];
});

Expand Down Expand Up @@ -676,7 +664,7 @@ public function testFetchListOfGroupsKnown(): void {
$this->assertSame('Another Good Team', $groups[1]['cn'][0]);
}

public function intUsernameProvider() {
public static function intUsernameProvider(): array {
return [
['alice', 'alice'],
['b/ob', 'bob'],
Expand All @@ -694,7 +682,7 @@ public function intUsernameProvider() {
];
}

public function groupIDCandidateProvider() {
public static function groupIDCandidateProvider(): array {
return [
['alice', 'alice'],
['b/ob', 'b/ob'],
Expand All @@ -713,11 +701,8 @@ public function groupIDCandidateProvider() {

/**
* @dataProvider intUsernameProvider
*
* @param $name
* @param $expected
*/
public function testSanitizeUsername($name, $expected): void {
public function testSanitizeUsername(string $name, ?string $expected): void {
if ($expected === null) {
$this->expectException(\InvalidArgumentException::class);
}
Expand Down Expand Up @@ -752,7 +737,7 @@ public function testUserStateUpdate(): void {
->with('detta')
->willReturnOnConsecutiveCalls($offlineUserMock, $regularUserMock);

/** @var UserMapping|MockObject $mapperMock */
/** @var UserMapping&MockObject $mapperMock */
$mapperMock = $this->createMock(UserMapping::class);
$mapperMock->expects($this->any())
->method('getNameByDN')
Expand Down
14 changes: 7 additions & 7 deletions apps/user_ldap/tests/ConfigurationTest.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?php

declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2018-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
Expand All @@ -10,15 +11,14 @@
use OCA\User_LDAP\Configuration;

class ConfigurationTest extends \Test\TestCase {
/** @var Configuration */
protected $configuration;
protected Configuration $configuration;

protected function setUp(): void {
parent::setUp();
$this->configuration = new Configuration('t01', false);
}

public function configurationDataProvider() {
public static function configurationDataProvider(): array {
$inputWithDN = [
'cn=someUsers,dc=example,dc=org',
' ',
Expand Down Expand Up @@ -89,12 +89,12 @@ public function configurationDataProvider() {
/**
* @dataProvider configurationDataProvider
*/
public function testSetValue($key, $input, $expected): void {
public function testSetValue(string $key, string|array $input, string|array $expected): void {
$this->configuration->setConfiguration([$key => $input]);
$this->assertSame($this->configuration->$key, $expected);
}

public function avatarRuleValueProvider() {
public static function avatarRuleValueProvider(): array {
return [
['none', []],
['data:selfie', ['selfie']],
Expand All @@ -108,15 +108,15 @@ public function avatarRuleValueProvider() {
/**
* @dataProvider avatarRuleValueProvider
*/
public function testGetAvatarAttributes($setting, $expected): void {
public function testGetAvatarAttributes(string $setting, array $expected): void {
$this->configuration->setConfiguration(['ldapUserAvatarRule' => $setting]);
$this->assertSame($expected, $this->configuration->getAvatarAttributes());
}

/**
* @dataProvider avatarRuleValueProvider
*/
public function testResolveRule($setting, $expected): void {
public function testResolveRule(string $setting, array $expected): void {
$this->configuration->setConfiguration(['ldapUserAvatarRule' => $setting]);
// so far the only thing that can get resolved :)
$this->assertSame($expected, $this->configuration->resolveRule('avatar'));
Expand Down
13 changes: 6 additions & 7 deletions apps/user_ldap/tests/ConnectionTest.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?php

declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
Expand All @@ -10,6 +11,7 @@
use OC\ServerNotAvailableException;
use OCA\User_LDAP\Connection;
use OCA\User_LDAP\ILDAPWrapper;
use PHPUnit\Framework\MockObject\MockObject;

/**
* Class Test_Connection
Expand All @@ -19,19 +21,16 @@
* @package OCA\User_LDAP\Tests
*/
class ConnectionTest extends \Test\TestCase {
/** @var ILDAPWrapper|\PHPUnit\Framework\MockObject\MockObject */
protected $ldap;

/** @var Connection */
protected $connection;
protected ILDAPWrapper&MockObject $ldap;
protected Connection $connection;

protected function setUp(): void {
parent::setUp();

$this->ldap = $this->createMock(ILDAPWrapper::class);
// we use a mock here to replace the cache mechanism, due to missing DI in LDAP backend.
$this->connection = $this->getMockBuilder('OCA\User_LDAP\Connection')
->setMethods(['getFromCache', 'writeToCache'])
$this->connection = $this->getMockBuilder(Connection::class)
->onlyMethods(['getFromCache', 'writeToCache'])
->setConstructorArgs([$this->ldap, '', null])
->getMock();

Expand Down
Loading
Loading