118 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Magento\Search\Api;
 | 
						|
 | 
						|
use Magento\Catalog\Api\Data\ProductInterface;
 | 
						|
use Magento\Catalog\Api\ProductRepositoryInterface;
 | 
						|
use Magento\Framework\Webapi\Rest\Request;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use Magento\TestFramework\TestCase\WebapiAbstract;
 | 
						|
 | 
						|
class SearchTest extends WebapiAbstract
 | 
						|
{
 | 
						|
    const SERVICE_VERSION = 'V1';
 | 
						|
    const SERVICE_NAME = 'searchV1';
 | 
						|
    const RESOURCE_PATH = '/V1/search/';
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var ProductInterface
 | 
						|
     */
 | 
						|
    private $product;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritDoc
 | 
						|
     */
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $productSku = 'simple';
 | 
						|
 | 
						|
        $objectManager = Bootstrap::getObjectManager();
 | 
						|
        $productRepository = $objectManager->get(ProductRepositoryInterface::class);
 | 
						|
        $this->product = $productRepository->get($productSku);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Tests that webapi call returns response when search criteria is valid.
 | 
						|
     *
 | 
						|
     * @magentoApiDataFixture Magento/Catalog/_files/products.php
 | 
						|
     */
 | 
						|
    public function testExistingProductSearch(): void
 | 
						|
    {
 | 
						|
        $productName = $this->product->getName();
 | 
						|
 | 
						|
        $searchCriteria = $this->buildSearchCriteria($productName);
 | 
						|
        $serviceInfo = $this->buildServiceInfo($searchCriteria);
 | 
						|
 | 
						|
        $response = $this->_webApiCall($serviceInfo, $searchCriteria);
 | 
						|
 | 
						|
        self::assertArrayHasKey('search_criteria', $response);
 | 
						|
        self::assertArrayHasKey('items', $response);
 | 
						|
        self::assertGreaterThan(1, count($response['items']));
 | 
						|
        self::assertGreaterThan(0, $response['items'][0]['id']);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Tests that response is empty if invalid data is provided.
 | 
						|
     *
 | 
						|
     * @magentoApiDataFixture Magento/Catalog/_files/products.php
 | 
						|
     */
 | 
						|
    public function testNonExistentProductSearch(): void
 | 
						|
    {
 | 
						|
        $searchCriteria = $this->buildSearchCriteria('nonExistentProduct');
 | 
						|
        $serviceInfo = $this->buildServiceInfo($searchCriteria);
 | 
						|
 | 
						|
        $response = $this->_webApiCall($serviceInfo, $searchCriteria);
 | 
						|
 | 
						|
        self::assertArrayHasKey('search_criteria', $response);
 | 
						|
        self::assertArrayHasKey('items', $response);
 | 
						|
        self::assertCount(0, $response['items']);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param string $productName
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    private function buildSearchCriteria(string $productName): array
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            'searchCriteria' => [
 | 
						|
                'request_name' => 'quick_search_container',
 | 
						|
                'filter_groups' => [
 | 
						|
                    [
 | 
						|
                        'filters' => [
 | 
						|
                            [
 | 
						|
                                'field' => 'search_term',
 | 
						|
                                'value' => $productName,
 | 
						|
                            ]
 | 
						|
                        ]
 | 
						|
                    ]
 | 
						|
                ]
 | 
						|
            ]
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param array $searchCriteria
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    private function buildServiceInfo(array $searchCriteria): array
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            'rest' => [
 | 
						|
                'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($searchCriteria),
 | 
						|
                'httpMethod' => Request::HTTP_METHOD_GET
 | 
						|
            ],
 | 
						|
            'soap' => [
 | 
						|
                'service' => self::SERVICE_NAME,
 | 
						|
                'serviceVersion' => self::SERVICE_VERSION,
 | 
						|
                'operation' => self::SERVICE_NAME . 'Search'
 | 
						|
            ]
 | 
						|
        ];
 | 
						|
    }
 | 
						|
}
 |