diff --git a/composer.json b/composer.json index 9887df69..d704b56e 100644 --- a/composer.json +++ b/composer.json @@ -51,6 +51,7 @@ "symfony/http-kernel": "^5.4 || ^6.2", "symfony/phpunit-bridge": "^6.2", "symfony/twig-bridge": "^5.4 || ^6.2", + "symfony/twig-bundle": "^5.4 || ^6.2", "vimeo/psalm": "^5.8" }, "minimum-stability": "dev", diff --git a/tests/Bridge/Symfony/DependencyInjection/SonataFormExtensionTest.php b/tests/Bridge/Symfony/DependencyInjection/SonataFormExtensionTest.php index ce23db7b..3011a1c7 100644 --- a/tests/Bridge/Symfony/DependencyInjection/SonataFormExtensionTest.php +++ b/tests/Bridge/Symfony/DependencyInjection/SonataFormExtensionTest.php @@ -15,8 +15,10 @@ use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase; use Sonata\Form\Bridge\Symfony\DependencyInjection\SonataFormExtension; +use Symfony\Bundle\TwigBundle\DependencyInjection\TwigExtension; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Extension\Extension; +use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface; final class SonataFormExtensionTest extends AbstractExtensionTestCase { @@ -24,7 +26,7 @@ public function testAfterLoadingTheWrappingParameterIsSet(): void { $this->container->setParameter('kernel.bundles', []); $this->load(); - $this->assertContainerBuilderHasParameter( + static::assertContainerBuilderHasParameter( 'sonata.form.form_type' ); static::assertSame( @@ -41,7 +43,7 @@ public function testHorizontalFormTypeMeansNoWrapping(): void $this->load([ 'form_type' => 'horizontal', ]); - $this->assertContainerBuilderHasParameter( + static::assertContainerBuilderHasParameter( 'sonata.form.form_type' ); static::assertSame( @@ -84,6 +86,76 @@ public function getAlias(): string ], $containerBuilder->getExtensionConfig('sonata_form')); } + public function testTwigConfigParameterIsSetting(): void + { + $fakeContainer = $this->getMockBuilder(ContainerBuilder::class) + ->onlyMethods(['hasExtension', 'prependExtensionConfig']) + ->getMock(); + + $fakeContainer->expects(static::once()) + ->method('hasExtension') + ->with(static::equalTo('twig')) + ->willReturn(true); + + $fakeContainer->expects(static::once()) + ->method('prependExtensionConfig') + ->with('twig', ['form_themes' => ['@SonataForm/Form/datepicker.html.twig']]); + + foreach ($this->getContainerExtensions() as $extension) { + if ($extension instanceof PrependExtensionInterface) { + $extension->prepend($fakeContainer); + } + } + } + + public function testTwigConfigParameterIsSet(): void + { + $fakeTwigExtension = $this->getMockBuilder(Extension::class)->onlyMethods(['load', 'getAlias'])->getMock(); + + $fakeTwigExtension->expects(static::any()) + ->method('getAlias') + ->willReturn('twig'); + + $this->container->registerExtension($fakeTwigExtension); + + $this->load(); + + $twigConfigurations = $this->container->getExtensionConfig('twig'); + + static::assertArrayHasKey(0, $twigConfigurations); + static::assertArrayHasKey('form_themes', $twigConfigurations[0]); + static::assertSame(['@SonataForm/Form/datepicker.html.twig'], $twigConfigurations[0]['form_themes']); + } + + public function testTwigBundleLoadParameter(): void + { + $this->setParameter('kernel.bundles', [ + SonataFormExtension::class => true, + ]); + $this->setParameter('kernel.bundles_metadata', []); + $this->setParameter('kernel.project_dir', __DIR__); + $this->setParameter('kernel.root_dir', __DIR__); + $this->setParameter('kernel.debug', false); + + $this->container->registerExtension(new TwigExtension()); + $this->compile(); + + /** + * @var string[] $resources + */ + $resources = $this->container->getParameter('twig.form.resources'); + static::assertContains('@SonataForm/Form/datepicker.html.twig', $resources); + } + + public function testTwigConfigParameterIsNotSet(): void + { + $this->load(); + + $twigConfigurations = $this->container->getExtensionConfig('twig'); + + static::assertArrayNotHasKey(0, $twigConfigurations); + } + protected function getContainerExtensions(): array { return [