Make SymfonyExtension great again

This commit is contained in:
Kamil Kokot
2018-12-28 19:55:49 +01:00
parent 0ecd038e61
commit f334860d5c
3 changed files with 20 additions and 19 deletions

View File

@@ -46,21 +46,15 @@ final class FriendsOfBehatSymfonyExtensionExtension extends Extension implements
private function provideMinkIntegration(ContainerBuilder $container): void private function provideMinkIntegration(ContainerBuilder $container): void
{ {
$minkDefinition = new Definition(Mink::class, ['mink']); $minkDefaultSessionDefinition = new Definition(Session::class, ['fob_symfony_extension.mink_default_session']);
$minkDefinition->setPublic(true);
$minkDefinition->setFactory([new Reference('behat.service_container'), 'get']);
$container->setDefinition('behat.mink', $minkDefinition);
$minkDefaultSessionDefinition = new Definition(Session::class);
$minkDefaultSessionDefinition->setPublic(true); $minkDefaultSessionDefinition->setPublic(true);
$minkDefaultSessionDefinition->setLazy(true); $minkDefaultSessionDefinition->setLazy(true);
$minkDefaultSessionDefinition->setFactory([new Reference('behat.mink'), 'getSession']); $minkDefaultSessionDefinition->setFactory([new Reference('behat.service_container'), 'get']);
$container->setDefinition('behat.mink.default_session', $minkDefaultSessionDefinition); $container->setDefinition('behat.mink.default_session', $minkDefaultSessionDefinition);
$container->setAlias(Session::class, 'behat.mink.default_session'); $container->setAlias(Session::class, 'behat.mink.default_session');
$minkParametersDefinition = new Definition(MinkParameters::class, ['sylius_symfony_extension.mink_parameters']); $minkParametersDefinition = new Definition(MinkParameters::class, ['fob_symfony_extension.mink_parameters']);
$minkParametersDefinition->setPublic(true); $minkParametersDefinition->setPublic(true);
$minkParametersDefinition->setLazy(true); $minkParametersDefinition->setLazy(true);
$minkParametersDefinition->setFactory([new Reference('behat.service_container'), 'get']); $minkParametersDefinition->setFactory([new Reference('behat.service_container'), 'get']);

View File

@@ -27,22 +27,21 @@ final class KernelRebooter implements EventSubscriberInterface
public static function getSubscribedEvents(): array public static function getSubscribedEvents(): array
{ {
return [ return [
ScenarioTested::AFTER => ['rebootSymfonyKernel', -15], ScenarioTested::BEFORE => ['setUp', 15],
ExampleTested::AFTER => ['rebootSymfonyKernel', -15], ExampleTested::BEFORE => ['setUp', 15],
ScenarioTested::BEFORE => ['transferBehatContainer', 15], ScenarioTested::AFTER => ['tearDown', -15],
ExampleTested::BEFORE => ['transferBehatContainer', 15], ExampleTested::AFTER => ['tearDown', -15],
]; ];
} }
public function transferBehatContainer(): void public function setUp(): void
{ {
$symfonyContainer = $this->symfonyKernel->getContainer(); $this->symfonyKernel->getContainer()->set('behat.service_container', $this->behatContainer);
$symfonyContainer->set('behat.service_container', $this->behatContainer);
} }
public function rebootSymfonyKernel(): void public function tearDown(): void
{ {
$this->symfonyKernel->getContainer()->set('behat.service_container', null);
$this->symfonyKernel->shutdown(); $this->symfonyKernel->shutdown();
$this->symfonyKernel->boot(); $this->symfonyKernel->boot();
} }

View File

@@ -5,6 +5,8 @@ declare(strict_types=1);
namespace FriendsOfBehat\SymfonyExtension\ServiceContainer; namespace FriendsOfBehat\SymfonyExtension\ServiceContainer;
use Behat\Behat\Context\ServiceContainer\ContextExtension; use Behat\Behat\Context\ServiceContainer\ContextExtension;
use Behat\Mink\Mink;
use Behat\Mink\Session;
use Behat\MinkExtension\ServiceContainer\MinkExtension; use Behat\MinkExtension\ServiceContainer\MinkExtension;
use Behat\Testwork\Environment\ServiceContainer\EnvironmentExtension; use Behat\Testwork\Environment\ServiceContainer\EnvironmentExtension;
use Behat\Testwork\EventDispatcher\ServiceContainer\EventDispatcherExtension; use Behat\Testwork\EventDispatcher\ServiceContainer\EventDispatcherExtension;
@@ -85,10 +87,16 @@ final class SymfonyExtension implements Extension
$this->loadKernelRebooter($container); $this->loadKernelRebooter($container);
$minkDefaultSessionDefinition = new Definition(Session::class);
$minkDefaultSessionDefinition->setPublic(true);
$minkDefaultSessionDefinition->setFactory([new Reference('mink'), 'getSession']);
$container->setDefinition('fob_symfony_extension.mink_default_session', $minkDefaultSessionDefinition);
$minkParametersDefinition = new Definition(MinkParameters::class, [new Parameter('mink.parameters')]); $minkParametersDefinition = new Definition(MinkParameters::class, [new Parameter('mink.parameters')]);
$minkParametersDefinition->setPublic(true); $minkParametersDefinition->setPublic(true);
$container->setDefinition('sylius_symfony_extension.mink_parameters', $minkParametersDefinition); $container->setDefinition('fob_symfony_extension.mink_parameters', $minkParametersDefinition);
} }
public function process(ContainerBuilder $container): void public function process(ContainerBuilder $container): void