AuthenticationCollectorTest.php

Same filename in other branches
  1. 9 core/tests/Drupal/Tests/Core/Authentication/AuthenticationCollectorTest.php
  2. 8.9.x core/tests/Drupal/Tests/Core/Authentication/AuthenticationCollectorTest.php
  3. 11.x core/tests/Drupal/Tests/Core/Authentication/AuthenticationCollectorTest.php

Namespace

Drupal\Tests\Core\Authentication

File

core/tests/Drupal/Tests/Core/Authentication/AuthenticationCollectorTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\Core\Authentication;

use Drupal\Core\Authentication\AuthenticationCollector;
use Drupal\Core\Authentication\AuthenticationProviderInterface;
use Drupal\Tests\UnitTestCase;
use Symfony\Component\HttpFoundation\Request;

/**
 * @coversDefaultClass \Drupal\Core\Authentication\AuthenticationCollector
 * @group Authentication
 */
class AuthenticationCollectorTest extends UnitTestCase {
    
    /**
     * Tests adding, getting, and order of priorities.
     *
     * @covers ::addProvider
     * @covers ::getSortedProviders
     * @covers ::getProvider
     * @covers ::isGlobal
     */
    public function testAuthenticationCollector() : void {
        $providers = [];
        $global = [];
        $authentication_collector = new AuthenticationCollector();
        $priorities = [
            2,
            0,
            -8,
            10,
            1,
            3,
            -5,
            0,
            6,
            -10,
            -4,
        ];
        foreach ($priorities as $priority) {
            $provider_id = $this->randomMachineName();
            $provider = new TestAuthenticationProvider($provider_id);
            $providers[$priority][$provider_id] = $provider;
            $global[$provider_id] = rand(0, 1) > 0.5;
            $authentication_collector->addProvider($provider, $provider_id, $priority, $global[$provider_id]);
        }
        // Sort the $providers array by priority (highest number is lowest priority)
        // and compare with AuthenticationCollector::getSortedProviders().
        krsort($providers);
        // Merge nested providers from $providers into $sorted_providers.
        $sorted_providers = array_merge(...$providers);
        $this->assertEquals($sorted_providers, $authentication_collector->getSortedProviders());
        // Test AuthenticationCollector::getProvider() and
        // AuthenticationCollector::isGlobal().
        foreach ($sorted_providers as $provider) {
            $this->assertEquals($provider, $authentication_collector->getProvider($provider->providerId));
            $this->assertEquals($global[$provider->providerId], $authentication_collector->isGlobal($provider->providerId));
        }
    }

}

/**
 * A simple provider for unit testing AuthenticationCollector.
 */
class TestAuthenticationProvider implements AuthenticationProviderInterface {
    
    /**
     * The provider id.
     *
     * @var string
     */
    public $providerId;
    
    /**
     * Constructor.
     */
    public function __construct($provider_id) {
        $this->providerId = $provider_id;
    }
    
    /**
     * {@inheritdoc}
     */
    public function applies(Request $request) {
        return TRUE;
    }
    
    /**
     * {@inheritdoc}
     */
    public function authenticate(Request $request) {
        return NULL;
    }

}

Classes

Title Deprecated Summary
AuthenticationCollectorTest @coversDefaultClass \Drupal\Core\Authentication\AuthenticationCollector @group Authentication
TestAuthenticationProvider A simple provider for unit testing AuthenticationCollector.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.