Skip to content
Snippets Groups Projects
PersonTest.php 2.67 KiB
<?php

declare(strict_types=1);

namespace Tugraz\Relay\TugrazBundle\Tests;

use Adldap\Connections\ConnectionInterface;
use Adldap\Models\User as AdldapUser;
use Adldap\Query\Builder;
use Adldap\Query\Grammar;
use ApiPlatform\Core\Bridge\Symfony\Bundle\Test\ApiTestCase;
use Dbp\Relay\BasePersonConnectorLdapBundle\Service\BasePersonConnectorLdap;
use Dbp\Relay\BasePersonConnectorLdapBundle\Service\LDAPApi;
use Dbp\Relay\BasePersonConnectorLdapBundle\TestUtils\DummyLDAPApiProvider;
use Mockery;

class PersonTest extends ApiTestCase
{
    /**
     * @var LDAPApi
     */
    private $api;

    /**
     * @var BasePersonConnectorLdap
     */
    private $provider;

    protected function setUp(): void
    {
        parent::setUp();
        $ldapApiProvider = new DummyLDAPApiProvider();
        $this->api = new LDAPApi(self::createClient()->getContainer(), $ldapApiProvider);
        $this->api->setConfig([
            'ldap' => [
                'attributes' => [
                    'email' => 'email',
                    'birthday' => 'dateofbirth',
                ],
            ],
        ]);

        $this->provider = new BasePersonConnectorLdap($this->api);
    }

    public function testBasic()
    {
        $this->expectExceptionMessageMatches('/.*/');
        $this->provider->getPerson('____nope____');
    }

    protected function newBuilder()
    {
        $connection = Mockery::mock(ConnectionInterface::class);

        return new Builder($connection, new Grammar());
    }

    public function testLDAPParsing()
    {
        $user = new AdldapUser([
            'cn' => ['foobar'],
            'givenName' => ['John'],
            'sn' => ['Doe'],
        ], $this->newBuilder());

        $person = $this->api->personFromUserItem($user, false);
        $this->assertEquals('John', $person->getGivenName());
        $this->assertEquals('Doe', $person->getFamilyName());
    }

    public function testBirthDateParsing()
    {
        $variants = ['1994-06-24', '1994-06-24 00:00:00'];
        foreach ($variants as $variant) {
            $user = new AdldapUser([
                'cn' => ['foobar'],
                'dateofbirth' => [$variant],
            ], $this->newBuilder());

            $person = $this->api->personFromUserItem($user, false);
            $this->assertNotNull($person->getBirthDate());
            $this->assertEquals('1994-06-24', $person->getBirthDate());
        }
    }

    public function testLDAPApiProvider()
    {
        $user = new AdldapUser([
            'cn' => ['foobar'],
        ], $this->newBuilder());

        $person = $this->api->personFromUserItem($user, false);

        $this->assertEquals($person->getExtraData('test'), 'my-test-string');
    }
}