Skip to content
This repository has been archived by the owner on Dec 30, 2020. It is now read-only.

Commit

Permalink
Merge pull request #251 from seregazhuk/develop
Browse files Browse the repository at this point in the history
add: Provider tests
  • Loading branch information
seregazhuk authored Mar 18, 2017
2 parents a50757a + ff805c1 commit 71ed185
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 13 deletions.
2 changes: 2 additions & 0 deletions src/Api/Providers/Core/Provider.php
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ protected function paginate($data, $resourceUrl, $limit = Pagination::DEFAULT_LI
}

/**
* Accepts callback which should return PaginatedResponse object.
*
* @param callable $callback
* @param int $limit
* @return Pagination
Expand Down
2 changes: 1 addition & 1 deletion src/Helpers/Pagination.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public function __construct($limit = self::DEFAULT_LIMIT)
}

/**
* Sets a callback to make requests. Should be a closure.
* Sets a callback to make requests. Callback should return PaginatedResponse object.
*
* @param callable $callback
* @return $this
Expand Down
2 changes: 1 addition & 1 deletion tests/Bot/PaginationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class PaginationTest extends PHPUnit_Framework_TestCase
public function it_returns_first_result_when_no_bookmarks()
{
$pagination = new Pagination();
$responseData = $this->createPaginatedResponse($this->paginatedResponse);
$responseData = $this->createSuccessApiResponse($this->paginatedResponse);

$pagination->paginateOver(function() use ($responseData){
return (new Response())->fill($responseData);
Expand Down
119 changes: 112 additions & 7 deletions tests/Bot/ProviderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@
use PHPUnit_Framework_TestCase;
use seregazhuk\PinterestBot\Api\Request;
use seregazhuk\PinterestBot\Api\Response;
use seregazhuk\tests\Helpers\ResponseHelper;
use seregazhuk\PinterestBot\Api\Providers\Core\Provider;

/**
* Class ProviderTest.
*/
class ProviderTest extends PHPUnit_Framework_TestCase
{
use ResponseHelper;

protected function tearDown()
{
Expand All @@ -31,18 +33,121 @@ public function it_returns_data_for_response()
$this->assertEquals($responseData, $provider->visitPage());
}

/** @test */
public function it_should_return_response_object_for_pagination()
{
$paginatedResponse = $this->createPaginatedResponse($this->paginatedResponse);

$request = $this->makeRequest($paginatedResponse, 2);
$request
->shouldReceive('exec')
->once()
->andReturn(json_encode([]));

/** @var DummyProvider $provider */
$provider = Mockery::mock(DummyProvider::class, [$request, new Response()])
->makePartial();

$provider->dummyPaginate(['test' => 'test'], 'http://example.com')->toArray();
}

/** @test */
public function it_should_clear_response_before_pagination()
{
$response = Mockery::mock(Response::class)
->shouldReceive('clear')
->once()
->getMock()
->makePartial();

/** @var DummyProvider $provider */
$provider = Mockery::mock(DummyProvider::class, [$this->makeRequest([]), $response])
->makePartial();

$provider->dummyPaginate(['test' => 'test'], 'http://example.com')->toArray();
}

/** @test */
public function it_should_return_response_object_if_required_for_get_request()
{
$provider = $this->makeProvider([]);

$this->assertInstanceOf(Response::class, $provider->dummyGet(true));
}

/** @test */
public function it_should_return_response_object_if_required_for_post_request()
{
$provider = $this->makeProvider([]);

$this->assertInstanceOf(Response::class, $provider->dummyPost(true));
}

/** @test */
public function it_should_return_bool_if_required_for_post_request()
{
$response = ['resource_response' => ['data' => 'value']];

$provider = $this->makeProvider($response);

$this->assertTrue($provider->dummyPost(false));
}

/**
* @param $response
* @return Mockery\Mock|Provider
* @param mixed $response
* @param int $times
* @return Mockery\Mock|Provider|DummyProvider
*/
protected function makeProvider($response)
protected function makeProvider($response, $times = 1)
{
$request = Mockery::mock(Request::class)
$request = $this->makeRequest($response, $times);

return Mockery::mock(DummyProvider::class, [$request, new Response()])
->makePartial();
}

/**
* @param mixed $response
* @param int $times
* @return Mockery\MockInterface
*/
protected function makeRequest($response, $times = 1)
{
return Mockery::mock(Request::class)
->shouldReceive('exec')
->times($times)
->andReturn(json_encode($response))
->getMock();

return Mockery::mock(Provider::class, [$request, new Response()])
->makePartial();
}
}

class DummyProvider extends Provider {

/**
* @param mixed $data
* @param string $resourceUrl
* @return \seregazhuk\PinterestBot\Helpers\Pagination
*/
public function dummyPaginate($data, $resourceUrl)
{
return $this->paginate($data, $resourceUrl);
}

/**
* @param bool $returnResponse
* @return array|bool|Response
*/
public function dummyGet($returnResponse)
{
return $this->get([], '', $returnResponse);
}

/**
* @param bool $returnResponse
* @return array|bool|Response
*/
public function dummyPost($returnResponse)
{
return $this->post([], '', $returnResponse);
}
}
10 changes: 6 additions & 4 deletions tests/Helpers/ResponseHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

namespace seregazhuk\tests\Helpers;

use seregazhuk\PinterestBot\Helpers\Pagination;

/**
* Class ResponseHelper.
*
Expand Down Expand Up @@ -34,11 +32,12 @@ public function createApiResponse($data = [])
/**
* Create a success dummy response.
*
* @param mixed $data
* @return array
*/
public function createSuccessApiResponse()
public function createSuccessApiResponse($data = 'success')
{
return $this->createApiResponse(['data' => 'success']);
return $this->createApiResponse(['data' => $data]);
}

/**
Expand Down Expand Up @@ -70,6 +69,9 @@ public function createPaginatedResponse($response)
'resource_response' => [
'data' => $response,
],
'resource' => [
'options' => ['bookmarks' => 'my_bookrmarks']
]
];
}
}

0 comments on commit 71ed185

Please sign in to comment.