Skip to content

Commit f6a13b2

Browse files
committed
Adding test
1 parent 15b9e53 commit f6a13b2

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

src/DependentFieldConfig.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ public function __construct(
3030

3131
public function isReady(array $availableDependencyData, string $eventName): bool
3232
{
33+
if (!\array_key_exists($eventName, $this->callbackExecuted)) {
34+
throw new \InvalidArgumentException(sprintf('Invalid event name "%s"', $eventName));
35+
}
36+
3337
if ($this->callbackExecuted[$eventName]) {
3438
return false;
3539
}

tests/DependentFieldConfigTest.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace Symfonycasts\DynamicForms\Tests;
4+
5+
use PHPUnit\Framework\TestCase;
6+
use Symfony\Component\Form\FormEvents;
7+
use Symfonycasts\DynamicForms\DependentField;
8+
use Symfonycasts\DynamicForms\DependentFieldConfig;
9+
10+
class DependentFieldConfigTest extends TestCase
11+
{
12+
public function testIsReadyReturnsCorrectlyBasedOnDependencies(): void
13+
{
14+
$fieldConfig = new DependentFieldConfig('state', ['country'], fn () => null);
15+
$this->assertFalse($fieldConfig->isReady([], FormEvents::PRE_SET_DATA));
16+
$this->assertTrue($fieldConfig->isReady(['country' => 'United States'], FormEvents::PRE_SET_DATA));
17+
$this->assertTrue($fieldConfig->isReady(['country' => 'United States'], FormEvents::POST_SUBMIT));
18+
$this->assertTrue($fieldConfig->isReady(['country' => 'United States', 'extra' => 'field'], FormEvents::POST_SUBMIT));
19+
}
20+
21+
public function testIsReadyReturnFalseIfCallbackExecuted(): void
22+
{
23+
$fieldConfig = new DependentFieldConfig('state', ['country'], fn () => null);
24+
$this->assertTrue($fieldConfig->isReady(['country' => 'United States'], FormEvents::PRE_SET_DATA));
25+
$fieldConfig->execute(['country' => 'United States'], FormEvents::PRE_SET_DATA);
26+
$this->assertFalse($fieldConfig->isReady(['country' => 'United States'], FormEvents::PRE_SET_DATA));
27+
$this->assertTrue($fieldConfig->isReady(['country' => 'United States'], FormEvents::POST_SUBMIT));
28+
}
29+
30+
public function testExecuteCallsCallback(): void
31+
{
32+
$argsPassedToCallback = null;
33+
$fieldConfig = new DependentFieldConfig('state', ['country', 'shouldHideRandomStates'], function ($configurableFormBuilder, $country, $shouldHideRandomStates) use (&$argsPassedToCallback) {
34+
$argsPassedToCallback = [$configurableFormBuilder, $country, $shouldHideRandomStates];
35+
});
36+
$fieldConfig->execute(['country' => 'United States', 'shouldHideRandomStates' => true], FormEvents::PRE_SET_DATA);
37+
$this->assertNotNull($argsPassedToCallback);
38+
$this->assertInstanceOf(DependentField::class, $argsPassedToCallback[0]);
39+
$this->assertSame('United States', $argsPassedToCallback[1]);
40+
$this->assertTrue($argsPassedToCallback[2]);
41+
}
42+
}

0 commit comments

Comments
 (0)