1515use GuzzleHttp \ClientInterface ;
1616use GuzzleHttp \Exception \RequestException ;
1717use PHPUnit_Framework_Assert as Assertions ;
18+ use GuzzleHttp \Psr7 \Request ;
19+ use Psr \Http \Message \ResponseInterface ;
1820
1921/**
2022 * Provides web API description definitions.
@@ -39,14 +41,14 @@ class WebApiContext implements ApiClientAwareContext
3941 protected $ headers = array ();
4042
4143 /**
42- * @var \GuzzleHttp\Message\RequestInterface
44+ * @var ResponseInterface
4345 */
44- protected $ request ;
46+ protected $ response ;
4547
4648 /**
47- * @var \GuzzleHttp\Message\ResponseInterface
49+ * @var Request
4850 */
49- protected $ response ;
51+ protected $ request ;
5052
5153 protected $ placeHolders = array ();
5254
@@ -97,10 +99,7 @@ public function iSetHeaderWithValue($name, $value)
9799 public function iSendARequest ($ method , $ url )
98100 {
99101 $ url = $ this ->prepareUrl ($ url );
100- $ this ->request = $ this ->getClient ()->createRequest ($ method , $ url );
101- if (!empty ($ this ->headers )) {
102- $ this ->request ->addHeaders ($ this ->headers );
103- }
102+ $ this ->request = new Request ($ method , $ url , $ this ->getHeaders ());
104103
105104 $ this ->sendRequest ();
106105 }
@@ -123,13 +122,7 @@ public function iSendARequestWithValues($method, $url, TableNode $post)
123122 $ fields [$ key ] = $ this ->replacePlaceHolder ($ val );
124123 }
125124
126- $ bodyOption = array (
127- 'body ' => json_encode ($ fields ),
128- );
129- $ this ->request = $ this ->getClient ()->createRequest ($ method , $ url , $ bodyOption );
130- if (!empty ($ this ->headers )) {
131- $ this ->request ->addHeaders ($ this ->headers );
132- }
125+ $ this ->request = new Request ($ method , $ url , $ this ->getHeaders (), json_encode ($ fields ));
133126
134127 $ this ->sendRequest ();
135128 }
@@ -147,15 +140,8 @@ public function iSendARequestWithBody($method, $url, PyStringNode $string)
147140 {
148141 $ url = $ this ->prepareUrl ($ url );
149142 $ string = $ this ->replacePlaceHolder (trim ($ string ));
143+ $ this ->request = new Request ($ method , $ url , $ this ->getHeaders (), $ string );
150144
151- $ this ->request = $ this ->getClient ()->createRequest (
152- $ method ,
153- $ url ,
154- array (
155- 'headers ' => $ this ->getHeaders (),
156- 'body ' => $ string ,
157- )
158- );
159145 $ this ->sendRequest ();
160146 }
161147
@@ -174,14 +160,18 @@ public function iSendARequestWithFormData($method, $url, PyStringNode $body)
174160 $ body = $ this ->replacePlaceHolder (trim ($ body ));
175161
176162 $ fields = array ();
163+ $ requestFields = [];
177164 parse_str (implode ('& ' , explode ("\n" , $ body )), $ fields );
178- $ this ->request = $ this ->getClient ()->createRequest ($ method , $ url );
179- /** @var \GuzzleHttp\Post\PostBodyInterface $requestBody */
180- $ requestBody = $ this ->request ->getBody ();
165+
181166 foreach ($ fields as $ key => $ value ) {
182- $ requestBody -> setField ( $ key, $ value );
167+ $ requestFields [] = sprintf ( ' %s=%s ' , urlencode ( $ key), urlencode ( $ value) );
183168 }
184169
170+ $ requestBody = implode ('& ' , $ requestFields );
171+
172+ $ headers = array_merge ($ this ->getHeaders (), ['Content-Type ' => 'application/x-www-form-urlencoded ' ]);
173+ $ this ->request = new Request ($ method , $ url , $ headers , $ requestBody );
174+
185175 $ this ->sendRequest ();
186176 }
187177
@@ -241,7 +231,7 @@ public function theResponseShouldNotContain($text)
241231 public function theResponseShouldContainJson (PyStringNode $ jsonString )
242232 {
243233 $ etalon = json_decode ($ this ->replacePlaceHolder ($ jsonString ->getRaw ()), true );
244- $ actual = $ this ->response ->json ( );
234+ $ actual = json_decode ( $ this ->response ->getBody (), true );
245235
246236 if (null === $ etalon ) {
247237 throw new \RuntimeException (
@@ -268,8 +258,8 @@ public function printResponse()
268258
269259 echo sprintf (
270260 "%s %s => %d: \n%s " ,
271- $ request ->getMethod (),
272- $ request ->getUrl (),
261+ $ this -> request ->getMethod (),
262+ $ this -> request ->getUri (),
273263 $ response ->getStatusCode (),
274264 $ response ->getBody ()
275265 );
0 commit comments