From c3e0336596fdd5b9336950b5d27bb0359f6c226e Mon Sep 17 00:00:00 2001 From: Matthieu Napoli Date: Thu, 24 Sep 2020 10:54:18 +0200 Subject: [PATCH] [DomCrawler] Add `assertFormValue()` and `assertNoFormValue()` in `WebTestCase` --- src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md | 1 + .../Test/DomCrawlerAssertionsTrait.php | 17 +++++++++++++++++ .../Tests/Test/WebTestCaseTest.php | 16 ++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md index 90671527f69c4..a734ef682a686 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md @@ -12,6 +12,7 @@ CHANGELOG * Add `cache.adapter.redis_tag_aware` tag to use `RedisCacheAwareAdapter` * added `framework.http_client.retry_failing` configuration tree * added `assertCheckboxChecked()` and `assertCheckboxNotChecked()` in `WebTestCase` + * added `assertFormValue()` and `assertNoFormValue()` in `WebTestCase` 5.1.0 ----- diff --git a/src/Symfony/Bundle/FrameworkBundle/Test/DomCrawlerAssertionsTrait.php b/src/Symfony/Bundle/FrameworkBundle/Test/DomCrawlerAssertionsTrait.php index 659b7864e19fc..2a692d6f5a367 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Test/DomCrawlerAssertionsTrait.php +++ b/src/Symfony/Bundle/FrameworkBundle/Test/DomCrawlerAssertionsTrait.php @@ -101,6 +101,23 @@ public static function assertCheckboxNotChecked(string $fieldName, string $messa ), $message); } + public static function assertFormValue(string $formSelector, string $fieldName, string $value, string $message = ''): void + { + $node = self::getCrawler()->filter($formSelector); + self::assertNotEmpty($node, sprintf('Form "%s" not found.', $formSelector)); + $values = $node->form()->getValues(); + self::assertArrayHasKey($fieldName, $values, $message ?: sprintf('Field "%s" not found in form "%s".', $fieldName, $formSelector)); + self::assertSame($value, $values[$fieldName]); + } + + public static function assertNoFormValue(string $formSelector, string $fieldName, string $message = ''): void + { + $node = self::getCrawler()->filter($formSelector); + self::assertNotEmpty($node, sprintf('Form "%s" not found.', $formSelector)); + $values = $node->form()->getValues(); + self::assertArrayNotHasKey($fieldName, $values, $message ?: sprintf('Field "%s" has a value in form "%s".', $fieldName, $formSelector)); + } + private static function getCrawler(): Crawler { if (!$crawler = self::getClient()->getCrawler()) { diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Test/WebTestCaseTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Test/WebTestCaseTest.php index ac9036baf7020..96e1d8779b31e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Test/WebTestCaseTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Test/WebTestCaseTest.php @@ -236,6 +236,22 @@ public function testAssertCheckboxNotChecked() $this->getCrawlerTester(new Crawler('
'))->assertCheckboxNotChecked('rememberMe'); } + public function testAssertFormValue() + { + $this->getCrawlerTester(new Crawler('', 'http://localhost'))->assertFormValue('#form', 'username', 'Fabien'); + $this->expectException(AssertionFailedError::class); + $this->expectExceptionMessage('Failed asserting that two strings are identical.'); + $this->getCrawlerTester(new Crawler('', 'http://localhost'))->assertFormValue('#form', 'username', 'Jane'); + } + + public function testAssertNoFormValue() + { + $this->getCrawlerTester(new Crawler('', 'http://localhost'))->assertNoFormValue('#form', 'rememberMe'); + $this->expectException(AssertionFailedError::class); + $this->expectExceptionMessage('Field "rememberMe" has a value in form "#form".'); + $this->getCrawlerTester(new Crawler('', 'http://localhost'))->assertNoFormValue('#form', 'rememberMe'); + } + public function testAssertRequestAttributeValueSame() { $this->getRequestTester()->assertRequestAttributeValueSame('foo', 'bar');