Customer.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\TestFramework\Helper;
  7. use Magento\Customer\Api\Data\CustomerInterface;
  8. use Magento\Customer\Model\Data\Customer as CustomerData;
  9. use Magento\Framework\Reflection\DataObjectProcessor;
  10. use Magento\TestFramework\TestCase\WebapiAbstract;
  11. use Magento\Framework\Webapi\Rest\Request as RestRequest;
  12. class Customer extends WebapiAbstract
  13. {
  14. const RESOURCE_PATH = '/V1/customers';
  15. const SERVICE_NAME = 'customerAccountManagementV1';
  16. const CUSTOMER_REPOSITORY_SERVICE_NAME = "customerCustomerRepositoryV1";
  17. const SERVICE_VERSION = 'V1';
  18. const CONFIRMATION = 'a4fg7h893e39d';
  19. const CREATED_AT = '2013-11-05';
  20. const CREATED_IN = 'default';
  21. const STORE_NAME = 'Store Name';
  22. const DOB = '1970-01-01';
  23. const GENDER = 'Male';
  24. const GROUP_ID = 1;
  25. const MIDDLENAME = 'A';
  26. const PREFIX = 'Mr.';
  27. const STORE_ID = 1;
  28. const SUFFIX = 'Esq.';
  29. const TAXVAT = '12';
  30. const WEBSITE_ID = 1;
  31. /** Sample values for testing */
  32. const FIRSTNAME = 'Jane';
  33. const LASTNAME = 'Doe';
  34. const PASSWORD = 'test@123';
  35. const ADDRESS_CITY1 = 'CityM';
  36. const ADDRESS_CITY2 = 'CityX';
  37. const ADDRESS_REGION_CODE1 = 'AL';
  38. const ADDRESS_REGION_CODE2 = 'AL';
  39. /**
  40. * @var \Magento\Customer\Api\Data\AddressInterfaceFactory
  41. */
  42. private $customerAddressFactory;
  43. /**
  44. * @var \Magento\Customer\Api\Data\CustomerInterfaceFactory
  45. */
  46. private $customerDataFactory;
  47. /**
  48. * @var \Magento\Framework\Api\DataObjectHelper
  49. */
  50. private $dataObjectHelper;
  51. /** @var DataObjectProcessor */
  52. private $dataObjectProcessor;
  53. public function __construct($name = null, array $data = [], $dataName = '')
  54. {
  55. parent::__construct($name, $data, $dataName);
  56. $this->customerAddressFactory = Bootstrap::getObjectManager()->create(
  57. \Magento\Customer\Api\Data\AddressInterfaceFactory::class
  58. );
  59. $this->customerDataFactory = Bootstrap::getObjectManager()->create(
  60. \Magento\Customer\Api\Data\CustomerInterfaceFactory::class
  61. );
  62. $this->dataObjectHelper = Bootstrap::getObjectManager()->create(
  63. \Magento\Framework\Api\DataObjectHelper::class
  64. );
  65. $this->dataObjectProcessor = Bootstrap::getObjectManager()->create(
  66. \Magento\Framework\Reflection\DataObjectProcessor::class
  67. );
  68. }
  69. /**
  70. * @param array $additional
  71. * @return array|bool|float|int|string
  72. */
  73. public function createSampleCustomer(array $additional = [])
  74. {
  75. $serviceInfo = [
  76. 'rest' => [
  77. 'resourcePath' => self::RESOURCE_PATH,
  78. 'httpMethod' => RestRequest::HTTP_METHOD_POST,
  79. ],
  80. 'soap' => [
  81. 'service' => self::SERVICE_NAME,
  82. 'serviceVersion' => self::SERVICE_VERSION,
  83. 'operation' => self::SERVICE_NAME . 'CreateAccount',
  84. ],
  85. ];
  86. $customerDataArray = $this->dataObjectProcessor->buildOutputDataArray(
  87. $this->createSampleCustomerDataObject($additional),
  88. \Magento\Customer\Api\Data\CustomerInterface::class
  89. );
  90. $requestData = ['customer' => $customerDataArray, 'password' => self::PASSWORD];
  91. $customerData = $this->_webApiCall($serviceInfo, $requestData);
  92. return $customerData;
  93. }
  94. /**
  95. * Update Existing customer
  96. *
  97. * @param array $additional
  98. * @param int $customerId
  99. * @return array|bool|float|int|string
  100. */
  101. public function updateSampleCustomer($customerId, array $additional = [])
  102. {
  103. $serviceInfo = [
  104. 'rest' => [
  105. 'resourcePath' => self::RESOURCE_PATH . "/" . $customerId,
  106. 'httpMethod' => RestRequest::HTTP_METHOD_PUT,
  107. ],
  108. 'soap' => [
  109. 'service' => self::CUSTOMER_REPOSITORY_SERVICE_NAME,
  110. 'serviceVersion' => self::SERVICE_VERSION,
  111. 'operation' => self::CUSTOMER_REPOSITORY_SERVICE_NAME . 'save',
  112. ],
  113. ];
  114. $customerDataArray = $this->dataObjectProcessor->buildOutputDataArray(
  115. $this->createSampleCustomerDataObject($additional),
  116. \Magento\Customer\Api\Data\CustomerInterface::class
  117. );
  118. $requestData = ['customer' => $customerDataArray, 'password' => self::PASSWORD];
  119. $customerData = $this->_webApiCall($serviceInfo, $requestData);
  120. return $customerData;
  121. }
  122. /**
  123. * @param array $additional
  124. * @return array
  125. */
  126. private function getCustomerSampleData(array $additional = [])
  127. {
  128. $customerData = [
  129. CustomerData::FIRSTNAME => self::FIRSTNAME,
  130. CustomerData::LASTNAME => self::LASTNAME,
  131. CustomerData::EMAIL => 'janedoe' . uniqid() . '@example.com',
  132. CustomerData::CONFIRMATION => self::CONFIRMATION,
  133. CustomerData::CREATED_AT => self::CREATED_AT,
  134. CustomerData::CREATED_IN => self::STORE_NAME,
  135. CustomerData::DOB => self::DOB,
  136. CustomerData::GENDER => self::GENDER,
  137. CustomerData::GROUP_ID => self::GROUP_ID,
  138. CustomerData::MIDDLENAME => self::MIDDLENAME,
  139. CustomerData::PREFIX => self::PREFIX,
  140. CustomerData::STORE_ID => self::STORE_ID,
  141. CustomerData::SUFFIX => self::SUFFIX,
  142. CustomerData::TAXVAT => self::TAXVAT,
  143. CustomerData::WEBSITE_ID => self::WEBSITE_ID,
  144. 'custom_attributes' => [
  145. [
  146. 'attribute_code' => 'disable_auto_group_change',
  147. 'value' => '0',
  148. ],
  149. ],
  150. ];
  151. return array_merge($customerData, $additional);
  152. }
  153. /**
  154. * Create customer using setters.
  155. *
  156. * @param array $additional
  157. * @return CustomerInterface
  158. */
  159. public function createSampleCustomerDataObject(array $additional = [])
  160. {
  161. $customerAddress1 = $this->customerAddressFactory->create();
  162. $customerAddress1->setCountryId('US');
  163. $customerAddress1->setIsDefaultBilling(true);
  164. $customerAddress1->setIsDefaultShipping(true);
  165. $customerAddress1->setPostcode('75477');
  166. $customerAddress1->setRegion(
  167. Bootstrap::getObjectManager()->create(\Magento\Customer\Api\Data\RegionInterfaceFactory::class)
  168. ->create()
  169. ->setRegionCode(self::ADDRESS_REGION_CODE1)
  170. ->setRegion('Alabama')
  171. ->setRegionId(1)
  172. );
  173. $customerAddress1->setStreet(['Green str, 67']);
  174. $customerAddress1->setTelephone('3468676');
  175. $customerAddress1->setCity(self::ADDRESS_CITY1);
  176. $customerAddress1->setFirstname('John');
  177. $customerAddress1->setLastname('Smith');
  178. $address1 = $this->dataObjectProcessor->buildOutputDataArray(
  179. $customerAddress1,
  180. \Magento\Customer\Api\Data\AddressInterface::class
  181. );
  182. $customerAddress2 = $this->customerAddressFactory->create();
  183. $customerAddress2->setCountryId('US');
  184. $customerAddress2->setIsDefaultBilling(false);
  185. $customerAddress2->setIsDefaultShipping(false);
  186. $customerAddress2->setPostcode('47676');
  187. $customerAddress2->setRegion(
  188. Bootstrap::getObjectManager()->create(\Magento\Customer\Api\Data\RegionInterfaceFactory::class)
  189. ->create()
  190. ->setRegionCode(self::ADDRESS_REGION_CODE2)
  191. ->setRegion('Alabama')
  192. ->setRegionId(1)
  193. );
  194. $customerAddress2->setStreet(['Black str, 48', 'Building D']);
  195. $customerAddress2->setTelephone('3234676');
  196. $customerAddress2->setCity(self::ADDRESS_CITY2);
  197. $customerAddress2->setFirstname('John');
  198. $customerAddress2->setLastname('Smith');
  199. $address2 = $this->dataObjectProcessor->buildOutputDataArray(
  200. $customerAddress2,
  201. \Magento\Customer\Api\Data\AddressInterface::class
  202. );
  203. $customerData = $this->getCustomerSampleData(
  204. array_merge([CustomerData::KEY_ADDRESSES => [$address1, $address2]], $additional)
  205. );
  206. $customer = $this->customerDataFactory->create();
  207. $this->dataObjectHelper->populateWithArray(
  208. $customer,
  209. $customerData,
  210. \Magento\Customer\Api\Data\CustomerInterface::class
  211. );
  212. return $customer;
  213. }
  214. }