Skip to content

Commit b135c47

Browse files
committed
[DomCrawler] Add assertFormValue() and assertNoFormValue() in WebTestCase
1 parent 9323b75 commit b135c47

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ CHANGELOG
1111
* Added `TemplateAwareDataCollectorInterface` and `AbstractDataCollector` to simplify custom data collector creation and leverage autoconfiguration
1212
* Add `cache.adapter.redis_tag_aware` tag to use `RedisCacheAwareAdapter`
1313
* added `framework.http_client.retry_failing` configuration tree
14+
* added `assertFormValue()` and `assertNoFormValue()` in `WebTestCase`
1415

1516
5.1.0
1617
-----

src/Symfony/Bundle/FrameworkBundle/Test/DomCrawlerAssertionsTrait.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,23 @@ public static function assertInputValueNotSame(string $fieldName, string $expect
8383
), $message);
8484
}
8585

86+
public static function assertFormValue(string $formSelector, string $fieldName, string $value, string $message = ''): void
87+
{
88+
$node = self::getCrawler()->filter($formSelector);
89+
self::assertNotEmpty($node, "Form '$formSelector' not found.");
90+
$values = $node->form()->getValues();
91+
self::assertArrayHasKey($fieldName, $values, $message ?: "Field '$fieldName' not found in form '$formSelector'.");
92+
self::assertSame($value, $values[$fieldName]);
93+
}
94+
95+
public static function assertNoFormValue(string $formSelector, string $fieldName, string $message = ''): void
96+
{
97+
$node = self::getCrawler()->filter($formSelector);
98+
self::assertNotEmpty($node, "Form '$formSelector' not found.");
99+
$values = $node->form()->getValues();
100+
self::assertArrayNotHasKey($fieldName, $values, $message ?: "Field '$fieldName' has a value in form '$formSelector'.");
101+
}
102+
86103
private static function getCrawler(): Crawler
87104
{
88105
if (!$crawler = self::getClient()->getCrawler()) {

src/Symfony/Bundle/FrameworkBundle/Tests/Test/WebTestCaseTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,22 @@ public function testAssertInputValueNotSame()
220220
$this->getCrawlerTester(new Crawler('<html><body><form><input type="text" name="password" value="pa$$">'))->assertInputValueNotSame('password', 'pa$$');
221221
}
222222

223+
public function testAssertFormValue()
224+
{
225+
$this->getCrawlerTester(new Crawler('<html><body><form id="form"><input type="text" name="username" value="Fabien">', 'http://localhost'))->assertFormValue('#form', 'username', 'Fabien');
226+
$this->expectException(AssertionFailedError::class);
227+
$this->expectExceptionMessage('Failed asserting that two strings are identical.');
228+
$this->getCrawlerTester(new Crawler('<html><body><form id="form"><input type="text" name="username" value="Fabien">', 'http://localhost'))->assertFormValue('#form', 'username', 'Jane');
229+
}
230+
231+
public function testAssertNoFormValue()
232+
{
233+
$this->getCrawlerTester(new Crawler('<html><body><form id="form"><input type="checkbox" name="rememberMe">', 'http://localhost'))->assertNoFormValue('#form', 'rememberMe');
234+
$this->expectException(AssertionFailedError::class);
235+
$this->expectExceptionMessage("Field 'rememberMe' has a value in form '#form'.");
236+
$this->getCrawlerTester(new Crawler('<html><body><form id="form"><input type="checkbox" name="rememberMe" checked>', 'http://localhost'))->assertNoFormValue('#form', 'rememberMe');
237+
}
238+
223239
public function testAssertRequestAttributeValueSame()
224240
{
225241
$this->getRequestTester()->assertRequestAttributeValueSame('foo', 'bar');

0 commit comments

Comments
 (0)