feat(service): add post api

This commit is contained in:
2024-07-29 20:41:57 +02:00
parent 5029dfcc37
commit 07d7a3025a
3 changed files with 113 additions and 2 deletions

View File

@@ -4,7 +4,92 @@ declare(strict_types=1);
namespace App\Tests\Unit\Service\Remote;
class BlogApiPostsTest
{
use App\Entity\Remote\Brilo\Posts\Post;
use App\Entity\Remote\Brilo\Users\User;
use App\Service\Remote\BriloApiPosts;
use App\Service\Remote\BriloApiUsers;
use App\Service\Remote\BriloRemoteApiException;
use App\Tests\Common\LoggerTrait;
use PHPUnit\Framework\TestCase;
use Symfony\Component\HttpClient\MockHttpClient;
use Symfony\Component\HttpClient\Response\JsonMockResponse;
use Symfony\Component\Serializer\SerializerInterface;
class BlogApiPostsTest extends TestCase
{
use LoggerTrait;
private const array API_POSTS_LIST = [
[
"userId" => 1,
"id" => 1,
"title" => "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body" => "quia et suscipit
suscipit recusandae consequuntur expedita et cum
reprehenderit molestiae ut ut quas totam
nostrum rerum est autem sunt rem eveniet architecto"
],
[
"userId" => 1,
"id" => 2,
"title" => "qui est esse",
"body" => "est rerum tempore vitae
sequi sint nihil reprehenderit dolor beatae ea dolores neque
fugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis
qui aperiam non debitis possimus qui neque nisi nulla"
]
];
public function testUserListSuccess(): void
{
$testUserList = $this->buildTestPostList();
$serializer = $this->createMock(SerializerInterface::class);
$serializer
->expects($this->once())
->method('deserialize')
->with(
json_encode(self::API_POSTS_LIST),
Post::class . '[]',
'json'
)->willReturn($testUserList);
$response = new JsonMockResponse(self::API_POSTS_LIST);
$mockedClient = new MockHttpClient($response);
$briloApiPosts = new BriloApiPosts($mockedClient, $this->getLogger(), $serializer);
$this->assertEquals($testUserList, $briloApiPosts->getPosts());
}
public function testInvalidHttpCodeReturned(): void
{
$serializer = $this->createMock(SerializerInterface::class);
$serializer
->expects($this->never())
->method('deserialize');
$response = new JsonMockResponse(self::API_POSTS_LIST, [
'http_code' => 401,
]);
$mockedClient = new MockHttpClient(function () use ($response) {
return $response;
});
$this->expectException(BriloRemoteApiException::class);
$briloApiPosts = new BriloApiPosts($mockedClient, $this->getLogger(), $serializer);
$briloApiPosts->getPosts();
}
/**
* @return Post[]
*/
public function buildTestPostList(): array
{
// Convert self::API_POSTS_LIST to Post[] and return it
return array_map(function ($postData) {
return new Post(
$postData['userId'],
$postData['id'],
$postData['title'],
$postData['body']
);
}, self::API_POSTS_LIST);
}
}