PageRenderTime 54ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create.php

https://gitlab.com/crazybutterfly815/magento2
PHP | 374 lines | 152 code | 36 blank | 186 comment | 2 complexity | 376951a00bac6865f4bc8df6d8ae574f MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Test\Block\Adminhtml\Order;
  7. use Magento\Mtf\Block\Block;
  8. use Magento\Mtf\Client\Locator;
  9. use Magento\Mtf\Fixture\FixtureInterface;
  10. use Magento\Mtf\Fixture\InjectableFixture;
  11. /**
  12. * Adminhtml sales order create block.
  13. */
  14. class Create extends Block
  15. {
  16. /**
  17. * Sales order create items block.
  18. *
  19. * @var string
  20. */
  21. protected $itemsBlock = '#order-items';
  22. /**
  23. * Sales order create search products block.
  24. *
  25. * @var string
  26. */
  27. protected $gridBlock = '#order-search';
  28. /**
  29. * Sales order create billing address block.
  30. *
  31. * @var string
  32. */
  33. protected $billingAddressBlock = '#order-billing_address';
  34. /**
  35. * Sales order create shipping address block.
  36. *
  37. * @var string
  38. */
  39. protected $shippingAddressBlock = '#order-shipping_address';
  40. /**
  41. * Sales order create payment method block.
  42. *
  43. * @var string
  44. */
  45. protected $billingMethodBlock = '#order-billing_method';
  46. /**
  47. * Sales order create shipping method block.
  48. *
  49. * @var string
  50. */
  51. protected $shippingMethodBlock = '#order-shipping_method';
  52. /**
  53. * Sales order create totals block.
  54. *
  55. * @var string
  56. */
  57. protected $totalsBlock = '#order-totals';
  58. /**
  59. * Backend abstract block.
  60. *
  61. * @var string
  62. */
  63. protected $templateBlock = './ancestor::body';
  64. /**
  65. * Order items grid block.
  66. *
  67. * @var string
  68. */
  69. protected $orderItemsGrid = '#order-items_grid';
  70. /**
  71. * Update items button.
  72. *
  73. * @var string
  74. */
  75. protected $updateItems = '[onclick="order.itemsUpdate()"]';
  76. /**
  77. * 'Add Selected Product(s) to Order' button.
  78. *
  79. * @var string
  80. */
  81. protected $addSelectedProducts = 'button[onclick="order.productGridAddSelected()"]';
  82. /**
  83. * Sales order create account information block.
  84. *
  85. * @var string
  86. */
  87. protected $accountInformationBlock = '#order-form_account';
  88. /**
  89. * Payment and Shipping methods block.
  90. *
  91. * @var string
  92. */
  93. protected $orderMethodsSelector = '#order-methods';
  94. /**
  95. * Page header.
  96. *
  97. * @var string
  98. */
  99. protected $header = 'header';
  100. /**
  101. * Save credit card check box.
  102. *
  103. * @var string
  104. */
  105. protected $vaultCheckbox = '#%s_vault';
  106. /**
  107. * Getter for order selected products grid.
  108. *
  109. * @return \Magento\Sales\Test\Block\Adminhtml\Order\Create\Items
  110. */
  111. public function getItemsBlock()
  112. {
  113. return $this->blockFactory->create(
  114. \Magento\Sales\Test\Block\Adminhtml\Order\Create\Items::class,
  115. ['element' => $this->_rootElement->find($this->itemsBlock, Locator::SELECTOR_CSS)]
  116. );
  117. }
  118. /**
  119. * Get sales order create billing address block.
  120. *
  121. * @return \Magento\Sales\Test\Block\Adminhtml\Order\Create\Billing\Address
  122. */
  123. public function getBillingAddressBlock()
  124. {
  125. return $this->blockFactory->create(
  126. \Magento\Sales\Test\Block\Adminhtml\Order\Create\Billing\Address::class,
  127. ['element' => $this->_rootElement->find($this->billingAddressBlock, Locator::SELECTOR_CSS)]
  128. );
  129. }
  130. /**
  131. * Get sales order create billing address block.
  132. *
  133. * @return \Magento\Sales\Test\Block\Adminhtml\Order\Create\Shipping\Address
  134. */
  135. protected function getShippingAddressBlock()
  136. {
  137. return $this->blockFactory->create(
  138. \Magento\Sales\Test\Block\Adminhtml\Order\Create\Shipping\Address::class,
  139. ['element' => $this->_rootElement->find($this->shippingAddressBlock, Locator::SELECTOR_CSS)]
  140. );
  141. }
  142. /**
  143. * Get sales order create payment method block.
  144. *
  145. * @return \Magento\Sales\Test\Block\Adminhtml\Order\Create\Billing\Method
  146. */
  147. protected function getBillingMethodBlock()
  148. {
  149. return $this->blockFactory->create(
  150. \Magento\Sales\Test\Block\Adminhtml\Order\Create\Billing\Method::class,
  151. ['element' => $this->_rootElement->find($this->billingMethodBlock, Locator::SELECTOR_CSS)]
  152. );
  153. }
  154. /**
  155. * Get sales order create shipping method block.
  156. *
  157. * @return \Magento\Sales\Test\Block\Adminhtml\Order\Create\Shipping\Method
  158. */
  159. protected function getShippingMethodBlock()
  160. {
  161. return $this->blockFactory->create(
  162. \Magento\Sales\Test\Block\Adminhtml\Order\Create\Shipping\Method::class,
  163. ['element' => $this->_rootElement->find($this->shippingMethodBlock, Locator::SELECTOR_CSS)]
  164. );
  165. }
  166. /**
  167. * Get sales order create totals block.
  168. *
  169. * @return \Magento\Sales\Test\Block\Adminhtml\Order\Create\Totals
  170. */
  171. protected function getTotalsBlock()
  172. {
  173. return $this->blockFactory->create(
  174. \Magento\Sales\Test\Block\Adminhtml\Order\Create\Totals::class,
  175. ['element' => $this->_rootElement->find($this->totalsBlock, Locator::SELECTOR_CSS)]
  176. );
  177. }
  178. /**
  179. * Get backend abstract block.
  180. *
  181. * @return \Magento\Backend\Test\Block\Template
  182. */
  183. public function getTemplateBlock()
  184. {
  185. return $this->blockFactory->create(
  186. \Magento\Backend\Test\Block\Template::class,
  187. ['element' => $this->_rootElement->find($this->templateBlock, Locator::SELECTOR_XPATH)]
  188. );
  189. }
  190. /**
  191. * Get sales order create search products block.
  192. *
  193. * @return \Magento\Sales\Test\Block\Adminhtml\Order\Create\Search\Grid
  194. */
  195. public function getGridBlock()
  196. {
  197. return $this->blockFactory->create(
  198. \Magento\Sales\Test\Block\Adminhtml\Order\Create\Search\Grid::class,
  199. ['element' => $this->_rootElement->find($this->gridBlock, Locator::SELECTOR_CSS)]
  200. );
  201. }
  202. /**
  203. * Get sales order create account information block.
  204. *
  205. * @return \Magento\Sales\Test\Block\Adminhtml\Order\Create\Form\Account
  206. */
  207. public function getAccountBlock()
  208. {
  209. return $this->blockFactory->create(
  210. \Magento\Sales\Test\Block\Adminhtml\Order\Create\Form\Account::class,
  211. ['element' => $this->_rootElement->find($this->accountInformationBlock, Locator::SELECTOR_CSS)]
  212. );
  213. }
  214. /**
  215. * Wait display order items grid.
  216. *
  217. * @return void
  218. */
  219. public function waitOrderItemsGrid()
  220. {
  221. $this->waitForElementVisible($this->orderItemsGrid);
  222. }
  223. /**
  224. * Update product data in sales.
  225. *
  226. * @param array $products
  227. * @return void
  228. */
  229. public function updateProductsData(array $products)
  230. {
  231. /** @var \Magento\Sales\Test\Block\Adminhtml\Order\Create\Items $items */
  232. $items = $this->blockFactory->create(
  233. \Magento\Sales\Test\Block\Adminhtml\Order\Create\Items::class,
  234. ['element' => $this->_rootElement->find($this->itemsBlock)]
  235. );
  236. foreach ($products as $product) {
  237. $items->getItemProductByName($product->getName())->fillCheckoutData($product->getCheckoutData());
  238. }
  239. $this->updateItems();
  240. }
  241. /**
  242. * Update product items.
  243. *
  244. * @return void
  245. */
  246. public function updateItems()
  247. {
  248. $this->_rootElement->find($this->updateItems)->click();
  249. $this->getTemplateBlock()->waitLoader();
  250. }
  251. /**
  252. * Fill addresses based on present data in customer and order fixtures.
  253. *
  254. * @param FixtureInterface $address
  255. * @param string $saveAddress
  256. * @param bool $setShippingAddress [optional]
  257. * @return void
  258. */
  259. public function fillAddresses(FixtureInterface $address, $saveAddress = 'No', $setShippingAddress = true)
  260. {
  261. if ($setShippingAddress) {
  262. $this->getShippingAddressBlock()->uncheckSameAsBillingShippingAddress();
  263. }
  264. $this->browser->find($this->header)->hover();
  265. $this->getBillingAddressBlock()->fill($address);
  266. $this->getBillingAddressBlock()->saveInAddressBookBillingAddress($saveAddress);
  267. $this->getTemplateBlock()->waitLoader();
  268. if ($setShippingAddress) {
  269. $this->getShippingAddressBlock()->setSameAsBillingShippingAddress();
  270. $this->getTemplateBlock()->waitLoader();
  271. }
  272. }
  273. /**
  274. * Select shipping method.
  275. *
  276. * @param array $shippingMethod
  277. * @return void
  278. */
  279. public function selectShippingMethod(array $shippingMethod)
  280. {
  281. $this->_rootElement->find($this->orderMethodsSelector)->click();
  282. $this->getShippingMethodBlock()->selectShippingMethod($shippingMethod);
  283. $this->getTemplateBlock()->waitLoader();
  284. }
  285. /**
  286. * Select payment method.
  287. *
  288. * @param array $paymentCode
  289. * @param InjectableFixture|null $creditCard
  290. */
  291. public function selectPaymentMethod(array $paymentCode, InjectableFixture $creditCard = null)
  292. {
  293. $this->getTemplateBlock()->waitLoader();
  294. $this->_rootElement->find($this->orderMethodsSelector)->click();
  295. $this->getBillingMethodBlock()->selectPaymentMethod($paymentCode, $creditCard);
  296. $this->getTemplateBlock()->waitLoader();
  297. }
  298. /**
  299. * Submit order.
  300. *
  301. * @return void
  302. */
  303. public function submitOrder()
  304. {
  305. $this->getTotalsBlock()->submitOrder();
  306. }
  307. /**
  308. * Click "Add Selected Product(s) to Order" button.
  309. *
  310. * @return void
  311. */
  312. public function addSelectedProductsToOrder()
  313. {
  314. $this->_rootElement->find($this->addSelectedProducts)->click();
  315. }
  316. /**
  317. * Save credit card.
  318. *
  319. * @param string $paymentMethod
  320. * @param string $creditCardSave
  321. * @return void
  322. */
  323. public function saveCreditCard($paymentMethod, $creditCardSave)
  324. {
  325. $saveCard = sprintf($this->vaultCheckbox, $paymentMethod);
  326. $this->_rootElement->find($saveCard, Locator::SELECTOR_CSS, 'checkbox')->setValue($creditCardSave);
  327. }
  328. /**
  329. * Select vault payment token radio button
  330. * @param string $selector
  331. * @return void
  332. */
  333. public function selectVaultToken($selector)
  334. {
  335. $selector = '[id^="' . $selector . '"]';
  336. $this->_rootElement->find($selector)->click();
  337. }
  338. }