Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0948b3c

Browse files
committed
[FrameworkBundle] Isolate non-visual assertions for API testing
1 parent 7f6ed32 commit 0948b3c

File tree

2 files changed

+160
-135
lines changed

2 files changed

+160
-135
lines changed
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bundle\FrameworkBundle\Test;
13+
14+
use PHPUnit\Framework\Constraint\LogicalAnd;
15+
use PHPUnit\Framework\Constraint\LogicalNot;
16+
use Symfony\Bundle\FrameworkBundle\KernelBrowser;
17+
use Symfony\Component\BrowserKit\Test\Constraint as BrowserKitConstraint;
18+
use Symfony\Component\HttpFoundation\Request;
19+
use Symfony\Component\HttpFoundation\Response;
20+
use Symfony\Component\HttpFoundation\Test\Constraint as ResponseConstraint;
21+
22+
/**
23+
* Ideas borrowed from Laravel Dusk's assertions.
24+
*
25+
* @see https://laravel.com/docs/5.7/dusk#available-assertions
26+
*/
27+
trait BrowserKitAssertionsTrait
28+
{
29+
public static function assertResponseIsSuccessful(string $message = ''): void
30+
{
31+
self::assertThat(self::getResponse(), new ResponseConstraint\ResponseIsSuccessful(), $message);
32+
}
33+
34+
public static function assertResponseStatusCodeSame(int $expectedCode, string $message = ''): void
35+
{
36+
self::assertThat(self::getResponse(), new ResponseConstraint\ResponseStatusCodeSame($expectedCode), $message);
37+
}
38+
39+
public static function assertResponseRedirects(string $expectedLocation = null, int $expectedCode = null, string $message = ''): void
40+
{
41+
$constraint = new ResponseConstraint\ResponseIsRedirected();
42+
if ($expectedLocation) {
43+
$constraint = LogicalAnd::fromConstraints($constraint, new ResponseConstraint\ResponseHeaderSame('Location', $expectedLocation));
44+
}
45+
if ($expectedCode) {
46+
$constraint = LogicalAnd::fromConstraints($constraint, new ResponseConstraint\ResponseStatusCodeSame($expectedCode));
47+
}
48+
49+
self::assertThat(self::getResponse(), $constraint, $message);
50+
}
51+
52+
public static function assertResponseHasHeader(string $headerName, string $message = ''): void
53+
{
54+
self::assertThat(self::getResponse(), new ResponseConstraint\ResponseHasHeader($headerName), $message);
55+
}
56+
57+
public static function assertResponseNotHasHeader(string $headerName, string $message = ''): void
58+
{
59+
self::assertThat(self::getResponse(), new LogicalNot(new ResponseConstraint\ResponseHasHeader($headerName)), $message);
60+
}
61+
62+
public static function assertResponseHeaderSame(string $headerName, string $expectedValue, string $message = ''): void
63+
{
64+
self::assertThat(self::getResponse(), new ResponseConstraint\ResponseHeaderSame($headerName, $expectedValue), $message);
65+
}
66+
67+
public static function assertResponseHeaderNotSame(string $headerName, string $expectedValue, string $message = ''): void
68+
{
69+
self::assertThat(self::getResponse(), new LogicalNot(new ResponseConstraint\ResponseHeaderSame($headerName, $expectedValue)), $message);
70+
}
71+
72+
public static function assertResponseHasCookie(string $name, string $path = '/', string $domain = null, string $message = ''): void
73+
{
74+
self::assertThat(self::getResponse(), new ResponseConstraint\ResponseHasCookie($name, $path, $domain), $message);
75+
}
76+
77+
public static function assertResponseNotHasCookie(string $name, string $path = '/', string $domain = null, string $message = ''): void
78+
{
79+
self::assertThat(self::getResponse(), new LogicalNot(new ResponseConstraint\ResponseHasCookie($name, $path, $domain)), $message);
80+
}
81+
82+
public static function assertResponseCookieValueSame(string $name, string $expectedValue, string $path = '/', string $domain = null, string $message = ''): void
83+
{
84+
self::assertThat(self::getResponse(), LogicalAnd::fromConstraints(
85+
new ResponseConstraint\ResponseHasCookie($name, $path, $domain),
86+
new ResponseConstraint\ResponseCookieValueSame($name, $expectedValue, $path, $domain)
87+
), $message);
88+
}
89+
90+
public static function assertBrowserHasCookie(string $name, string $path = '/', string $domain = null, string $message = ''): void
91+
{
92+
self::assertThat(self::getClient(), new BrowserKitConstraint\BrowserHasCookie($name, $path, $domain), $message);
93+
}
94+
95+
public static function assertBrowserNotHasCookie(string $name, string $path = '/', string $domain = null, string $message = ''): void
96+
{
97+
self::assertThat(self::getClient(), new LogicalNot(new BrowserKitConstraint\BrowserHasCookie($name, $path, $domain)), $message);
98+
}
99+
100+
public static function assertBrowserCookieValueSame(string $name, string $expectedValue, bool $raw = false, string $path = '/', string $domain = null, string $message = ''): void
101+
{
102+
self::assertThat(self::getClient(), LogicalAnd::fromConstraints(
103+
new BrowserKitConstraint\BrowserHasCookie($name, $path, $domain),
104+
new BrowserKitConstraint\BrowserCookieValueSame($name, $expectedValue, $raw, $path, $domain)
105+
), $message);
106+
}
107+
108+
public static function assertRequestAttributeValueSame(string $name, string $expectedValue, string $message = ''): void
109+
{
110+
self::assertThat(self::getRequest(), new ResponseConstraint\RequestAttributeValueSame($name, $expectedValue), $message);
111+
}
112+
113+
public static function assertRouteSame($expectedRoute, array $parameters = [], string $message = ''): void
114+
{
115+
$constraint = new ResponseConstraint\RequestAttributeValueSame('_route', $expectedRoute);
116+
$constraints = [];
117+
foreach ($parameters as $key => $value) {
118+
$constraints[] = new ResponseConstraint\RequestAttributeValueSame($key, $value);
119+
}
120+
if ($constraints) {
121+
$constraint = LogicalAnd::fromConstraints($constraint, ...$constraints);
122+
}
123+
124+
self::assertThat(self::getRequest(), $constraint, $message);
125+
}
126+
127+
private static function getClient(KernelBrowser $newClient = null): ?KernelBrowser
128+
{
129+
static $client;
130+
131+
if (0 < \func_num_args()) {
132+
return $client = $newClient;
133+
}
134+
135+
if (!$client instanceof KernelBrowser) {
136+
static::fail(sprintf('A client must be set to make assertions on it. Did you forget to call "%s::createClient()"?', __CLASS__));
137+
}
138+
139+
return $client;
140+
}
141+
142+
private static function getResponse(): Response
143+
{
144+
if (!$response = self::getClient()->getResponse()) {
145+
static::fail('A client must have an HTTP Response to make assertions. Did you forget to make an HTTP request?');
146+
}
147+
148+
return $response;
149+
}
150+
151+
private static function getRequest(): Request
152+
{
153+
if (!$request = self::getClient()->getRequest()) {
154+
static::fail('A client must have an HTTP Request to make assertions. Did you forget to make an HTTP request?');
155+
}
156+
157+
return $request;
158+
}
159+
}

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

