test_support-1.0.x-dev/tests/src/Kernel/Support/WithoutEventSubscribersTest.php

tests/src/Kernel/Support/WithoutEventSubscribersTest.php
<?php

namespace Drupal\Tests\test_support\Kernel\Support;

use Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher;
use Drupal\Core\Config\ConfigEvents;
use Drupal\KernelTests\KernelTestBase;
use Drupal\language\EventSubscriber\ConfigSubscriber;
use Drupal\node\Routing\RouteSubscriber;
use Drupal\system\TimeZoneResolver;
use Drupal\Tests\test_support\Traits\Support\WithoutEventSubscribers;
use Symfony\Component\HttpKernel\KernelEvents;

class WithoutEventSubscribersTest extends KernelTestBase
{
    use WithoutEventSubscribers;

    /** @var ContainerAwareEventDispatcher|null */
    private $eventDispatcher;

    /** @test */
    public function assert_not_listening(): void
    {
        $this->assertNotListening(TimeZoneResolver::class);
        $this->assertNotListening('system.timezone_resolver');
        $this->assertNotListening('system.timezone_resolver', KernelEvents::REQUEST);
    }

    /** @test */
    public function assert_listening(): void
    {
        $this->assertNotListening(TimeZoneResolver::class);
        $this->assertNotListening('system.timezone_resolver');
        $this->assertNotListening('system.timezone_resolver', KernelEvents::REQUEST);

        $this->enableModules([
            'system',
        ]);

        $this->assertListening(TimeZoneResolver::class);
        $this->assertListening('system.timezone_resolver');
        $this->assertListening('system.timezone_resolver', KernelEvents::REQUEST);
    }

    /** @test */
    public function without_event_subscribers(): void
    {
        $this->assertNotEmpty($this->eventDispatcher()->getListeners());

        $this->withoutSubscribers();

        $this->assertEmpty($this->eventDispatcher()->getListeners());
    }

    /** @test */
    public function ignores_event_subscribers_after_enabling_module(): void
    {
        $this->assertNotEmpty($this->eventDispatcher()->getListeners());

        $this->withoutSubscribers();

        $this->assertEmpty($this->eventDispatcher()->getListeners());

        $this->enableModules([
            'language',
            'node',
        ]);

        $this->assertEmpty($this->eventDispatcher()->getListeners());
    }

    /** @test */
    public function without_event_subscribers_class_list(): void
    {
        $this->enableModules([
            'language',
            'node',
        ]);

        $this->assertListening(RouteSubscriber::class);
        $this->assertListening(ConfigSubscriber::class);

        $this->withoutSubscribers([
            RouteSubscriber::class, // node.route_subscriber
            ConfigSubscriber::class, // language.config_subscriber
        ]);

        $this->assertNotListening(RouteSubscriber::class);
        $this->assertNotListening(ConfigSubscriber::class);
    }

    /** @test */
    public function ignores_event_subscribers_by_class_after_enabling_module(): void
    {
        $this->withoutSubscribers([
            RouteSubscriber::class, // node.route_subscriber
            ConfigSubscriber::class, // language.config_subscriber
        ]);

        $this->assertNotListening(RouteSubscriber::class);
        $this->assertNotListening(ConfigSubscriber::class);

        $this->enableModules([
            'language',
            'node',
        ]);

        $this->assertNotListening(RouteSubscriber::class);
        $this->assertNotListening(ConfigSubscriber::class);
    }

    /** @test */
    public function without_event_subscribers_listening_for_events(): void
    {
        $this->enableModules([
            'node',
        ]);

        $this->assertNotEmpty($this->eventDispatcher()->getListeners(ConfigEvents::SAVE));

        $this->withoutSubscribersForEvents(ConfigEvents::SAVE);

        $this->assertEmpty($this->eventDispatcher()->getListeners(ConfigEvents::SAVE));
    }

    /** @test */
    public function ignores_events_by_subscribed_events_after_enabling_modules(): void
    {
        $this->withoutSubscribersForEvents(ConfigEvents::SAVE);

        $this->enableModules([
            'node',
        ]);

        $this->assertEmpty($this->eventDispatcher()->getListeners(ConfigEvents::SAVE));
    }

    /** @test */
    public function without_event_subscribers_by_class_string_or_service_id(): void
    {
        $this->enableModules([
            'language',
            'node',
        ]);

        $this->withoutSubscribers([
            RouteSubscriber::class, // node.route_subscriber
            'language.config_subscriber',
        ]);

        $this->assertNotListening('node.route_subscriber');
        $this->assertNotListening('language.config_subscriber');
    }

    /** @test */
    public function ignores_event_by_class_string_or_service_id_after_enabling_modules(): void
    {
        $this->withoutSubscribers([
            RouteSubscriber::class, // node.route_subscriber
            'language.config_subscriber',
        ]);

        $this->enableModules([
            'language',
            'node',
        ]);

        $this->assertNotListening('node.route_subscriber');
        $this->assertNotListening('language.config_subscriber');
    }

    private function eventDispatcher(): ContainerAwareEventDispatcher
    {
        if ($this->eventDispatcher instanceof ContainerAwareEventDispatcher === false) {
            $this->eventDispatcher = $this->container->get('event_dispatcher');
        }

        return $this->eventDispatcher;
    }
}

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

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