oidc-1.0.0-alpha2/tests/src/Unit/UpdateUserSubscriberTest.php

tests/src/Unit/UpdateUserSubscriberTest.php
<?php

namespace Drupal\Tests\oidc\Unit;

use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\externalauth\Event\ExternalAuthLoginEvent;
use Drupal\oidc\EventSubscriber\UpdateUserSubscriber;
use Drupal\oidc\JsonWebTokens;
use Drupal\oidc\OpenidConnectSessionInterface;
use Drupal\Tests\UnitTestCase;
use Drupal\user\UserInterface;
use Prophecy\Argument;

/**
 * Tests the UpdateUserSubscriber class.
 *
 * @covers \Drupal\oidc\EventSubscriber\ExternalAuthEventSubscriber
 */
class UpdateUserSubscriberTest extends UnitTestCase {

  /**
   * Tests the onLogin() method.
   *
   * @covers \Drupal\oidc\EventSubscriber\UpdateUserSubscriber::onLogin
   */
  public function testOnLogin() {
    $tokens = $this->prophesize(JsonWebTokens::class);
    $tokens->getUsername()->willReturn('john.doe');
    $tokens->getEmail()->willReturn('john.doe@example.com');
    $tokens->getGivenName()->willReturn('John');
    $tokens->getFamilyName()->willReturn('Doe');

    $session = $this->prophesize(OpenidConnectSessionInterface::class);
    $session->getJsonWebTokens()->willReturn($tokens->reveal());

    $storage = $this->prophesize(EntityStorageInterface::class);
    $storage = $storage->reveal();

    $entity_type_manager = $this->prophesize(EntityTypeManagerInterface::class);
    $entity_type_manager->getStorage(Argument::type('string'))->willReturn($storage);

    $user = $this->prophesize(UserInterface::class);
    $user->getAccountName()->willReturn('john.doe');
    $user->getEmail()->willReturn(NULL);
    $user->get(Argument::type('string'))->willReturn((object) ['value' => NULL]);
    $user->save()->willReturn(NULL);

    $user->setUsername(Argument::type('string'))->will(function ($args) use ($user) {
      $user->getAccountName()->willReturn($args[0]);
    });

    $user->setEmail(Argument::type('string'))->will(function ($args) use ($user) {
      $user->getEmail()->willReturn($args[0]);
    });

    $user->set(Argument::type('string'), Argument::any())->will(function ($args) use ($user) {
      $user->get($args[0])->willReturn((object) ['value' => $args[1]]);
    });

    $user = $user->reveal();

    $event = $this->prophesize(ExternalAuthLoginEvent::class);
    $event->getAccount()->willReturn($user);

    $external_auth_subscriber = new UpdateUserSubscriber($session->reveal(), $entity_type_manager->reveal());
    $external_auth_subscriber->onLogin($event->reveal());

    self::assertEquals('john.doe', $user->getAccountName());
    self::assertEquals('john.doe@example.com', $user->getEmail());
    self::assertEquals('John', $user->get('given_name')->value);
    self::assertEquals('Doe', $user->get('family_name')->value);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc