magento2-docker/dev/tests/api-functional/testsuite/Magento/Webapi/Routing/SoapErrorHandlingTest.php

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
);
}
}
}