119 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
namespace Magento\Webapi\Routing;
 | 
						|
 | 
						|
use Magento\Framework\Exception\AuthorizationException;
 | 
						|
use Magento\Framework\Webapi\Exception as WebapiException;
 | 
						|
 | 
						|
/**
 | 
						|
 * Base class for all Service based routing tests
 | 
						|
 */
 | 
						|
abstract class BaseService extends \Magento\TestFramework\TestCase\WebapiAbstract
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Check a particular adapter and assert unauthorized access
 | 
						|
     *
 | 
						|
     * @param array $serviceInfo
 | 
						|
     * @param array|null $requestData
 | 
						|
     */
 | 
						|
    protected function assertUnauthorizedException($serviceInfo, $requestData = null)
 | 
						|
    {
 | 
						|
        if (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) {
 | 
						|
            $this->_assertSoapException(
 | 
						|
                $serviceInfo,
 | 
						|
                $requestData,
 | 
						|
                "The consumer isn't authorized to access %resources."
 | 
						|
            );
 | 
						|
        } elseif (TESTS_WEB_API_ADAPTER == self::ADAPTER_REST) {
 | 
						|
            $this->_assertRestUnauthorizedException($serviceInfo, $requestData);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Invoke the REST api and assert access is unauthorized
 | 
						|
     *
 | 
						|
     * @param array $serviceInfo
 | 
						|
     * @param array|null $requestData
 | 
						|
     */
 | 
						|
    protected function _assertRestUnauthorizedException($serviceInfo, $requestData = null)
 | 
						|
    {
 | 
						|
        try {
 | 
						|
            $this->_webApiCall($serviceInfo, $requestData);
 | 
						|
        } catch (\Exception $e) {
 | 
						|
            $this->assertStringContainsString(
 | 
						|
                '{"message":"The consumer isn\'t authorized to access %resources.',
 | 
						|
                $e->getMessage(),
 | 
						|
                sprintf(
 | 
						|
                    'REST routing did not fail as expected for the method "%s" of service "%s"',
 | 
						|
                    $serviceInfo['rest']['httpMethod'],
 | 
						|
                    $serviceInfo['rest']['resourcePath']
 | 
						|
                )
 | 
						|
            );
 | 
						|
            $this->assertEquals(WebapiException::HTTP_UNAUTHORIZED, $e->getCode());
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Check a particular adapter and assert the exception
 | 
						|
     *
 | 
						|
     * @param array $serviceInfo
 | 
						|
     * @param array|null $requestData
 | 
						|
     */
 | 
						|
    protected function _assertNoRouteOrOperationException($serviceInfo, $requestData = null)
 | 
						|
    {
 | 
						|
        if (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) {
 | 
						|
            $this->_assertSoapException($serviceInfo, $requestData);
 | 
						|
        } elseif (TESTS_WEB_API_ADAPTER == self::ADAPTER_REST) {
 | 
						|
            $this->_assertNoRestRouteException($serviceInfo, $requestData);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Invoke the REST api and assert for test cases that no such REST route exist
 | 
						|
     *
 | 
						|
     * @param array $serviceInfo
 | 
						|
     * @param array|null $requestData
 | 
						|
     */
 | 
						|
    protected function _assertNoRestRouteException($serviceInfo, $requestData = null)
 | 
						|
    {
 | 
						|
        try {
 | 
						|
            $this->_webApiCall($serviceInfo, $requestData);
 | 
						|
        } catch (\Exception $e) {
 | 
						|
            $error = json_decode($e->getMessage(), true);
 | 
						|
            $this->assertEquals('Request does not match any route.', $error['message']);
 | 
						|
            $this->assertEquals(WebapiException::HTTP_NOT_FOUND, $e->getCode());
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Invoke the SOAP api and assert for the NoWebApiXmlTestTest test cases that no such SOAP route exists
 | 
						|
     *
 | 
						|
     * @param array $serviceInfo
 | 
						|
     * @param array|null $requestData
 | 
						|
     * @param string $expectedMessage
 | 
						|
     */
 | 
						|
    protected function _assertSoapException($serviceInfo, $requestData = null, $expectedMessage = '')
 | 
						|
    {
 | 
						|
        try {
 | 
						|
            $this->_webApiCall($serviceInfo, $requestData);
 | 
						|
        } catch (\Exception $e) {
 | 
						|
            if (get_class($e) !== 'SoapFault') {
 | 
						|
                $this->fail(
 | 
						|
                    sprintf(
 | 
						|
                        'Expected SoapFault exception not generated for Service - "%s" and Operation - "%s"',
 | 
						|
                        $serviceInfo['soap']['service'],
 | 
						|
                        $serviceInfo['soap']['operation']
 | 
						|
                    )
 | 
						|
                );
 | 
						|
            }
 | 
						|
 | 
						|
            if ($expectedMessage) {
 | 
						|
                $this->assertStringContainsString($expectedMessage, $e->getMessage());
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |