woocommerce/plugins/woocommerce-blocks/tests/php/Verticals/ClientTest.php

180 lines
6.1 KiB
PHP

<?php
/**
* Unit tests for the Verticals API client.
*
* @package WooCommerce\Verticals\Tests
*/
namespace Automattic\WooCommerce\Blocks\Tests\Verticals;
use Automattic\WooCommerce\Blocks\Verticals\Client;
use \WP_UnitTestCase;
/**
* Class Client_Test.
*/
class ClientTest extends WP_UnitTestCase {
/**
* The client instance.
*
* @var Client $client
*/
private $client;
/**
* Initialize the client instance.
*
* @return void
*/
protected function setUp(): void {
parent::setUp();
$this->client = new Client();
}
/**
* Test get_verticals returns an error when the request fails.
*/
public function test_get_verticals_returns_an_error_when_the_request_fails() {
add_filter( 'pre_http_request', array( $this, 'return_wp_error' ), 10, 3 );
$response = $this->client->get_verticals();
$this->assertInstanceOf( 'WP_Error', $response );
$error_data = $response->get_error_data();
$this->assertEquals( 'error', $error_data['code'] );
$this->assertEquals( 'Request failed.', $error_data['message'] );
remove_filter( 'pre_http_request', array( $this, 'return_wp_error' ) );
}
/**
* Test get_verticals returns an error when the request is unsuccessful.
*/
public function test_get_verticals_returns_an_error_when_the_request_is_unsuccessful() {
add_filter( 'pre_http_request', array( $this, 'return_request_failed' ), 10, 3 );
$response = $this->client->get_verticals();
$this->assertInstanceOf( 'WP_Error', $response );
$error_data = $response->get_error_data();
$this->assertEquals( 500, $error_data['status'] );
$this->assertEquals( 'rest_error', $error_data['code'] );
$this->assertEquals( 'The request failed.', $error_data['message'] );
remove_filter( 'pre_http_request', array( $this, 'return_request_failed' ) );
}
/**
* Test get_verticals returns an array of verticals.
*/
public function test_get_verticals_returns_only_verticals_with_images() {
add_filter( 'pre_http_request', array( $this, 'return_verticals' ), 10, 3 );
$verticals = $this->client->get_verticals();
$this->assertIsArray( $verticals );
foreach ( $verticals as $vertical ) {
$this->assertTrue( $vertical['has_vertical_images'] );
}
remove_filter( 'pre_http_request', array( $this, 'return_verticals' ) );
}
/**
* Test get_vertical_images returns an error when the request fails.
*/
public function test_get_vertical_images_returns_an_error_when_the_request_fails() {
add_filter( 'pre_http_request', array( $this, 'return_wp_error' ), 10, 3 );
$response = $this->client->get_vertical_images( 1 );
$this->assertInstanceOf( 'WP_Error', $response );
$error_data = $response->get_error_data();
$this->assertEquals( 'error', $error_data['code'] );
$this->assertEquals( 'Request failed.', $error_data['message'] );
remove_filter( 'pre_http_request', array( $this, 'return_wp_error' ) );
}
/**
* Test get_vertical_images returns an error when the request is unsuccessful.
*/
public function test_get_vertical_images_returns_an_error_when_the_request_is_unsuccessful() {
add_filter( 'pre_http_request', array( $this, 'return_request_failed' ), 10, 3 );
$response = $this->client->get_vertical_images( 1 );
$this->assertInstanceOf( 'WP_Error', $response );
$error_data = $response->get_error_data();
$this->assertEquals( 500, $error_data['status'] );
$this->assertEquals( 'rest_error', $error_data['code'] );
$this->assertEquals( 'The request failed.', $error_data['message'] );
remove_filter( 'pre_http_request', array( $this, 'return_request_failed' ) );
}
/**
* Test get_vertical_images returns an array of images.
*/
public function test_get_vertical_images_returns_an_array_of_images() {
add_filter( 'pre_http_request', array( $this, 'return_vertical_images' ), 10, 3 );
$images = $this->client->get_vertical_images( 1 );
$this->assertIsArray( $images );
$this->assertCount( 2, $images );
remove_filter( 'pre_http_request', array( $this, 'return_vertical_images' ) );
}
/**
* Returns a failed request.
*/
public function return_request_failed() {
return array(
'body' => '{"code":"rest_error","message":"The request failed.","data":{"status":500}}',
'response' => array(
'code' => 500,
),
);
}
/**
* Returns a WP_Error.
*/
public function return_wp_error() {
return new \WP_Error( 'error', 'Request failed.' );
}
/**
* Returns a list of verticals.
*/
public function return_verticals() {
return array(
'body' => '[
{"id": "3","parent_id": "0","root_id": "3","name": "Arts & Entertainment","title": "Arts & Entertainment","has_vertical_images": true},
{"id": "184","parent_id": "3","root_id": "3","name": "Celebrities & Entertainment News","title": "Celebrities & Entertainment News","has_vertical_images": false},
{"id": "316","parent_id": "3","root_id": "3","name": "Comics & Animation","title": "Comics & Animation","has_vertical_images": true},
{"id": "317","parent_id": "316","root_id": "3","name": "Anime & Manga","title": "Anime & Manga","has_vertical_images": false}
]',
'response' => array(
'code' => 200,
),
);
}
/**
* Returns a list of images.
*/
public function return_vertical_images() {
return array(
'body' => '[
{"ID": 3536,"guid": "http://wpcomverticals.files.wordpress.com/2022/05/kyle-head-p6rntdapbuk-unsplash.jpg","post_title": "kyle-head-p6rNTdAPbuk-unsplash","post_excerpt": "","post_content": "","alt": "","width": 5096,"height": 3397,"size": "1.19 MB","filename": "kyle-head-p6rntdapbuk-unsplash.jpg","extension": "jpg","meta": {"vertical_id": "3","pexels_object": "","tag_names": [],"source_url": "","photographer": ""}},
{"ID": 3535,"guid": "http://wpcomverticals.files.wordpress.com/2022/05/nadim-merrikh-mbcwo39jvsi-unsplash.jpg","post_title": "nadim-merrikh-MBCWO39JVsI-unsplash","post_excerpt": "","post_content": "","alt": "","width": 6000,"height": 4000,"size": "1.36 MB","filename": "nadim-merrikh-mbcwo39jvsi-unsplash.jpg","extension": "jpg","meta": {"vertical_id": "3","pexels_object": "","tag_names": [],"source_url": "","photographer": ""}}
]',
'response' => array(
'code' => 200,
),
);
}
}