X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/58fa7679bccafd00f9a50bcd4a87e96876331b03..refs/pull/3365/head:/tests/TestResponse.php diff --git a/tests/TestResponse.php b/tests/TestResponse.php index bf7ee0f69..4e53aa020 100644 --- a/tests/TestResponse.php +++ b/tests/TestResponse.php @@ -1,16 +1,17 @@ -crawlerInstance)) { $this->crawlerInstance = new Crawler($this->getContent()); } + return $this->crawlerInstance; } + /** + * Get the HTML of the first element at the given selector. + */ + public function getElementHtml(string $selector): string + { + return $this->crawler()->filter($selector)->first()->outerHtml(); + } + /** * Assert the response contains the specified element. + * * @return $this */ public function assertElementExists(string $selector) @@ -33,16 +44,38 @@ class TestResponse extends BaseTestResponse { $elements = $this->crawler()->filter($selector); PHPUnit::assertTrue( $elements->count() > 0, - 'Unable to find element matching the selector: '.PHP_EOL.PHP_EOL. - "[{$selector}]".PHP_EOL.PHP_EOL. - 'within'.PHP_EOL.PHP_EOL. + 'Unable to find element matching the selector: ' . PHP_EOL . PHP_EOL . + "[{$selector}]" . PHP_EOL . PHP_EOL . + 'within' . PHP_EOL . PHP_EOL . + "[{$this->getContent()}]." + ); + + return $this; + } + + /** + * Assert the response contains the given count of elements + * that match the given css selector. + * + * @return $this + */ + public function assertElementCount(string $selector, int $count) + { + $elements = $this->crawler()->filter($selector); + PHPUnit::assertTrue( + $elements->count() === $count, + 'Unable to ' . $count . ' element(s) matching the selector: ' . PHP_EOL . PHP_EOL . + "[{$selector}]" . PHP_EOL . PHP_EOL . + 'found ' . $elements->count() . ' within' . PHP_EOL . PHP_EOL . "[{$this->getContent()}]." ); + return $this; } /** * Assert the response does not contain the specified element. + * * @return $this */ public function assertElementNotExists(string $selector) @@ -50,11 +83,12 @@ class TestResponse extends BaseTestResponse { $elements = $this->crawler()->filter($selector); PHPUnit::assertTrue( $elements->count() === 0, - 'Found elements matching the selector: '.PHP_EOL.PHP_EOL. - "[{$selector}]".PHP_EOL.PHP_EOL. - 'within'.PHP_EOL.PHP_EOL. + 'Found elements matching the selector: ' . PHP_EOL . PHP_EOL . + "[{$selector}]" . PHP_EOL . PHP_EOL . + 'within' . PHP_EOL . PHP_EOL . "[{$this->getContent()}]." ); + return $this; } @@ -62,6 +96,7 @@ class TestResponse extends BaseTestResponse { * Assert the response includes a specific element containing the given text. * If an nth match is provided, only that will be checked otherwise all matching * elements will be checked for the given text. + * * @return $this */ public function assertElementContains(string $selector, string $text, ?int $nthMatch = null) @@ -84,12 +119,12 @@ class TestResponse extends BaseTestResponse { PHPUnit::assertTrue( $matched, - 'Unable to find element of selector: '.PHP_EOL.PHP_EOL. - ($nthMatch ? ("at position {$nthMatch}".PHP_EOL.PHP_EOL) : '') . - "[{$selector}]".PHP_EOL.PHP_EOL. - 'containing text'.PHP_EOL.PHP_EOL. - "[{$text}]".PHP_EOL.PHP_EOL. - 'within'.PHP_EOL.PHP_EOL. + 'Unable to find element of selector: ' . PHP_EOL . PHP_EOL . + ($nthMatch ? ("at position {$nthMatch}" . PHP_EOL . PHP_EOL) : '') . + "[{$selector}]" . PHP_EOL . PHP_EOL . + 'containing text' . PHP_EOL . PHP_EOL . + "[{$text}]" . PHP_EOL . PHP_EOL . + 'within' . PHP_EOL . PHP_EOL . "[{$this->getContent()}]." ); @@ -100,6 +135,7 @@ class TestResponse extends BaseTestResponse { * Assert the response does not include a specific element containing the given text. * If an nth match is provided, only that will be checked otherwise all matching * elements will be checked for the given text. + * * @return $this */ public function assertElementNotContains(string $selector, string $text, ?int $nthMatch = null) @@ -122,12 +158,12 @@ class TestResponse extends BaseTestResponse { PHPUnit::assertTrue( !$matched, - 'Found element of selector: '.PHP_EOL.PHP_EOL. - ($nthMatch ? ("at position {$nthMatch}".PHP_EOL.PHP_EOL) : '') . - "[{$selector}]".PHP_EOL.PHP_EOL. - 'containing text'.PHP_EOL.PHP_EOL. - "[{$text}]".PHP_EOL.PHP_EOL. - 'within'.PHP_EOL.PHP_EOL. + 'Found element of selector: ' . PHP_EOL . PHP_EOL . + ($nthMatch ? ("at position {$nthMatch}" . PHP_EOL . PHP_EOL) : '') . + "[{$selector}]" . PHP_EOL . PHP_EOL . + 'containing text' . PHP_EOL . PHP_EOL . + "[{$text}]" . PHP_EOL . PHP_EOL . + 'within' . PHP_EOL . PHP_EOL . "[{$this->getContent()}]." ); @@ -136,6 +172,7 @@ class TestResponse extends BaseTestResponse { /** * Assert there's a notification within the view containing the given text. + * * @return $this */ public function assertNotificationContains(string $text) @@ -145,14 +182,15 @@ class TestResponse extends BaseTestResponse { /** * Get the escaped text pattern for the constraint. + * * @return string */ protected function getEscapedPattern(string $text) { $rawPattern = preg_quote($text, '/'); $escapedPattern = preg_quote(e($text), '/'); + return $rawPattern == $escapedPattern ? $rawPattern : "({$rawPattern}|{$escapedPattern})"; } - }