diff options
author | Avi Goldman <avrahamymgoldman@gmail.com> | 2017-01-05 15:52:28 -0500 |
---|---|---|
committer | Avi Goldman <avrahamymgoldman@gmail.com> | 2017-01-05 15:52:28 -0500 |
commit | 1abdc8bde168614ce055f9709de5dc788a7a46b9 (patch) | |
tree | 590ea1a6299fba349d0b720c0ac9f9309a7121dd | |
parent | 23448f01c8f3f2ebff2099cfe4f85040ffbe8c7c (diff) | |
download | php-sparkpost-1abdc8bde168614ce055f9709de5dc788a7a46b9.zip php-sparkpost-1abdc8bde168614ce055f9709de5dc788a7a46b9.tar.gz php-sparkpost-1abdc8bde168614ce055f9709de5dc788a7a46b9.tar.bz2 |
refactored tests
-rw-r--r-- | test/unit/SparkPostTest.php | 173 |
1 files changed, 79 insertions, 94 deletions
diff --git a/test/unit/SparkPostTest.php b/test/unit/SparkPostTest.php index d14108e..cb139f6 100644 --- a/test/unit/SparkPostTest.php +++ b/test/unit/SparkPostTest.php @@ -19,6 +19,14 @@ class SparkPostTest extends \PHPUnit_Framework_TestCase /** @var SparkPost */ private $resource; + private $exceptionMock; + private $exceptionBody; + + private $responseMock; + private $responseBody; + + private $promiseMock; + private $postTransmissionPayload = [ 'content' => [ 'from' => ['name' => 'Sparkpost Team', 'email' => 'postmaster@sendmailfor.me'], @@ -44,8 +52,30 @@ class SparkPostTest extends \PHPUnit_Framework_TestCase */ public function setUp() { + // response mock up + $responseBodyMock = Mockery::mock(); + $this->responseBody = ['results' => 'yay']; + $this->responseMock = Mockery::mock('Psr\Http\Message\ResponseInterface'); + $this->responseMock->shouldReceive('getStatusCode')->andReturn(200); + $this->responseMock->shouldReceive('getBody')->andReturn($responseBodyMock); + $responseBodyMock->shouldReceive('__toString')->andReturn(json_encode($this->responseBody)); + + // exception mock up + $exceptionResponseMock = Mockery::mock(); + $this->exceptionBody = ['results' => 'failed']; + $this->exceptionMock = Mockery::mock('Http\Client\Exception\HttpException'); + $this->exceptionMock->shouldReceive('getResponse')->andReturn($exceptionResponseMock); + $exceptionResponseMock->shouldReceive('getStatusCode')->andReturn(500); + $exceptionResponseMock->shouldReceive('getBody->__toString')->andReturn(json_encode($this->exceptionBody)); + + // promise mock up + $this->promiseMock = Mockery::mock('Http\Promise\Promise'); + //setup mock for the adapter $this->clientMock = Mockery::mock('Http\Adapter\Guzzle6\Client'); + $this->clientMock->shouldReceive('sendAsyncRequest')-> + with(Mockery::type('GuzzleHttp\Psr7\Request'))-> + andReturn($this->promiseMock); $this->resource = new SparkPost($this->clientMock, ['key' => 'SPARKPOST_API_KEY']); } @@ -55,187 +85,142 @@ class SparkPostTest extends \PHPUnit_Framework_TestCase Mockery::close(); } - public function testRequest() + public function testRequestSync() { - $responseMock = Mockery::mock('Psr\Http\Message\ResponseInterface'); $this->resource->setOptions(['async' => false]); - $this->clientMock->shouldReceive('sendRequest')->andReturn($responseMock); + $this->clientMock->shouldReceive('sendRequest')->andReturn($this->responseMock); + $this->assertInstanceOf('SparkPost\SparkPostResponse', $this->resource->request('POST', 'transmissions', $this->postTransmissionPayload)); + } + public function testRequestAsync() + { $promiseMock = Mockery::mock('Http\Promise\Promise'); $this->resource->setOptions(['async' => true]); $this->clientMock->shouldReceive('sendAsyncRequest')->andReturn($promiseMock); + $this->assertInstanceOf('SparkPost\SparkPostPromise', $this->resource->request('GET', 'transmissions', $this->getTransmissionPayload)); } public function testDebugOptionWhenFalse() { - $responseMock = Mockery::mock('Psr\Http\Message\ResponseInterface'); $this->resource->setOptions(['async' => false, 'debug' => false]); - $this->clientMock->shouldReceive('sendRequest')->andReturn($responseMock); + $this->clientMock->shouldReceive('sendRequest')->andReturn($this->responseMock); + $response = $this->resource->request('POST', 'transmissions', $this->postTransmissionPayload); + $this->assertEquals($response->getRequest(), null); } public function testDebugOptionWhenTrue() { - $responseMock = Mockery::mock('Psr\Http\Message\ResponseInterface'); + // setup $this->resource->setOptions(['async' => false, 'debug' => true]); - $this->clientMock->shouldReceive('sendRequest')->andReturn($responseMock); + + // successful + $this->clientMock->shouldReceive('sendRequest')->once()->andReturn($this->responseMock); $response = $this->resource->request('POST', 'transmissions', $this->postTransmissionPayload); $this->assertEquals(json_decode($response->getRequest()['body'], true), $this->postTransmissionPayload); + + // unsuccessful + $this->clientMock->shouldReceive('sendRequest')->once()->andThrow($this->exceptionMock); + + try { + $response = $this->resource->request('POST', 'transmissions', $this->postTransmissionPayload); + } + catch (\Exception $e) { + $this->assertEquals(json_decode($e->getRequest()['body'], true), $this->postTransmissionPayload); + } } public function testSuccessfulSyncRequest() { - $responseMock = Mockery::mock('Psr\Http\Message\ResponseInterface'); - $responseBodyMock = Mockery::mock(); - - $responseBody = ['results' => 'yay']; - $this->clientMock->shouldReceive('sendRequest')-> once()-> with(Mockery::type('GuzzleHttp\Psr7\Request'))-> - andReturn($responseMock); - - $responseMock->shouldReceive('getStatusCode')->andReturn(200); - $responseMock->shouldReceive('getBody')->andReturn($responseBodyMock); - $responseBodyMock->shouldReceive('__toString')->andReturn(json_encode($responseBody)); + andReturn($this->responseMock); $response = $this->resource->syncRequest('POST', 'transmissions', $this->postTransmissionPayload); - $this->assertEquals($responseBody, $response->getBody()); + $this->assertEquals($this->responseBody, $response->getBody()); $this->assertEquals(200, $response->getStatusCode()); } public function testUnsuccessfulSyncRequest() { - $exceptionMock = Mockery::mock('Http\Client\Exception\HttpException'); - - $responseBody = ['results' => 'failed']; - $this->clientMock->shouldReceive('sendRequest')-> once()-> with(Mockery::type('GuzzleHttp\Psr7\Request'))-> - andThrow($exceptionMock); - - $exceptionMock->shouldReceive('getResponse->getStatusCode')->andReturn(500); - $exceptionMock->shouldReceive('getResponse->getBody->__toString')->andReturn(json_encode($responseBody)); + andThrow($this->exceptionMock); try { $this->resource->syncRequest('POST', 'transmissions', $this->postTransmissionPayload); } catch (\Exception $e) { - $this->assertEquals($responseBody, $e->getBody()); + $this->assertEquals($this->exceptionBody, $e->getBody()); $this->assertEquals(500, $e->getCode()); } } public function testSuccessfulAsyncRequestWithWait() { - $promiseMock = Mockery::mock('Http\Promise\Promise'); - $responseMock = Mockery::mock('Psr\Http\Message\ResponseInterface'); - $responseBodyMock = Mockery::mock(); - - $responseBody = ['results' => 'yay']; - - $this->clientMock->shouldReceive('sendAsyncRequest')-> - once()-> - with(Mockery::type('GuzzleHttp\Psr7\Request'))-> - andReturn($promiseMock); - - $promiseMock->shouldReceive('wait')->andReturn($responseMock); - - $responseMock->shouldReceive('getStatusCode')->andReturn(200); - $responseMock->shouldReceive('getBody')->andReturn($responseBodyMock); - $responseBodyMock->shouldReceive('__toString')->andReturn(json_encode($responseBody)); + $this->promiseMock->shouldReceive('wait')->andReturn($this->responseMock); $promise = $this->resource->asyncRequest('POST', 'transmissions', $this->postTransmissionPayload); - $response = $promise->wait(); - $this->assertEquals($responseBody, $response->getBody()); + $this->assertEquals($this->responseBody, $response->getBody()); $this->assertEquals(200, $response->getStatusCode()); } public function testUnsuccessfulAsyncRequestWithWait() { - $promiseMock = Mockery::mock('Http\Promise\Promise'); - $exceptionMock = Mockery::mock('Http\Client\Exception\HttpException'); - - $responseBody = ['results' => 'failed']; - - $this->clientMock->shouldReceive('sendAsyncRequest')-> - once()-> - with(Mockery::type('GuzzleHttp\Psr7\Request'))-> - andReturn($promiseMock); - - $promiseMock->shouldReceive('wait')->andThrow($exceptionMock); - - $exceptionMock->shouldReceive('getResponse->getStatusCode')->andReturn(500); - $exceptionMock->shouldReceive('getResponse->getBody->__toString')->andReturn(json_encode($responseBody)); + $this->promiseMock->shouldReceive('wait')->andThrow($this->exceptionMock); $promise = $this->resource->asyncRequest('POST', 'transmissions', $this->postTransmissionPayload); try { $response = $promise->wait(); } catch (\Exception $e) { - $this->assertEquals($responseBody, $e->getBody()); + $this->assertEquals($this->exceptionBody, $e->getBody()); $this->assertEquals(500, $e->getCode()); } } public function testSuccessfulAsyncRequestWithThen() { - $responseBody = ['results' => 'yay']; - $responseMock = Mockery::mock('Psr\Http\Message\ResponseInterface'); - $responseBodyMock = Mockery::mock(); - $responseMock->shouldReceive('getStatusCode')->andReturn(200); - $responseMock->shouldReceive('getBody')->andReturn($responseBodyMock); - $responseBodyMock->shouldReceive('__toString')->andReturn(json_encode($responseBody)); + $guzzlePromise = new GuzzleFulfilledPromise($this->responseMock); + $result = $this->resource->buildRequest('POST', 'transmissions', $this->postTransmissionPayload, []); - $guzzlePromise = new GuzzleFulfilledPromise($responseMock); + $promise = new SparkPostPromise(new GuzzleAdapterPromise($guzzlePromise, $result)); - $promise = new SparkPostPromise(new GuzzleAdapterPromise($guzzlePromise, $this->resource->buildRequest('POST', 'transmissions', $this->postTransmissionPayload, []))); - - $promise->then(function ($exception) use ($responseBody) { - $this->assertEquals(200, $exception->getStatusCode()); - $this->assertEquals($responseBody, $exception->getBody()); + $responseBody = $this->responseBody; + $promise->then(function ($response) use ($responseBody) { + $this->assertEquals(200, $response->getStatusCode()); + $this->assertEquals($responseBody, $response->getBody()); }, null)->wait(); } public function testUnsuccessfulAsyncRequestWithThen() { - $responseBody = ['results' => 'failed']; - $exceptionMock = Mockery::mock('Http\Client\Exception\HttpException'); - $exceptionMock->shouldReceive('getResponse->getStatusCode')->andReturn(500); - $exceptionMock->shouldReceive('getResponse->getBody->__toString')->andReturn(json_encode($responseBody)); - - $guzzlePromise = new GuzzleRejectedPromise($exceptionMock); - - $request = $this->resource->buildRequest('POST', 'transmissions', $this->postTransmissionPayload, []); + $guzzlePromise = new GuzzleRejectedPromise($this->exceptionMock); + $result = $this->resource->buildRequest('POST', 'transmissions', $this->postTransmissionPayload, []); - $promise = new SparkPostPromise(new GuzzleAdapterPromise($guzzlePromise, $request)); + $promise = new SparkPostPromise(new GuzzleAdapterPromise($guzzlePromise, $result)); - $promise->then(null, function ($exception) use ($responseBody) { + $exceptionBody = $this->exceptionBody; + $promise->then(null, function ($exception) use ($exceptionBody) { $this->assertEquals(500, $exception->getCode()); - $this->assertEquals($responseBody, $exception->getBody()); + $this->assertEquals($exceptionBody, $exception->getBody()); })->wait(); } public function testPromise() { - $promiseMock = Mockery::mock('Http\Promise\Promise'); - - $this->clientMock->shouldReceive('sendAsyncRequest')-> - once()-> - with(Mockery::type('GuzzleHttp\Psr7\Request'))-> - andReturn($promiseMock); - $promise = $this->resource->asyncRequest('POST', 'transmissions', $this->postTransmissionPayload); - $promiseMock->shouldReceive('getState')->twice()->andReturn('pending'); - $this->assertEquals($promiseMock->getState(), $promise->getState()); + $this->promiseMock->shouldReceive('getState')->twice()->andReturn('pending'); + $this->assertEquals($this->promiseMock->getState(), $promise->getState()); - $promiseMock->shouldReceive('getState')->once()->andReturn('rejected'); - $this->assertEquals('rejected', $promise->getState()); + $this->promiseMock->shouldReceive('getState')->twice()->andReturn('rejected'); + $this->assertEquals($this->promiseMock->getState(), $promise->getState()); } /** |