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

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

namespace Drupal\Tests\test_support\Kernel\Support;

use Drupal\KernelTests\KernelTestBase;
use Drupal\locale\LocaleEvent;
use Drupal\Tests\test_support\Traits\Support\WithoutEvents;

class WithoutEventsTest extends KernelTestBase
{
    use WithoutEvents;

    /** @test */
    public function without_events(): void
    {
        $this->withoutEvents();

        $event = $this->createEvent();

        $this->container->get('event_dispatcher')->dispatch($event, 'test_event');

        $this->assertDispatched('test_event');

        $this->assertDispatched(get_class($event));
    }

    /** @test */
    public function expects_events_class_string(): void
    {
        $event = $this->createEvent();

        $this->expectsEvents(get_class($event));

        $this->container->get('event_dispatcher')->dispatch($event, 'test_event');
    }

    /** @test */
    public function expects_events_event_name(): void
    {
        $this->expectsEvents('test_event');

        $this->container->get('event_dispatcher')->dispatch($this->createEvent(), 'test_event');
    }

    /** @test */
    public function doesnt_expect_events_class_string(): void
    {
        $this->doesntExpectEvents(
            get_class($this->createEvent())
        );

        $this->container->get('event_dispatcher')->dispatch(new LocaleEvent([]), 'second_event');
    }

    /** @test */
    public function doesnt_expect_events_event_name(): void
    {
        $this->doesntExpectEvents('first_event');

        $this->container->get('event_dispatcher')->dispatch(new LocaleEvent([]), 'second_event');
    }

    /** @test */
    public function assert_dispatched_with_callback(): void
    {
        $this->expectsEvents('test_event');

        $langcodes = [
            'en',
            'de',
            'fr',
        ];

        $event = new LocaleEvent($langcodes);

        $this->container->get('event_dispatcher')->dispatch($event, 'test_event');

        $this->assertDispatched('test_event', function (LocaleEvent $firedEvent) use ($langcodes) {
            return $firedEvent->getLangcodes() === $langcodes;
        });

        /** @param  object  $firedEvent */
        $this->assertDispatched(get_class($event), function (LocaleEvent $firedEvent) use ($langcodes) {
            return $firedEvent->getLangcodes() === $langcodes;
        });
    }

    /** @return object */
    private function createEvent()
    {
        $eventClasses = [
            '\Symfony\Component\EventDispatcher\Event', // Drupal 9
            '\Symfony\Contracts\EventDispatcher\Event', // Drupal 10
        ];

        foreach ($eventClasses as $class) {
            if (class_exists($class) === false) {
                continue;
            }

            return new $class();
        }

        throw new \Exception(
            'None of the following event classes exist' . implode(', ', $eventClasses),
        );
    }
}

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

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