PageRenderTime 75ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Handler/Curl/CreateConfigurable.php

https://gitlab.com/DEVLINE/magento2
PHP | 168 lines | 115 code | 15 blank | 38 comment | 9 complexity | 78d0ee4fc53f051e526b1203f4b6b1cd MD5 | raw file
Possible License(s): Apache-2.0
  1. <?php
  2. /**
  3. * Copyright © 2015 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\ConfigurableProduct\Test\Handler\Curl;
  7. use Magento\ConfigurableProduct\Test\Fixture\ConfigurableProduct;
  8. use Magento\Mtf\Fixture\FixtureInterface;
  9. use Magento\Mtf\Handler\Curl;
  10. use Magento\Mtf\System\Config;
  11. use Magento\Mtf\Util\Protocol\CurlInterface;
  12. use Magento\Mtf\Util\Protocol\CurlTransport;
  13. use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
  14. /**
  15. * Class Create Configurable Product
  16. */
  17. class CreateConfigurable extends Curl
  18. {
  19. /**
  20. * Prepare data for curl
  21. *
  22. * @param ConfigurableProduct $fixture
  23. * @return array
  24. */
  25. protected function _prepareData(ConfigurableProduct $fixture)
  26. {
  27. $curlData = [];
  28. $curlData['product'] = $this->_getProductData($fixture);
  29. $curlData['product']['configurable_attributes_data'] = $this->_getConfigurableData($fixture);
  30. $curlData['variations-matrix'] = $this->_getVariationMatrix($fixture);
  31. $curlData['attributes'] = $fixture->getDataConfig()['attributes']['id'];
  32. $curlData['affected_attribute_set'] = 1;
  33. $curlData['new-variations-attribute-set-id'] = 4;
  34. $curlData['product']['category_ids'] = $fixture->getCategoryIds();
  35. $curlEncoded = json_encode($curlData, true);
  36. $curlEncoded = str_replace('"Yes"', '1', $curlEncoded);
  37. $curlEncoded = str_replace('"No"', '0', $curlEncoded);
  38. return json_decode($curlEncoded, true);
  39. }
  40. /**
  41. * Get product data for curl
  42. *
  43. * @param ConfigurableProduct $fixture
  44. * @return array
  45. */
  46. protected function _getProductData(ConfigurableProduct $fixture)
  47. {
  48. $curlData = [];
  49. $baseData = $fixture->getData('fields');
  50. unset($baseData['configurable_attributes_data']);
  51. unset($baseData['variations-matrix']);
  52. foreach ($baseData as $key => $field) {
  53. $fieldName = isset($field['input_name']) ? $field['input_name'] : $key;
  54. if (isset($field['input_value'])) {
  55. $curlData[$fieldName] = $field['input_value'];
  56. } elseif (isset($field['value'])) {
  57. $curlData[$fieldName] = $field['value'];
  58. }
  59. }
  60. $curlData['quantity_and_stock_status']['is_in_stock'] = 1;
  61. $curlData['stock_data'] = [
  62. 'use_config_manage_stock' => 1,
  63. 'is_in_stock' => 1,
  64. ];
  65. return $curlData;
  66. }
  67. /**
  68. * Get configurable product data for curl
  69. *
  70. * @param ConfigurableProduct $fixture
  71. * @return array
  72. */
  73. protected function _getConfigurableData(ConfigurableProduct $fixture)
  74. {
  75. $configurableAttribute = $fixture->getData('fields/configurable_attributes_data/value');
  76. $config = $fixture->getDataConfig();
  77. $curlData = [];
  78. foreach ($configurableAttribute as $attributeNumber => $attribute) {
  79. $attributeId = $config['attributes']['id'][$attributeNumber];
  80. $optionNumber = 0;
  81. foreach ($attribute as $attributeFieldName => $attributeField) {
  82. if (isset($attributeField['value'])) {
  83. $curlData[$attributeId][$attributeFieldName] = $attributeField['value'];
  84. } else {
  85. $optionsId = $config['options'][$attributeId]['id'][$optionNumber];
  86. foreach ($attributeField as $optionName => $optionField) {
  87. $curlData[$attributeId]['values'][$optionsId][$optionName] = $optionField['value'];
  88. }
  89. $curlData[$attributeId]['values'][$optionsId]['value_index'] = $optionsId;
  90. ++$optionNumber;
  91. }
  92. }
  93. $curlData[$attributeId]['code'] = $config['attributes'][$attributeId]['code'];
  94. $curlData[$attributeId]['attribute_id'] = $attributeId;
  95. }
  96. return $curlData;
  97. }
  98. /**
  99. * Get variations data for curl
  100. *
  101. * @param ConfigurableProduct $fixture
  102. * @return array
  103. */
  104. protected function _getVariationMatrix(ConfigurableProduct $fixture)
  105. {
  106. $config = $fixture->getDataConfig();
  107. $variationData = $fixture->getData('fields/variations-matrix/value');
  108. $curlData = [];
  109. $variationNumber = 0;
  110. foreach ($config['options'] as $attributeId => $options) {
  111. foreach ($options['id'] as $option) {
  112. foreach ($variationData[$variationNumber]['value'] as $fieldName => $fieldData) {
  113. if ($fieldName == 'qty') {
  114. $curlData[$option]['quantity_and_stock_status'][$fieldName] = $fieldData['value'];
  115. } else {
  116. $curlData[$option][$fieldName] = $fieldData['value'];
  117. }
  118. }
  119. if (!isset($curlData[$option]['weight']) && $fixture->getData('fields/weight/value')) {
  120. $curlData[$option]['weight'] = $fixture->getData('fields/weight/value');
  121. }
  122. $curlData[$option]['configurable_attribute'] =
  123. '{"' . $config['attributes'][$attributeId]['code'] . '":"' . $option . '"}';
  124. ++$variationNumber;
  125. }
  126. }
  127. return $curlData;
  128. }
  129. /**
  130. * Create configurable product
  131. *
  132. * @param FixtureInterface $fixture [optional]
  133. * @return mixed|string
  134. * @throws \Exception
  135. */
  136. public function persist(FixtureInterface $fixture = null)
  137. {
  138. $url = $_ENV['app_backend_url']
  139. . 'catalog/product/save/'
  140. . $fixture->getUrlParams('create_url_params') . '/popup/1/back/edit';
  141. $params = $this->_prepareData($fixture);
  142. $curl = new BackendDecorator(new CurlTransport(), new Config());
  143. $curl->addOption(CURLOPT_HEADER, 1);
  144. $curl->write(CurlInterface::POST, $url, '1.0', [], $params);
  145. $response = $curl->read();
  146. $curl->close();
  147. if (!strpos($response, 'data-ui-id="messages-message-success"')) {
  148. throw new \Exception("Product creation by curl handler was not successful! Response: $response");
  149. }
  150. preg_match("~Location: [^\s]*\/id\/(\d+)~", $response, $matches);
  151. return isset($matches[1]) ? $matches[1] : null;
  152. }
  153. }