Skip to content

Commit

Permalink
Update Search images request:
Browse files Browse the repository at this point in the history
- add deserializeResponse()
  • Loading branch information
webeweb committed Feb 5, 2023
1 parent 0af23a6 commit d916a52
Show file tree
Hide file tree
Showing 3 changed files with 175 additions and 96 deletions.
9 changes: 9 additions & 0 deletions src/Request/SearchImagesRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@

use InvalidArgumentException;
use WBW\Library\Pixabay\Api\SearchImagesRequestInterface;
use WBW\Library\Pixabay\Response\AbstractResponse;
use WBW\Library\Pixabay\Serializer\RequestSerializer;
use WBW\Library\Pixabay\Serializer\ResponseDeserializer;

/**
* Search images request.
Expand Down Expand Up @@ -77,6 +79,13 @@ public function addColor(string $color): SearchImagesRequest {
return $this;
}

/**
* {@inheritdoc}
*/
public function deserializeResponse(string $rawResponse): AbstractResponse {
return ResponseDeserializer::deserializeSearchImagesResponse($rawResponse);
}

/**
* Enumerate category.
*
Expand Down
262 changes: 166 additions & 96 deletions tests/Request/SearchImagesRequestTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
use InvalidArgumentException;
use Throwable;
use WBW\Library\Pixabay\Api\RequestInterface;
use WBW\Library\Pixabay\Api\SearchImagesRequestInterface;
use WBW\Library\Pixabay\Request\SearchImagesRequest;
use WBW\Library\Pixabay\Response\SearchImagesResponse;
use WBW\Library\Pixabay\Tests\AbstractTestCase;

/**
Expand All @@ -26,52 +26,6 @@
*/
class SearchImagesRequestTest extends AbstractTestCase {

/**
* Tests serializeRequest()
*
* @return void
*/
public function testSerializeRequest(): void {

$obj = new SearchImagesRequest();
$obj->setCategory("category");
$obj->setEditorsChoice(true);
$obj->setId(1234);
$obj->setLang("fr");
$obj->setMinHeight(720);
$obj->setMinWidth(1280);
$obj->setOrder(RequestInterface::ORDER_LATEST);
$obj->setPage(2);
$obj->setPerPage(15);
$obj->setPretty(true);
$obj->setQ("github");
$obj->setSafeSearch(true);

$obj->addColor(RequestInterface::COLOR_BLACK);
$obj->setImageType(RequestInterface::IMAGE_TYPE_PHOTO);
$obj->setOrientation(RequestInterface::ORIENTATION_HORIZONTAL);

$res = $obj->serializeRequest();
$this->assertCount(15, $res);

$this->assertEquals("category", $res["category"]);
$this->assertEquals("true", $res["editors_choice"]);
$this->assertEquals(1234, $res["id"]);
$this->assertEquals("fr", $res["lang"]);
$this->assertEquals(720, $res["min_height"]);
$this->assertEquals(1280, $res["min_width"]);
$this->assertEquals(RequestInterface::ORDER_LATEST, $res["order"]);
$this->assertEquals(2, $res["page"]);
$this->assertEquals(15, $res["per_page"]);
$this->assertEquals("true", $res["pretty"]);
$this->assertEquals("github", $res["q"]);
$this->assertEquals("true", $res["safesearch"]);

$this->assertEquals(RequestInterface::COLOR_BLACK, $res["colors"]);
$this->assertEquals(RequestInterface::IMAGE_TYPE_PHOTO, $res["image_type"]);
$this->assertEquals(RequestInterface::ORIENTATION_HORIZONTAL, $res["orientation"]);
}

/**
* Tests addColor()
*
Expand Down Expand Up @@ -105,6 +59,76 @@ public function testAddColorWithInvalidArgumentException(): void {
}
}

/**
* Tests deserializeResponse()
*
* @return void
*/
public function testDeserializeResponse(): void {

// Set a raw response mock.
$rawResponse = file_get_contents(__DIR__ . "/SearchImagesRequestTest.testDeserializeResponse.json");

$obj = new SearchImagesRequest();

$res = $obj->deserializeResponse($rawResponse);
$this->assertInstanceOf(SearchImagesResponse::class, $res);

$this->assertEquals($rawResponse, $res->getRawResponse());
$this->assertEquals(4692, $res->getTotal());
$this->assertEquals(500, $res->getTotalHits());

$this->assertCount(1, $res->getImageHits());

$this->assertNotNull($res->getImageHits()[0]->getRawData());
$this->assertEquals(195893, $res->getImageHits()[0]->getId());
$this->assertEquals("https://pixabay.com/en/blossom-bloom-flower-195893/", $res->getImageHits()[0]->getPageURL());
$this->assertEquals("photo", $res->getImageHits()[0]->getType());
$this->assertEquals("blossom, bloom, flower", $res->getImageHits()[0]->getTags());
$this->assErtEquals("https://cdn.pixabay.com/photo/2013/10/15/09/12/flower-195893_150.jpg", $res->getImageHits()[0]->getPreviewUrl());
$this->assertEquals(150, $res->getImageHits()[0]->getPreviewWidth());
$this->assertEquals(84, $res->getImageHits()[0]->getPreviewHeight());
$this->assertEquals("https://pixabay.com/get/35bbf209e13e39d2_640.jpg", $res->getImageHits()[0]->getWebFormatUrl());
$this->assertEquals(640, $res->getImageHits()[0]->getWebformatWidth());
$this->assertEquals(360, $res->getImageHits()[0]->getWebformatHeight());
$this->assertEquals("https://pixabay.com/get/ed6a99fd0a76647_1280.jpg", $res->getImageHits()[0]->getLargeImageUrl());
$this->assertEquals("https://pixabay.com/get/ed6a9369fd0a76647_1920.jpg", $res->getImageHits()[0]->getFullHdUrl());
$this->assertequals("https://pixabay.com/get/ed6a9364a9fd0a76647.jpg", $res->getImageHits()[0]->getImageUrl());
$this->assertEquals(4000, $res->getImageHits()[0]->getImageWidth());
$this->assertEquals(2250, $res->getImageHits()[0]->getImageHeight());
$this->assertEquals(4731420, $res->getImageHits()[0]->getImageSize());
$this->assertEquals(7671, $res->getImageHits()[0]->getViews());
$this->assertEquals(6439, $res->getImageHits()[0]->getDownloads());
$this->assertEquals(1, $res->getImageHits()[0]->getFavorites());
$this->assertEquals(5, $res->getImageHits()[0]->getLikes());
$this->assertEquals(2, $res->getImageHits()[0]->getComments());
$this->assertEquals(48777, $res->getImageHits()[0]->getUserId());
$this->assertEquals("Josch13", $res->getImageHits()[0]->getUser());
$this->assertEquals("https://cdn.pixabay.com/user/2013/11/05/02-10-23-764_250x250.jpg", $res->getImageHits()[0]->getUserImageURL());
}

/**
* Tests deserializeResponse()
*
* @return void
*/
public function testDeserializeResponseWithBadRawResponse(): void {

// Set a raw response mock.
$rawResponse = "";

$obj = new SearchImagesRequest();

$res = $obj->deserializeResponse($rawResponse);
$this->assertInstanceOf(SearchImagesResponse::class, $res);

$this->assertEquals($rawResponse, $res->getRawResponse());
$this->assertNull($res->getTotal());
$this->assertNull($res->getTotalHits());

$this->assertCount(0, $res->getImageHits());
}

/**
* Tests enumCategory().
*
Expand All @@ -113,26 +137,26 @@ public function testAddColorWithInvalidArgumentException(): void {
public function testEnumCategory(): void {

$res = [
SearchImagesRequestInterface::CATEGORY_ANIMALS,
SearchImagesRequestInterface::CATEGORY_BACKGROUNDS,
SearchImagesRequestInterface::CATEGORY_BUILDINGS,
SearchImagesRequestInterface::CATEGORY_BUSINESS,
SearchImagesRequestInterface::CATEGORY_COMPUTER,
SearchImagesRequestInterface::CATEGORY_EDUCATION,
SearchImagesRequestInterface::CATEGORY_FASHION,
SearchImagesRequestInterface::CATEGORY_FEELINGS,
SearchImagesRequestInterface::CATEGORY_FOOD,
SearchImagesRequestInterface::CATEGORY_HEALTH,
SearchImagesRequestInterface::CATEGORY_INDUSTRY,
SearchImagesRequestInterface::CATEGORY_MUSIC,
SearchImagesRequestInterface::CATEGORY_NATURE,
SearchImagesRequestInterface::CATEGORY_PEOPLE,
SearchImagesRequestInterface::CATEGORY_PLACES,
SearchImagesRequestInterface::CATEGORY_RELIGION,
SearchImagesRequestInterface::CATEGORY_SCIENCE,
SearchImagesRequestInterface::CATEGORY_SPORTS,
SearchImagesRequestInterface::CATEGORY_TRANSPORTATION,
SearchImagesRequestInterface::CATEGORY_TRAVEL,
RequestInterface::CATEGORY_ANIMALS,
RequestInterface::CATEGORY_BACKGROUNDS,
RequestInterface::CATEGORY_BUILDINGS,
RequestInterface::CATEGORY_BUSINESS,
RequestInterface::CATEGORY_COMPUTER,
RequestInterface::CATEGORY_EDUCATION,
RequestInterface::CATEGORY_FASHION,
RequestInterface::CATEGORY_FEELINGS,
RequestInterface::CATEGORY_FOOD,
RequestInterface::CATEGORY_HEALTH,
RequestInterface::CATEGORY_INDUSTRY,
RequestInterface::CATEGORY_MUSIC,
RequestInterface::CATEGORY_NATURE,
RequestInterface::CATEGORY_PEOPLE,
RequestInterface::CATEGORY_PLACES,
RequestInterface::CATEGORY_RELIGION,
RequestInterface::CATEGORY_SCIENCE,
RequestInterface::CATEGORY_SPORTS,
RequestInterface::CATEGORY_TRANSPORTATION,
RequestInterface::CATEGORY_TRAVEL,
];

$this->assertEquals($res, SearchImagesRequest::enumCategory());
Expand All @@ -146,20 +170,20 @@ public function testEnumCategory(): void {
public function testEnumColor(): void {

$res = [
SearchImagesRequestInterface::COLOR_BLACK,
SearchImagesRequestInterface::COLOR_BLUE,
SearchImagesRequestInterface::COLOR_BROWN,
SearchImagesRequestInterface::COLOR_GRAY,
SearchImagesRequestInterface::COLOR_GRAYSCALE,
SearchImagesRequestInterface::COLOR_GREEN,
SearchImagesRequestInterface::COLOR_LILAC,
SearchImagesRequestInterface::COLOR_ORANGE,
SearchImagesRequestInterface::COLOR_PINK,
SearchImagesRequestInterface::COLOR_RED,
SearchImagesRequestInterface::COLOR_TRANSPARENT,
SearchImagesRequestInterface::COLOR_TURQUOISE,
SearchImagesRequestInterface::COLOR_YELLOW,
SearchImagesRequestInterface::COLOR_WHITE,
RequestInterface::COLOR_BLACK,
RequestInterface::COLOR_BLUE,
RequestInterface::COLOR_BROWN,
RequestInterface::COLOR_GRAY,
RequestInterface::COLOR_GRAYSCALE,
RequestInterface::COLOR_GREEN,
RequestInterface::COLOR_LILAC,
RequestInterface::COLOR_ORANGE,
RequestInterface::COLOR_PINK,
RequestInterface::COLOR_RED,
RequestInterface::COLOR_TRANSPARENT,
RequestInterface::COLOR_TURQUOISE,
RequestInterface::COLOR_YELLOW,
RequestInterface::COLOR_WHITE,
];

$this->assertEquals($res, SearchImagesRequest::enumColor());
Expand All @@ -173,10 +197,10 @@ public function testEnumColor(): void {
public function testEnumImageType(): void {

$res = [
SearchImagesRequestInterface::IMAGE_TYPE_ALL,
SearchImagesRequestInterface::IMAGE_TYPE_ILLUSTRATION,
SearchImagesRequestInterface::IMAGE_TYPE_PHOTO,
SearchImagesRequestInterface::IMAGE_TYPE_VECTOR,
RequestInterface::IMAGE_TYPE_ALL,
RequestInterface::IMAGE_TYPE_ILLUSTRATION,
RequestInterface::IMAGE_TYPE_PHOTO,
RequestInterface::IMAGE_TYPE_VECTOR,
];

$this->assertEquals($res, SearchImagesRequest::enumImageType());
Expand All @@ -190,9 +214,9 @@ public function testEnumImageType(): void {
public function testEnumOrientation(): void {

$res = [
SearchImagesRequestInterface::ORIENTATION_ALL,
SearchImagesRequestInterface::ORIENTATION_HORIZONTAL,
SearchImagesRequestInterface::ORIENTATION_VERTICAL,
RequestInterface::ORIENTATION_ALL,
RequestInterface::ORIENTATION_HORIZONTAL,
RequestInterface::ORIENTATION_VERTICAL,
];

$this->assertEquals($res, SearchImagesRequest::enumOrientation());
Expand All @@ -207,11 +231,57 @@ public function testRemoveColor(): void {

$obj = new SearchImagesRequest();

$obj->addColor(SearchImagesRequest::COLOR_BLACK);
$obj->removeColor(SearchImagesRequest::COLOR_BLACK);
$obj->addColor(RequestInterface::COLOR_BLACK);
$obj->removeColor(RequestInterface::COLOR_BLACK);
$this->assertCount(0, $obj->getColors());
}

/**
* Tests serializeRequest()
*
* @return void
*/
public function testSerializeRequest(): void {

$obj = new SearchImagesRequest();
$obj->setCategory("category");
$obj->setEditorsChoice(true);
$obj->setId(1234);
$obj->setLang("fr");
$obj->setMinHeight(720);
$obj->setMinWidth(1280);
$obj->setOrder(RequestInterface::ORDER_LATEST);
$obj->setPage(2);
$obj->setPerPage(15);
$obj->setPretty(true);
$obj->setQ("github");
$obj->setSafeSearch(true);

$obj->addColor(RequestInterface::COLOR_BLACK);
$obj->setImageType(RequestInterface::IMAGE_TYPE_PHOTO);
$obj->setOrientation(RequestInterface::ORIENTATION_HORIZONTAL);

$res = $obj->serializeRequest();
$this->assertCount(15, $res);

$this->assertEquals("category", $res["category"]);
$this->assertEquals("true", $res["editors_choice"]);
$this->assertEquals(1234, $res["id"]);
$this->assertEquals("fr", $res["lang"]);
$this->assertEquals(720, $res["min_height"]);
$this->assertEquals(1280, $res["min_width"]);
$this->assertEquals(RequestInterface::ORDER_LATEST, $res["order"]);
$this->assertEquals(2, $res["page"]);
$this->assertEquals(15, $res["per_page"]);
$this->assertEquals("true", $res["pretty"]);
$this->assertEquals("github", $res["q"]);
$this->assertEquals("true", $res["safesearch"]);

$this->assertEquals(RequestInterface::COLOR_BLACK, $res["colors"]);
$this->assertEquals(RequestInterface::IMAGE_TYPE_PHOTO, $res["image_type"]);
$this->assertEquals(RequestInterface::ORIENTATION_HORIZONTAL, $res["orientation"]);
}

/**
* Tests setImageType()
*
Expand All @@ -221,8 +291,8 @@ public function testSetImageType(): void {

$obj = new SearchImagesRequest();

$obj->setImageType(SearchImagesRequest::IMAGE_TYPE_PHOTO);
$this->assertEquals(SearchImagesRequest::IMAGE_TYPE_PHOTO, $obj->getImageType());
$obj->setImageType(RequestInterface::IMAGE_TYPE_PHOTO);
$this->assertEquals(RequestInterface::IMAGE_TYPE_PHOTO, $obj->getImageType());
}

/**
Expand Down Expand Up @@ -253,8 +323,8 @@ public function testSetOrientation(): void {

$obj = new SearchImagesRequest();

$obj->setOrientation(SearchImagesRequest::ORIENTATION_ALL);
$this->assertEquals(SearchImagesRequest::ORIENTATION_ALL, $obj->getOrientation());
$obj->setOrientation(RequestInterface::ORIENTATION_ALL);
$this->assertEquals(RequestInterface::ORIENTATION_ALL, $obj->getOrientation());
}

/**
Expand Down Expand Up @@ -288,8 +358,8 @@ public function test__construct(): void {
$obj = new SearchImagesRequest();

$this->assertCount(0, $obj->getColors());
$this->assertEquals(SearchImagesRequest::IMAGE_TYPE_ALL, $obj->getImageType());
$this->assertEquals(SearchImagesRequest::ORIENTATION_ALL, $obj->getOrientation());
$this->assertEquals(RequestInterface::IMAGE_TYPE_ALL, $obj->getImageType());
$this->assertEquals(RequestInterface::ORIENTATION_ALL, $obj->getOrientation());
$this->assertEquals(SearchImagesRequest::SEARCH_IMAGES_RESOURCE_PATH, $obj->getResourcePath());
}
}

0 comments on commit d916a52

Please sign in to comment.