99 self::ADAPTER_SOAP => \Magento\TestFramework\TestCase\Webapi\Adapter\Soap::class,
100 self::ADAPTER_REST => \Magento\TestFramework\TestCase\Webapi\Adapter\Rest::class,
108 parent::setUpBeforeClass();
123 if (isset(self::$_classLevelFixtures[$fixtureNamespace])
124 && count(self::$_classLevelFixtures[$fixtureNamespace])
130 self::_enableSecureArea(
false);
132 parent::tearDownAfterClass();
144 if (isset(self::$_methodLevelFixtures[$fixtureNamespace])
145 && count(self::$_methodLevelFixtures[$fixtureNamespace])
149 $this->_callModelsDelete();
168 $webApiAdapterCode =
null,
172 if ($webApiAdapterCode ===
null) {
174 $webApiAdapterCode = strtolower(TESTS_WEB_API_ADAPTER);
184 if (TESTS_WEB_API_ADAPTER != self::ADAPTER_SOAP) {
185 $this->markTestSkipped(
$message ?
$message :
"The test is intended to be executed for SOAP adapter only.");
194 if (TESTS_WEB_API_ADAPTER != self::ADAPTER_REST) {
195 $this->markTestSkipped(
$message ?
$message :
"The test is intended to be executed for REST adapter only.");
207 public static function setFixture($key, $fixture, $tearDown = self::AUTO_TEAR_DOWN_AFTER_METHOD)
210 if (!isset(self::$_fixtures[$fixturesNamespace])) {
211 self::$_fixtures[$fixturesNamespace] = [];
213 self::$_fixtures[$fixturesNamespace][$key] = $fixture;
214 if ($tearDown == self::AUTO_TEAR_DOWN_AFTER_METHOD) {
215 if (!isset(self::$_methodLevelFixtures[$fixturesNamespace])) {
216 self::$_methodLevelFixtures[$fixturesNamespace] = [];
218 self::$_methodLevelFixtures[$fixturesNamespace][] = $key;
220 if ($tearDown == self::AUTO_TEAR_DOWN_AFTER_CLASS) {
221 if (!isset(self::$_classLevelFixtures[$fixturesNamespace])) {
222 self::$_classLevelFixtures[$fixturesNamespace] = [];
224 self::$_classLevelFixtures[$fixturesNamespace][] = $key;
238 if (array_key_exists($key, self::$_fixtures[$fixturesNamespace])) {
239 return self::$_fixtures[$fixturesNamespace][$key];
255 self::_enableSecureArea();
259 self::_enableSecureArea(
false);
273 $this->_modelsToDelete[] = [
'model' =>
$model,
'secure' => $secure];
286 if (!isset($this->_webApiAdapters[$webApiAdapterCode])) {
287 if (!isset($this->_webApiAdaptersMap[$webApiAdapterCode])) {
288 throw new \LogicException(
289 sprintf(
'Declaration of the requested Web API adapter "%s" was not found.', $webApiAdapterCode)
293 $this->_webApiAdaptersMap[$webApiAdapterCode]
296 return $this->_webApiAdapters[$webApiAdapterCode];
306 if (self::$_fixturesNamespace !==
null) {
307 throw new \RuntimeException(
'Fixture namespace is already set.');
309 self::$_fixturesNamespace = uniqid();
318 unset(self::$_fixtures[$fixturesNamespace]);
319 self::$_fixturesNamespace =
null;
331 if ($fixtureNamespace ===
null) {
332 throw new \RuntimeException(
'Fixture namespace must be set.');
334 return $fixtureNamespace;
343 protected static function _enableSecureArea($flag =
true)
359 protected function _callModelsDelete()
361 if ($this->_modelsToDelete) {
362 foreach ($this->_modelsToDelete as $key => $modelData) {
364 $model = $modelData[
'model'];
366 unset($this->_modelsToDelete[$key]);
380 foreach ($receivedMessages as
$message) {
381 $this->assertContains(
$message, $expectedMessages,
"Unexpected message: '{$message}'");
383 $expectedErrorsCount = count($expectedMessages);
384 $this->assertCount($expectedErrorsCount, $receivedMessages,
'Invalid messages quantity received');
394 foreach ($fixtures as $fixture) {
409 if (array_key_exists($key, self::$_fixtures[$fixturesNamespace])) {
411 unset(self::$_fixtures[$fixturesNamespace][$key]);
422 protected function _getAppCache()
424 if (
null === $this->_appCache) {
430 $currentCacheDir =
$options->getCacheDir();
431 $currentEtcDir =
$options->getEtcDir();
440 $options->setCacheDir($currentCacheDir);
441 $options->setEtcDir($currentEtcDir);
453 return $this->_getAppCache()->clean(\
Magento\Framework\
App\Config::CACHE_TAG);
467 protected function _updateAppConfig(
470 $cleanAppCache =
true,
471 $updateLocalConfig =
false,
474 list($section,
$group, $node) = explode(
'/',
$path);
476 if (!$section || !
$group || !$node) {
477 throw new \RuntimeException(
478 sprintf(
'Config path must have view as "section/group/node" but now it "%s"',
$path)
486 $config->setSection($section)->setGroups(
$data)->save();
488 if ($restore && !isset($this->_origConfigValues[
$path])) {
498 if ($cleanAppCache) {
499 if ($updateLocalConfig) {
505 throw new \RuntimeException(
'Application configuration cache cannot be cleaned.');
517 foreach ($this->_origConfigValues as $configPath => $origValue) {
518 $this->_updateAppConfig($configPath, $origValue,
true,
true);
538 $error = json_decode($e->getMessage(),
true);
540 $error[
'message'] = trim(preg_replace(
'/\s+/',
' ', $error[
'message']));
542 unset($error[
'trace']);
543 unset($error[
'type']);
561 $expectedErrorParams = [],
562 $expectedWrappedErrors = [],
565 $this->assertContains($expectedMessage, $soapFault->getMessage(),
"Fault message is invalid.");
567 $errorDetailsNode =
'GenericFault';
568 $errorDetails = isset($soapFault->detail->$errorDetailsNode) ? $soapFault->detail->$errorDetailsNode :
null;
569 if (!empty($expectedErrorParams) || !empty($expectedWrappedErrors)) {
571 $this->assertNotNull($errorDetails,
"Details must be present.");
584 $this->assertContains(
586 $errorDetails->$traceNode,
587 'Trace Information is incorrect.' 590 $this->assertNull($errorDetails,
"Details are not expected.");
595 $this->assertNotNull($soapFault->faultcode,
"Fault code must not be empty.");
596 $this->assertEquals($expectedFaultCode, $soapFault->faultcode,
"Fault code is invalid.");
608 if ($expectedErrorParams) {
613 if (isset($errorDetails->$paramsNode->$paramNode)) {
614 if (is_array($errorDetails->$paramsNode->$paramNode)) {
615 foreach ($errorDetails->$paramsNode->$paramNode as $param) {
616 $actualParams[$param->$paramKey] = $param->$paramValue;
619 $param = $errorDetails->$paramsNode->$paramNode;
620 $actualParams[$param->$paramKey] = $param->$paramValue;
624 $expectedErrorParams,
626 "Parameters in fault details are invalid." 629 $this->assertFalse(isset($errorDetails->$paramsNode),
"Parameters are not expected in fault details.");
642 if ($expectedWrappedErrors) {
644 $actualWrappedErrors = [];
645 if (isset($errorDetails->$wrappedErrorsNode->$wrappedErrorNode)) {
646 $errorNode = $errorDetails->$wrappedErrorsNode->$wrappedErrorNode;
647 if (is_array($errorNode)) {
648 foreach ($errorNode as $error) {
649 $actualWrappedErrors[] = $this->getActualWrappedErrors($error);
652 $actualWrappedErrors[] = $this->getActualWrappedErrors($errorNode);
656 $expectedWrappedErrors,
657 $actualWrappedErrors,
658 "Wrapped errors in fault details are invalid." 662 isset($errorDetails->$wrappedErrorsNode),
663 "Wrapped errors are not expected in fault details." 672 private function getActualWrappedErrors(\stdClass $errorNode)
674 $actualParameters = [];
675 $parameterNode = $errorNode->parameters->parameter;
676 if (is_array($parameterNode)) {
677 foreach ($parameterNode as $parameter) {
678 $actualParameters[$parameter->key] = $parameter->value;
681 $actualParameters[$parameterNode->key] = $parameterNode->value;
684 'message' => $errorNode->message,
686 'params' => $actualParameters,
const AUTO_TEAR_DOWN_AFTER_METHOD
static _getFixtureNamespace()
_markTestAsRestOnly($message=null)
_webApiCall( $serviceInfo, $arguments=[], $webApiAdapterCode=null, $storeCode=null, $integration=null)
static tearDownAfterClass()
_getWebApiAdapter($webApiAdapterCode)
static _deleteFixtures($fixtures)
addModelToDelete($model, $secure=false)
static setUpBeforeClass()
_checkWrappedErrors($expectedWrappedErrors, $errorDetails)
static deleteFixture($key, $secure=false)
const AUTO_TEAR_DOWN_DISABLED
const NODE_DETAIL_PARAMETER_VALUE
static $_methodLevelFixtures
checkSoapFault( $soapFault, $expectedMessage, $expectedFaultCode, $expectedErrorParams=[], $expectedWrappedErrors=[], $traceString=null)
if($exist=($block->getProductCollection() && $block->getProductCollection() ->getSize())) $mode
const NODE_DETAIL_PARAMETER
static $_classLevelFixtures
static setFixture($key, $fixture, $tearDown=self::AUTO_TEAR_DOWN_AFTER_METHOD)
processRestExceptionResult(\Exception $e)
static _setFixtureNamespace()
const AUTO_TEAR_DOWN_AFTER_CLASS
const NODE_DETAIL_PARAMETERS
static _unsetFixtureNamespace()
_checkFaultParams($expectedErrorParams, $errorDetails)
static callModelDelete($model, $secure=false)
static $_fixturesNamespace
const NODE_DETAIL_PARAMETER_KEY
_assertMessagesEqual($expectedMessages, $receivedMessages)
_markTestAsSoapOnly($message=null)
const NODE_DETAIL_WRAPPED_ERRORS
static getObjectManager()
const NODE_DETAIL_WRAPPED_ERROR