Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/LiveComponent/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
"doctrine/doctrine-bundle": "^2.0",
"doctrine/orm": "^2.7",
"zenstruck/foundry": "^1.10",
"zenstruck/browser": "^0.5.0"
"zenstruck/browser": "^0.9.1"
},
"extra": {
"branch-alias": {
Expand Down
26 changes: 26 additions & 0 deletions src/LiveComponent/tests/ContainerBC.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Symfony\UX\LiveComponent\Tests;

use Symfony\Component\DependencyInjection\ContainerInterface;

/**
* Enables using the getContainer() method in Symfony < 5.3.
*
* @author Kevin Bond <[email protected]>
*/
trait ContainerBC
{
protected static function getContainer(): ContainerInterface
{
if (!\method_exists(parent::class, 'getContainer')) {
if (!static::$booted) {
static::bootKernel();
}

return self::$container;
}

return parent::getContainer();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\UX\LiveComponent\LiveComponentHydrator;
use Symfony\UX\LiveComponent\Tests\ContainerBC;
use Symfony\UX\LiveComponent\Tests\Fixture\Component\Component1;
use Symfony\UX\LiveComponent\Tests\Fixture\Component\Component2;
use Symfony\UX\LiveComponent\Tests\Fixture\Entity\Entity1;
Expand All @@ -29,19 +30,18 @@
*/
final class LiveComponentSubscriberTest extends KernelTestCase
{
use ContainerBC;
use Factories;
use HasBrowser;
use ResetDatabase;

public function testCanRenderComponentAsHtmlOrJson(): void
{
self::bootKernel();

/** @var LiveComponentHydrator $hydrator */
$hydrator = self::$container->get('ux.live_component.component_hydrator');
$hydrator = self::getContainer()->get('ux.live_component.component_hydrator');

/** @var ComponentFactory $factory */
$factory = self::$container->get('ux.twig_component.component_factory');
$factory = self::getContainer()->get('ux.twig_component.component_factory');

/** @var Component1 $component */
$component = $factory->create('component1', [
Expand Down Expand Up @@ -80,13 +80,11 @@ public function testCanRenderComponentAsHtmlOrJson(): void

public function testCanExecuteComponentAction(): void
{
self::bootKernel();

/** @var LiveComponentHydrator $hydrator */
$hydrator = self::$container->get('ux.live_component.component_hydrator');
$hydrator = self::getContainer()->get('ux.live_component.component_hydrator');

/** @var ComponentFactory $factory */
$factory = self::$container->get('ux.twig_component.component_factory');
$factory = self::getContainer()->get('ux.twig_component.component_factory');

/** @var Component2 $component */
$component = $factory->create('component2');
Expand Down Expand Up @@ -183,13 +181,11 @@ public function testInvalidCsrfTokenForComponentActionFails(): void

public function testBeforeReRenderHookOnlyExecutedDuringAjax(): void
{
self::bootKernel();

/** @var LiveComponentHydrator $hydrator */
$hydrator = self::$container->get('ux.live_component.component_hydrator');
$hydrator = self::getContainer()->get('ux.live_component.component_hydrator');

/** @var ComponentFactory $factory */
$factory = self::$container->get('ux.twig_component.component_factory');
$factory = self::getContainer()->get('ux.twig_component.component_factory');

/** @var Component2 $component */
$component = $factory->create('component2');
Expand All @@ -208,13 +204,11 @@ public function testBeforeReRenderHookOnlyExecutedDuringAjax(): void

public function testCanRedirectFromComponentAction(): void
{
self::bootKernel();

/** @var LiveComponentHydrator $hydrator */
$hydrator = self::$container->get('ux.live_component.component_hydrator');
$hydrator = self::getContainer()->get('ux.live_component.component_hydrator');

/** @var ComponentFactory $factory */
$factory = self::$container->get('ux.twig_component.component_factory');
$factory = self::getContainer()->get('ux.twig_component.component_factory');

/** @var Component2 $component */
$component = $factory->create('component2');
Expand Down
50 changes: 18 additions & 32 deletions src/LiveComponent/tests/Integration/LiveComponentHydratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\UX\LiveComponent\LiveComponentHydrator;
use Symfony\UX\LiveComponent\Tests\ContainerBC;
use Symfony\UX\LiveComponent\Tests\Fixture\Component\Component1;
use Symfony\UX\LiveComponent\Tests\Fixture\Component\Component2;
use Symfony\UX\LiveComponent\Tests\Fixture\Component\Component3;
Expand All @@ -27,18 +28,17 @@
*/
final class LiveComponentHydratorTest extends KernelTestCase
{
use ContainerBC;
use Factories;
use ResetDatabase;

public function testCanDehydrateAndHydrateLiveComponent(): void
{
self::bootKernel();

/** @var LiveComponentHydrator $hydrator */
$hydrator = self::$container->get('ux.live_component.component_hydrator');
$hydrator = self::getContainer()->get('ux.live_component.component_hydrator');

/** @var ComponentFactory $factory */
$factory = self::$container->get('ux.twig_component.component_factory');
$factory = self::getContainer()->get('ux.twig_component.component_factory');

/** @var Component1 $component */
$component = $factory->create('component1', [
Expand Down Expand Up @@ -73,13 +73,11 @@ public function testCanDehydrateAndHydrateLiveComponent(): void

public function testCanModifyWritableProps(): void
{
self::bootKernel();

/** @var LiveComponentHydrator $hydrator */
$hydrator = self::$container->get('ux.live_component.component_hydrator');
$hydrator = self::getContainer()->get('ux.live_component.component_hydrator');

/** @var ComponentFactory $factory */
$factory = self::$container->get('ux.twig_component.component_factory');
$factory = self::getContainer()->get('ux.twig_component.component_factory');

/** @var Component1 $component */
$component = $factory->create('component1', [
Expand All @@ -100,13 +98,11 @@ public function testCanModifyWritableProps(): void

public function testCannotModifyReadonlyProps(): void
{
self::bootKernel();

/** @var LiveComponentHydrator $hydrator */
$hydrator = self::$container->get('ux.live_component.component_hydrator');
$hydrator = self::getContainer()->get('ux.live_component.component_hydrator');

/** @var ComponentFactory $factory */
$factory = self::$container->get('ux.twig_component.component_factory');
$factory = self::getContainer()->get('ux.twig_component.component_factory');

/** @var Component1 $component */
$component = $factory->create('component1', [
Expand All @@ -126,41 +122,35 @@ public function testCannotModifyReadonlyProps(): void

public function testHydrationFailsIfChecksumMissing(): void
{
self::bootKernel();

/** @var LiveComponentHydrator $hydrator */
$hydrator = self::$container->get('ux.live_component.component_hydrator');
$hydrator = self::getContainer()->get('ux.live_component.component_hydrator');

/** @var ComponentFactory $factory */
$factory = self::$container->get('ux.twig_component.component_factory');
$factory = self::getContainer()->get('ux.twig_component.component_factory');

$this->expectException(\RuntimeException::class);
$hydrator->hydrate($factory->get('component1'), []);
}

public function testHydrationFailsOnChecksumMismatch(): void
{
self::bootKernel();

/** @var LiveComponentHydrator $hydrator */
$hydrator = self::$container->get('ux.live_component.component_hydrator');
$hydrator = self::getContainer()->get('ux.live_component.component_hydrator');

/** @var ComponentFactory $factory */
$factory = self::$container->get('ux.twig_component.component_factory');
$factory = self::getContainer()->get('ux.twig_component.component_factory');

$this->expectException(\RuntimeException::class);
$hydrator->hydrate($factory->get('component1'), ['_checksum' => 'invalid']);
}

public function testPreDehydrateAndPostHydrateHooksCalled(): void
{
self::bootKernel();

/** @var LiveComponentHydrator $hydrator */
$hydrator = self::$container->get('ux.live_component.component_hydrator');
$hydrator = self::getContainer()->get('ux.live_component.component_hydrator');

/** @var ComponentFactory $factory */
$factory = self::$container->get('ux.twig_component.component_factory');
$factory = self::getContainer()->get('ux.twig_component.component_factory');

/** @var Component2 $component */
$component = $factory->create('component2');
Expand All @@ -187,13 +177,11 @@ public function testPreDehydrateAndPostHydrateHooksCalled(): void

public function testDeletingEntityBetweenDehydrationAndHydrationSetsItToNull(): void
{
self::bootKernel();

/** @var LiveComponentHydrator $hydrator */
$hydrator = self::$container->get('ux.live_component.component_hydrator');
$hydrator = self::getContainer()->get('ux.live_component.component_hydrator');

/** @var ComponentFactory $factory */
$factory = self::$container->get('ux.twig_component.component_factory');
$factory = self::getContainer()->get('ux.twig_component.component_factory');

$entity = create(Entity1::class);

Expand Down Expand Up @@ -225,13 +213,11 @@ public function testDeletingEntityBetweenDehydrationAndHydrationSetsItToNull():

public function testCorrectlyUsesCustomFrontendNameInDehydrateAndHydrate(): void
{
self::bootKernel();

/** @var LiveComponentHydrator $hydrator */
$hydrator = self::$container->get('ux.live_component.component_hydrator');
$hydrator = self::getContainer()->get('ux.live_component.component_hydrator');

/** @var ComponentFactory $factory */
$factory = self::$container->get('ux.twig_component.component_factory');
$factory = self::getContainer()->get('ux.twig_component.component_factory');

/** @var Component3 $component */
$component = $factory->create('component3', ['prop1' => 'value1', 'prop2' => 'value2']);
Expand Down
18 changes: 6 additions & 12 deletions src/TwigComponent/tests/Integration/ComponentExtensionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@
*/
final class ComponentExtensionTest extends KernelTestCase
{
use ContainerBC;

public function testCanRenderComponent(): void
{
self::bootKernel();

$output = self::$container->get(Environment::class)->render('template_a.html.twig');
$output = self::getContainer()->get(Environment::class)->render('template_a.html.twig');

$this->assertStringContainsString('propA: prop a value', $output);
$this->assertStringContainsString('propB: prop b value', $output);
Expand All @@ -32,9 +32,7 @@ public function testCanRenderComponent(): void

public function testCanRenderTheSameComponentMultipleTimes(): void
{
self::bootKernel();

$output = self::$container->get(Environment::class)->render('template_b.html.twig');
$output = self::getContainer()->get(Environment::class)->render('template_b.html.twig');

$this->assertStringContainsString('propA: prop a value 1', $output);
$this->assertStringContainsString('propB: prop b value 1', $output);
Expand All @@ -45,18 +43,14 @@ public function testCanRenderTheSameComponentMultipleTimes(): void

public function testCanCustomizeTemplateWithAttribute(): void
{
self::bootKernel();

$output = self::$container->get(Environment::class)->render('template_b.html.twig');
$output = self::getContainer()->get(Environment::class)->render('template_b.html.twig');

$this->assertStringContainsString('Custom template 1', $output);
}

public function testCanCustomizeTemplateWithServiceTag(): void
{
self::bootKernel();

$output = self::$container->get(Environment::class)->render('template_c.html.twig');
$output = self::getContainer()->get(Environment::class)->render('template_c.html.twig');

$this->assertStringContainsString('Custom template 2', $output);
}
Expand Down
Loading