From 4db7c8da7d75f13c4ac98d09abf1db5cd7d3453f Mon Sep 17 00:00:00 2001 From: PJ Dietz Date: Sat, 26 Jul 2014 11:49:15 -0400 Subject: [PATCH] Add Request::getFormFields. Add Test for sending form-encoded request --- src/pjdietz/WellRESTed/Request.php | 11 +++++++++ test/ClientTest.php | 37 ++++++++++++++++++++++++++++++ test/RequestTest.php | 37 +++++++++++++++++++++++------- test/sham-routers/formFields.php | 5 ++++ 4 files changed, 82 insertions(+), 8 deletions(-) create mode 100644 test/sham-routers/formFields.php diff --git a/src/pjdietz/WellRESTed/Request.php b/src/pjdietz/WellRESTed/Request.php index fc1daa3..8518e86 100644 --- a/src/pjdietz/WellRESTed/Request.php +++ b/src/pjdietz/WellRESTed/Request.php @@ -330,6 +330,17 @@ class Request extends Message implements RequestInterface $this->setQuery($query); } + /** + * Return the form fields for this request. + * + * @return array + */ + public function getFormFields() + { + parse_str($this->getBody(), $fields); + return $fields; + } + /** * Set the body by supplying an associative array of form fields. * diff --git a/test/ClientTest.php b/test/ClientTest.php index 830fef1..0fb7851 100644 --- a/test/ClientTest.php +++ b/test/ClientTest.php @@ -5,6 +5,7 @@ namespace pjdietz\WellRESTed\Test; use Faker\Factory; use pjdietz\ShamServer\ShamServer; use pjdietz\WellRESTed\Client; +use pjdietz\WellRESTed\Request; class ClientTest extends \PHPUnit_Framework_TestCase { @@ -138,6 +139,42 @@ class ClientTest extends \PHPUnit_Framework_TestCase ]; } + /** + * @dataProvider formProvider + */ + public function testSendForm($form) + { + $host = "localhost"; + $port = 8080; + $script = realpath(__DIR__ . "/sham-routers/formFields.php"); + $server = new ShamServer($host, $port, $script); + + $rqst = new Request("http://$host:$port"); + $rqst->setMethod("POST"); + $rqst->setFormFields($form); + $client = new Client(); + $resp = $client->request($rqst); + + $body = json_decode($resp->getBody(), true); + $this->assertEquals($form, $body); + + $server->stop(); + } + + public function formProvider() + { + $faker = Factory::create(); + return [ + [ + [ + "firstName" => $faker->firstName, + "lastName" => $faker->lastName, + "email" => $faker->email + ] + ], + ]; + } + public function testSetCustomCurlOptionsOnInstantiation() { $host = "localhost"; diff --git a/test/RequestTest.php b/test/RequestTest.php index 4885327..306bfe6 100644 --- a/test/RequestTest.php +++ b/test/RequestTest.php @@ -178,15 +178,11 @@ class RequestTest extends \PHPUnit_Framework_TestCase $this->assertNull($rqst->getBody()); } - public function testSetFormFields() + /** + * @dataProvider formProvider + */ + public function testFormFieldsEncodeProperly($form) { - $faker = Factory::create(); - $form = [ - "firstName" => $faker->firstName, - "lastName" => $faker->lastName, - "username" => $faker->userName - ]; - $rqst = new Request(); $rqst->setFormFields($form); $body = $rqst->getBody(); @@ -194,6 +190,31 @@ class RequestTest extends \PHPUnit_Framework_TestCase $this->assertEquals($form, $fields); } + /** + * @dataProvider formProvider + */ + public function testFormFieldsDecodeProperly($form) + { + $rqst = new Request(); + $rqst->setFormFields($form); + $fields = $rqst->getFormFields(); + $this->assertEquals($form, $fields); + } + + public function formProvider() + { + $faker = Factory::create(); + return [ + [ + [ + "firstName" => $faker->firstName, + "lastName" => $faker->lastName, + "username" => $faker->userName + ] + ] + ]; + } + /** * @dataProvider headerProvider */ diff --git a/test/sham-routers/formFields.php b/test/sham-routers/formFields.php new file mode 100644 index 0000000..b437ca0 --- /dev/null +++ b/test/sham-routers/formFields.php @@ -0,0 +1,5 @@ +