Lines changed: 1 addition & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,8 @@
1313

1414
use PHPUnit\Framework\Constraint\LogicalAnd;
1515
use PHPUnit\Framework\Constraint\LogicalNot;
16-
use Symfony\Bundle\FrameworkBundle\KernelBrowser;
17-
use Symfony\Component\BrowserKit\Test\Constraint as BrowserKitConstraint;
1816
use Symfony\Component\DomCrawler\Crawler;
1917
use Symfony\Component\DomCrawler\Test\Constraint as DomCrawlerConstraint;
20-
use Symfony\Component\HttpFoundation\Request;
21-
use Symfony\Component\HttpFoundation\Response;
22-
use Symfony\Component\HttpFoundation\Test\Constraint as ResponseConstraint;
2318

2419
/**
2520
* Ideas borrowed from Laravel Dusk's assertions.
@@ -28,84 +23,7 @@
2823
*/
2924
trait WebTestAssertionsTrait
3025
{
31-
public static function assertResponseIsSuccessful(string $message = ''): void
32-
{
33-
self::assertThat(self::getResponse(), new ResponseConstraint\ResponseIsSuccessful(), $message);
34-
}
35-
36-
public static function assertResponseStatusCodeSame(int $expectedCode, string $message = ''): void
37-
{
38-
self::assertThat(self::getResponse(), new ResponseConstraint\ResponseStatusCodeSame($expectedCode), $message);
39-
}
40-
41-
public static function assertResponseRedirects(string $expectedLocation = null, int $expectedCode = null, string $message = ''): void
42-
{
43-
$constraint = new ResponseConstraint\ResponseIsRedirected();
44-
if ($expectedLocation) {
45-
$constraint = LogicalAnd::fromConstraints($constraint, new ResponseConstraint\ResponseHeaderSame('Location', $expectedLocation));
46-
}
47-
if ($expectedCode) {
48-
$constraint = LogicalAnd::fromConstraints($constraint, new ResponseConstraint\ResponseStatusCodeSame($expectedCode));
49-
}
50-
51-
self::assertThat(self::getResponse(), $constraint, $message);
52-
}
53-
54-
public static function assertResponseHasHeader(string $headerName, string $message = ''): void
55-
{
56-
self::assertThat(self::getResponse(), new ResponseConstraint\ResponseHasHeader($headerName), $message);
57-
}
58-
59-
public static function assertResponseNotHasHeader(string $headerName, string $message = ''): void
60-
{
61-
self::assertThat(self::getResponse(), new LogicalNot(new ResponseConstraint\ResponseHasHeader($headerName)), $message);
62-
}
63-
64-
public static function assertResponseHeaderSame(string $headerName, string $expectedValue, string $message = ''): void
65-
{
66-
self::assertThat(self::getResponse(), new ResponseConstraint\ResponseHeaderSame($headerName, $expectedValue), $message);
67-
}
68-
69-
public static function assertResponseHeaderNotSame(string $headerName, string $expectedValue, string $message = ''): void
70-
{
71-
self::assertThat(self::getResponse(), new LogicalNot(new ResponseConstraint\ResponseHeaderSame($headerName, $expectedValue)), $message);
72-
}
73-
74-
public static function assertResponseHasCookie(string $name, string $path = '/', string $domain = null, string $message = ''): void
75-
{
76-
self::assertThat(self::getResponse(), new ResponseConstraint\ResponseHasCookie($name, $path, $domain), $message);
77-
}
78-
79-
public static function assertResponseNotHasCookie(string $name, string $path = '/', string $domain = null, string $message = ''): void
80-
{
81-
self::assertThat(self::getResponse(), new LogicalNot(new ResponseConstraint\ResponseHasCookie($name, $path, $domain)), $message);
82-
}
83-
84-
public static function assertResponseCookieValueSame(string $name, string $expectedValue, string $path = '/', string $domain = null, string $message = ''): void
85-
{
86-
self::assertThat(self::getResponse(), LogicalAnd::fromConstraints(
87-
new ResponseConstraint\ResponseHasCookie($name, $path, $domain),
88-
new ResponseConstraint\ResponseCookieValueSame($name, $expectedValue, $path, $domain)
89-
), $message);
90-
}
91-
92-
public static function assertBrowserHasCookie(string $name, string $path = '/', string $domain = null, string $message = ''): void
93-
{
94-
self::assertThat(self::getClient(), new BrowserKitConstraint\BrowserHasCookie($name, $path, $domain), $message);
95-
}
96-
97-
public static function assertBrowserNotHasCookie(string $name, string $path = '/', string $domain = null, string $message = ''): void
98-
{
99-
self::assertThat(self::getClient(), new LogicalNot(new BrowserKitConstraint\BrowserHasCookie($name, $path, $domain)), $message);
100-
}
101-
102-
public static function assertBrowserCookieValueSame(string $name, string $expectedValue, bool $raw = false, string $path = '/', string $domain = null, string $message = ''): void
103-
{
104-
self::assertThat(self::getClient(), LogicalAnd::fromConstraints(
105-
new BrowserKitConstraint\BrowserHasCookie($name, $path, $domain),
106-
new BrowserKitConstraint\BrowserCookieValueSame($name, $expectedValue, $raw, $path, $domain)
107-
), $message);
108-
}
26+
use BrowserKitAssertionsTrait;
10927

11028
public static function assertSelectorExists(string $selector, string $message = ''): void
11129
{
@@ -167,40 +85,6 @@ public static function assertInputValueNotSame(string $fieldName, string $expect
16785
), $message);
16886
}
16987

