161 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			4.6 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;
 | 
						|
 | 
						|
/**
 | 
						|
 * SOAP error handling test.
 | 
						|
 */
 | 
						|
class SoapErrorHandlingTest extends \Magento\TestFramework\TestCase\WebapiAbstract
 | 
						|
{
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->_markTestAsSoapOnly();
 | 
						|
        parent::setUp();
 | 
						|
    }
 | 
						|
 | 
						|
    public function testWebapiException()
 | 
						|
    {
 | 
						|
        $serviceInfo = [
 | 
						|
            'soap' => [
 | 
						|
                'service' => 'testModule3ErrorV1',
 | 
						|
                'operation' => 'testModule3ErrorV1WebapiException',
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
        try {
 | 
						|
            $this->_webApiCall($serviceInfo);
 | 
						|
            $this->fail("SoapFault was not raised as expected.");
 | 
						|
        } catch (\SoapFault $e) {
 | 
						|
            $this->checkSoapFault(
 | 
						|
                $e,
 | 
						|
                'Service not found',
 | 
						|
                'env:Sender'
 | 
						|
            );
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function testUnknownException()
 | 
						|
    {
 | 
						|
        $serviceInfo = [
 | 
						|
            'soap' => [
 | 
						|
                'service' => 'testModule3ErrorV1',
 | 
						|
                'operation' => 'testModule3ErrorV1OtherException',
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
        try {
 | 
						|
            $this->_webApiCall($serviceInfo);
 | 
						|
            $this->fail("SoapFault was not raised as expected.");
 | 
						|
        } catch (\SoapFault $e) {
 | 
						|
            /** In developer mode message is masked, so checks should be different in two modes */
 | 
						|
            if (strpos($e->getMessage(), 'Internal Error') === false) {
 | 
						|
                $this->checkSoapFault(
 | 
						|
                    $e,
 | 
						|
                    'Non service exception',
 | 
						|
                    'env:Receiver',
 | 
						|
                    null,
 | 
						|
                    null,
 | 
						|
                    'Magento\TestModule3\Service\V1\Error->otherException()'
 | 
						|
                );
 | 
						|
            } else {
 | 
						|
                $this->checkSoapFault(
 | 
						|
                    $e,
 | 
						|
                    'Internal Error. Details are available in Magento log file. Report ID:',
 | 
						|
                    'env:Receiver'
 | 
						|
                );
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function testEmptyInputException()
 | 
						|
    {
 | 
						|
        $parameters = [];
 | 
						|
        $this->_testWrappedError($parameters);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testSingleWrappedErrorException()
 | 
						|
    {
 | 
						|
        $parameters = [
 | 
						|
            ['fieldName' => 'key1', 'value' => 'value1'],
 | 
						|
        ];
 | 
						|
        $this->_testWrappedError($parameters);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testMultipleWrappedErrorException()
 | 
						|
    {
 | 
						|
        $parameters = [
 | 
						|
            ['fieldName' => 'key1', 'value' => 'value1'],
 | 
						|
            ['fieldName' => 'key2', 'value' => 'value2'],
 | 
						|
        ];
 | 
						|
        $this->_testWrappedError($parameters);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testUnauthorized()
 | 
						|
    {
 | 
						|
        $serviceInfo = [
 | 
						|
            'soap' => [
 | 
						|
                'service' => 'testModule3ErrorV1',
 | 
						|
                'operation' => 'testModule3ErrorV1AuthorizationException',
 | 
						|
                'token' => 'invalidToken',
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
 | 
						|
        try {
 | 
						|
            $this->_webApiCall($serviceInfo);
 | 
						|
            $this->fail("SoapFault was not raised as expected.");
 | 
						|
        } catch (\SoapFault $e) {
 | 
						|
            $this->checkSoapFault(
 | 
						|
                $e,
 | 
						|
                "The consumer isn't authorized to access %resources.",
 | 
						|
                'env:Sender'
 | 
						|
            );
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    protected function _testWrappedError($parameters)
 | 
						|
    {
 | 
						|
        $serviceInfo = [
 | 
						|
            'soap' => [
 | 
						|
                'service' => 'testModule3ErrorV1',
 | 
						|
                'operation' => 'testModule3ErrorV1InputException',
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
 | 
						|
        $expectedException = new \Magento\Framework\Exception\InputException();
 | 
						|
        foreach ($parameters as $error) {
 | 
						|
            $expectedException->addError(
 | 
						|
                __('Invalid value of "%value" provided for the %fieldName field.', $error)
 | 
						|
            );
 | 
						|
        }
 | 
						|
 | 
						|
        $arguments = [
 | 
						|
            'wrappedErrorParameters' => $parameters,
 | 
						|
        ];
 | 
						|
 | 
						|
        $expectedErrors = [];
 | 
						|
        foreach ($expectedException->getErrors() as $key => $error) {
 | 
						|
            $expectedErrors[$key] = [
 | 
						|
                'message' => $error->getRawMessage(),
 | 
						|
                'params' => $error->getParameters(),
 | 
						|
            ];
 | 
						|
        }
 | 
						|
 | 
						|
        try {
 | 
						|
            $this->_webApiCall($serviceInfo, $arguments);
 | 
						|
            $this->fail("SoapFault was not raised as expected.");
 | 
						|
        } catch (\SoapFault $e) {
 | 
						|
            $this->checkSoapFault(
 | 
						|
                $e,
 | 
						|
                $expectedException->getRawMessage(),
 | 
						|
                'env:Sender',
 | 
						|
                $expectedException->getParameters(), // expected error parameters
 | 
						|
                $expectedErrors                      // expected wrapped errors
 | 
						|
            );
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |