From edcfcc397fda4ee052e690f03f028133052dddbc Mon Sep 17 00:00:00 2001 From: z38 Date: Sat, 8 Apr 2017 10:34:57 +0200 Subject: [PATCH] Add integration tests for Route API (#334) --- .../Model/Route/Response/UpdateResponse.php | 31 +++- tests/Api/TestCase.php | 4 +- tests/Integration/RouteApiTest.php | 148 ++++++++++++++++++ 3 files changed, 175 insertions(+), 8 deletions(-) create mode 100644 tests/Integration/RouteApiTest.php diff --git a/src/Mailgun/Model/Route/Response/UpdateResponse.php b/src/Mailgun/Model/Route/Response/UpdateResponse.php index 503797a..43edc0b 100644 --- a/src/Mailgun/Model/Route/Response/UpdateResponse.php +++ b/src/Mailgun/Model/Route/Response/UpdateResponse.php @@ -10,6 +10,7 @@ namespace Mailgun\Model\Route\Response; use Mailgun\Model\ApiResponse; +use Mailgun\Model\Route\Route; /** * @author David Garcia @@ -17,10 +18,15 @@ use Mailgun\Model\ApiResponse; final class UpdateResponse implements ApiResponse { /** - * @var string + * @var string|null */ private $message; + /** + * @var Route|null + */ + private $route; + /** * @param array $data * @@ -28,24 +34,35 @@ final class UpdateResponse implements ApiResponse */ public static function create(array $data) { - return new self( - isset($data['message']) ? $data['message'] : null - ); + $message = isset($data['message']) ? $data['message'] : null; + $route = isset($data['id']) ? Route::create($data) : null; + + return new self($message, $route); } /** - * @param string $message + * @param string|null $message + * @param Route|null $route */ - private function __construct($message) + private function __construct($message = null, Route $route = null) { $this->message = $message; + $this->route = $route; } /** - * @return string + * @return string|null */ public function getMessage() { return $this->message; } + + /** + * @return Route|null + */ + public function getRoute() + { + return $this->route; + } } diff --git a/tests/Api/TestCase.php b/tests/Api/TestCase.php index 8e597a7..f476a61 100644 --- a/tests/Api/TestCase.php +++ b/tests/Api/TestCase.php @@ -9,6 +9,8 @@ namespace Mailgun\Tests\Api; +use Mailgun\Mailgun; + /** * @author Tobias Nyholm * @author Contributors of https://github.com/KnpLabs/php-github-api @@ -70,6 +72,6 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase protected function getMailgunClient() { - return new \Mailgun\Mailgun($this->apiPrivKey); + return Mailgun::create($this->apiPrivKey); } } diff --git a/tests/Integration/RouteApiTest.php b/tests/Integration/RouteApiTest.php new file mode 100644 index 0000000..f116052 --- /dev/null +++ b/tests/Integration/RouteApiTest.php @@ -0,0 +1,148 @@ +getMailgunClient(); + + $response = $mg->routes()->create( + 'catch_all()', + ['forward("test@example.tld")', 'stop()'], + 'test-route', + 100 + ); + + $this->assertInstanceOf(CreateResponse::class, $response); + $this->assertInstanceOf(Route::class, $response->getRoute()); + $this->assertSame('catch_all()', $response->getRoute()->getFilter()); + $this->assertCount(2, $response->getRoute()->getActions()); + + return $response->getRoute()->getId(); + } + + /** + * @expectedException \Mailgun\Exception\HttpClientException + * @expectedExceptionCode 400 + */ + public function testRouteCreateInvalidFilter() + { + $mg = $this->getMailgunClient(); + + $mg->routes()->create( + 'invalid_function()', + ['stop()'], + '' + ); + } + + /** + * @depends testRouteCreate + */ + public function testRouteShow($routeId) + { + $mg = $this->getMailgunClient(); + + $response = $mg->routes()->show($routeId); + + $this->assertInstanceOf(ShowResponse::class, $response); + $this->assertInstanceOf(Route::class, $response->getRoute()); + $this->assertSame('test-route', $response->getRoute()->getDescription()); + $this->assertCount(2, $response->getRoute()->getActions()); + $this->assertContainsOnlyInstancesOf(Action::class, $response->getRoute()->getActions()); + $this->assertSame('forward("test@example.tld")', $response->getRoute()->getActions()[0]->getAction()); + + return $routeId; + } + + /** + * @depends testRouteShow + */ + public function testRouteUpdate($routeId) + { + $mg = $this->getMailgunClient(); + + $response = $mg->routes()->update( + $routeId, + 'match_recipient("foo@bar.com")', + ['stop()'], + 'test-route-updated', + 200 + ); + + $this->assertInstanceOf(UpdateResponse::class, $response); + $this->assertInstanceOf(Route::class, $response->getRoute()); + $this->assertSame('test-route-updated', $response->getRoute()->getDescription()); + + return $routeId; + } + + /** + * @depends testRouteUpdate + */ + public function testRouteIndex($routeId) + { + $mg = $this->getMailgunClient(); + + $response = $mg->routes()->index(); + + $this->assertInstanceOf(IndexResponse::class, $response); + $this->assertContainsOnlyInstancesOf(Route::class, $response->getRoutes()); + $foundTestRoute = false; + foreach ($response->getRoutes() as $route) { + if ($route->getId() === $routeId && $route->getDescription() === 'test-route-updated') { + $foundTestRoute = true; + } + } + $this->assertTrue($foundTestRoute); + + return $routeId; + } + + /** + * @depends testRouteIndex + */ + public function testRouteDelete($routeId) + { + $mg = $this->getMailgunClient(); + + $response = $mg->routes()->delete($routeId); + + $this->assertInstanceOf(DeleteResponse::class, $response); + $this->assertSame('Route has been deleted', $response->getMessage()); + } + + /** + * @expectedException \Mailgun\Exception\HttpClientException + * @expectedExceptionCode 404 + */ + public function testRouteDeleteInvalid() + { + $mg = $this->getMailgunClient(); + + $mg->routes()->delete('000000000000000000000000'); + } +}