170-
public static function assertRequestAttributeValueSame(string $name, string $expectedValue, string $message = ''): void
171-
{
172-
self::assertThat(self::getRequest(), new ResponseConstraint\RequestAttributeValueSame($name, $expectedValue), $message);
173-
}
174-
175-
public static function assertRouteSame($expectedRoute, array $parameters = [], string $message = ''): void
176-
{
177-
$constraint = new ResponseConstraint\RequestAttributeValueSame('_route', $expectedRoute);
178-
$constraints = [];
179-
foreach ($parameters as $key => $value) {
180-
$constraints[] = new ResponseConstraint\RequestAttributeValueSame($key, $value);
181-
}
182-
if ($constraints) {
183-
$constraint = LogicalAnd::fromConstraints($constraint, ...$constraints);
184-
}
185-
186-
self::assertThat(self::getRequest(), $constraint, $message);
187-
}
188-
189-
private static function getClient(KernelBrowser $newClient = null): ?KernelBrowser
190-
{
191-
static $client;
192-
193-
if (0 < \func_num_args()) {
194-
return $client = $newClient;
195-
}
196-
197-
if (!$client instanceof KernelBrowser) {
198-
static::fail(sprintf('A client must be set to make assertions on it. Did you forget to call "%s::createClient()"?', __CLASS__));
199-
}
200-
201-
return $client;
202-
}
203-
20488
private static function getCrawler(): Crawler
20589
{
20690
if (!$crawler = self::getClient()->getCrawler()) {
@@ -209,22 +93,4 @@ private static function getCrawler(): Crawler
20993

21094
return $crawler;
21195
}
212-
213-
private static function getResponse(): Response
214-
{
215-
if (!$response = self::getClient()->getResponse()) {
216-
static::fail('A client must have an HTTP Response to make assertions. Did you forget to make an HTTP request?');
217-
}
218-
219-
return $response;
220-
}
221-
222-
private static function getRequest(): Request
223-
{
224-
if (!$request = self::getClient()->getRequest()) {
225-
static::fail('A client must have an HTTP Request to make assertions. Did you forget to make an HTTP request?');
226-
}
227-
228-
return $request;
229-
}
23096
}

0 commit comments

Comments
 (0)