From fa3c02720ce1cd1d7f2f9b93325eabef968def3d Mon Sep 17 00:00:00 2001 From: Kamil Kokot Date: Fri, 11 Jan 2019 00:10:32 +0100 Subject: [PATCH] Implement bootstrap loading --- .../loading_configured_bootstrap_file.feature | 56 +++++++++++++++++++ src/ServiceContainer/SymfonyExtension.php | 18 +++++- 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 features/configuration/loading_configured_bootstrap_file.feature diff --git a/features/configuration/loading_configured_bootstrap_file.feature b/features/configuration/loading_configured_bootstrap_file.feature new file mode 100644 index 0000000..505e827 --- /dev/null +++ b/features/configuration/loading_configured_bootstrap_file.feature @@ -0,0 +1,56 @@ +Feature: Loading configured bootstrap file + + Scenario: Loading configured bootstrap file + Given a working Symfony application with SymfonyExtension configured + And a Behat configuration containing: + """ + default: + extensions: + FriendsOfBehat\SymfonyExtension: + bootstrap: custom/bootstrap.php + + suites: + default: + contexts: + - App\Tests\SomeContext + """ + And a boostrap file "custom/bootstrap.php" containing: + """ + parameter = $parameter; } + + /** @Then the passed parameter should be :expected */ + public function parameterShouldBe(string $expected): void { assert($this->parameter === $expected); } + } + """ + And a YAML services file containing: + """ + services: + App\Tests\SomeContext: + public: true + arguments: + - "%env(CUSTOM_VARIABLE)%" + """ + And a feature file containing: + """ + Feature: + Scenario: + Then the passed parameter should be "lol2" + """ + When I run Behat + Then it should pass diff --git a/src/ServiceContainer/SymfonyExtension.php b/src/ServiceContainer/SymfonyExtension.php index 0a8288d..fea3651 100644 --- a/src/ServiceContainer/SymfonyExtension.php +++ b/src/ServiceContainer/SymfonyExtension.php @@ -51,7 +51,9 @@ final class SymfonyExtension implements Extension public function configure(ArrayNodeDefinition $builder): void { $builder + ->addDefaultsIfNotSet() ->children() + ->scalarNode('bootstrap')->defaultNull()->end() ->arrayNode('kernel') ->addDefaultsIfNotSet() ->children() @@ -67,7 +69,9 @@ final class SymfonyExtension implements Extension public function load(ContainerBuilder $container, array $config): void { - $this->loadKernel($container, $this->processKernelConfiguration($config['kernel'])); + $container->setParameter('fob_symfony.bootstrap', $config['bootstrap']); + + $this->loadKernel($container, $this->autodiscoverKernelConfiguration($config['kernel'])); $this->loadDriverKernel($container); $this->loadKernelRebooter($container); @@ -82,6 +86,7 @@ final class SymfonyExtension implements Extension public function process(ContainerBuilder $container): void { + $this->processBootstrap($container->getParameter('fob_symfony.bootstrap')); } private function registerMinkDriver(ExtensionManager $extensionManager): void @@ -157,7 +162,7 @@ final class SymfonyExtension implements Extension $container->setDefinition('fob_symfony.mink.parameters', $minkParametersDefinition); } - private function processKernelConfiguration(array $config): array + private function autodiscoverKernelConfiguration(array $config): array { if ($config['class'] !== null) { return $config; @@ -187,4 +192,13 @@ final class SymfonyExtension implements Extension return $config; } + + private function processBootstrap(?string $bootstrap): void + { + if ($bootstrap === null) { + return; + } + + require_once $bootstrap; + } }