summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Controller.php64
-rw-r--r--tests/ControllerTest.php66
2 files changed, 124 insertions, 6 deletions
diff --git a/src/Controller.php b/src/Controller.php
index 93853d1..057653e 100644
--- a/src/Controller.php
+++ b/src/Controller.php
@@ -337,6 +337,58 @@ abstract class Controller
public function isError()
{
return $this->isClientError() || $this->isServerError();
+ }
+
+ /**
+ * Check if request is GET request
+ *
+ * @return boolean
+ */
+ public function isGetRequest()
+ {
+ $method = $this->getRequestMethod();
+
+ return !$method || $method === 'GET';
+ }
+
+ /**
+ * Check if request is POST request
+ *
+ * @return boolean
+ */
+ public function isPostRequest()
+ {
+ return $this->getRequestMethod() === 'POST';
+ }
+
+ /**
+ * Check if request is PUT request
+ *
+ * @return boolean
+ */
+ public function isPutRequest()
+ {
+ return $this->getRequestMethod() === 'PUT';
+ }
+
+ /**
+ * Check if request is DELETE request
+ *
+ * @return boolean
+ */
+ public function isDeleteRequest()
+ {
+ return $this->getRequestMethod() === 'DELETE';
+ }
+
+ /**
+ * Check if request is HEAD request
+ *
+ * @return boolean
+ */
+ public function isHeadRequest()
+ {
+ return $this->getRequestMethod() === 'HEAD';
}
/**
@@ -451,5 +503,17 @@ abstract class Controller
{
return array_search($format, $this->contentFormats) ?: $format;
}
+
+ /**
+ * Get method of request
+ *
+ * @return string
+ */
+ protected function getRequestMethod()
+ {
+ $request = $this->getRequest();
+
+ return $request ? $request->getMethod() : '';
+ }
}
diff --git a/tests/ControllerTest.php b/tests/ControllerTest.php
index f50e892..e0ebdc2 100644
--- a/tests/ControllerTest.php
+++ b/tests/ControllerTest.php
@@ -5,6 +5,9 @@ use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\StreamInterface;
+/**
+ * @covers Jasny\Controller
+ */
class ControllerTest extends PHPUnit_Framework_TestCase
{
/**
@@ -41,7 +44,7 @@ class ControllerTest extends PHPUnit_Framework_TestCase
* Test functions that check response status code
*
* @dataProvider responseStatusProvider
- * @param int $statusCode
+ * @param int status code
*/
public function testResponseStatus($code)
{
@@ -57,7 +60,8 @@ class ControllerTest extends PHPUnit_Framework_TestCase
$this->assertEquals($value, $controller->$func(), "Method '$func' returns incorrect value");
}
- $this->assertEquals($data['isClientError'] || $data['isServerError'], $controller->isError(), "Method 'isError' returns incorrect value");
+ $this->assertEquals($data['isClientError'] || $data['isServerError'], $controller->isError()
+ , "Method 'isError' returns incorrect value");
}
/**
@@ -77,6 +81,39 @@ class ControllerTest extends PHPUnit_Framework_TestCase
}
/**
+ * Test functions that check request method
+ *
+ * @dataProvider requestMethodProvider
+ * @param string $method
+ */
+ public function testRequestMethod($method)
+ {
+ $controller = $this->getController();
+ list($request, $response) = $this->getRequests();
+ $request->method('getMethod')->will($this->returnValue($method));
+
+ $controller($request, $response);
+
+ $data = $this->getMethodsMap($method);
+
+ foreach ($data as $func => $value) {
+ $this->assertEquals($value, $controller->$func(), "Method '$func' returns incorrect value");
+ }
+ }
+
+ /**
+ * Provide data for testing functions that determine request method
+ *
+ * @return array
+ */
+ public function requestMethodProvider()
+ {
+ return [
+ ['GET'], ['POST'], ['PUT'], ['DELETE'], ['HEAD']
+ ];
+ }
+
+ /**
* Test encodeData method, positive tests
*
* @dataProvider encodeDataPositiveProvider
@@ -616,6 +653,19 @@ class ControllerTest extends PHPUnit_Framework_TestCase
}
/**
+ * Get request and response instances
+ *
+ * @return array
+ */
+ public function getRequests()
+ {
+ return [
+ $this->createMock(ServerRequestInterface::class),
+ $this->createMock(ResponseInterface::class)
+ ];
+ }
+
+ /**
* Get map of status codes to states
*
* @param int $code
@@ -632,15 +682,19 @@ class ControllerTest extends PHPUnit_Framework_TestCase
}
/**
- * Get request and response instances
+ * Get map of request methods
*
+ * @param string $method
* @return array
*/
- public function getRequests()
+ public function getMethodsMap($method)
{
return [
- $this->createMock(ServerRequestInterface::class),
- $this->createMock(ResponseInterface::class)
+ 'isGetRequest' => $method === 'GET',
+ 'isPostRequest' => $method === 'POST',
+ 'isPutRequest' => $method === 'PUT',
+ 'isDeleteRequest' => $method === 'DELETE',
+ 'isHeadRequest' => $method === 'HEAD'
];
}
}