OrderTest.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Backend\Model\Search;
  7. use Magento\TestFramework\Helper\Bootstrap;
  8. /**
  9. * @magentoAppArea adminhtml
  10. * @magentoDataFixture Magento/Sales/_files/order.php
  11. * @magentoDataFixture Magento/Sales/_files/order_shipping_address_different_to_billing.php
  12. */
  13. class OrderTest extends \PHPUnit\Framework\TestCase
  14. {
  15. /**
  16. * @dataProvider loadDataProvider
  17. */
  18. public function testLoad($query, $limit, $start, $expectedResult)
  19. {
  20. /** @var $order \Magento\Sales\Model\Order */
  21. $order = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Sales\Model\Order::class);
  22. $orderIdByIncrementId = [];
  23. foreach (['100000001', '100000002', '100000003'] as $incrementId) {
  24. $orderIdByIncrementId[$incrementId] = $order->loadByIncrementId($incrementId)->getId();
  25. }
  26. /** Preconditions */
  27. $objectManager = Bootstrap::getObjectManager();
  28. /** @var \Magento\Backend\Model\Search\Order $orderSearch */
  29. $orderSearch = $objectManager->create(\Magento\Backend\Model\Search\Order::class);
  30. $orderSearch->setQuery($query);
  31. $orderSearch->setLimit($limit);
  32. $orderSearch->setStart($start);
  33. $orderSearch->load();
  34. /** SUT Execution */
  35. $searchResults = $orderSearch->getResults();
  36. /** Ensure that search results are correct */
  37. $this->assertCount(count($expectedResult), $searchResults, 'Quantity of search result items is invalid.');
  38. foreach ($expectedResult as $itemIndex => $expectedItem) {
  39. /** Validate URL to item */
  40. $orderIncrementId = substr($expectedItem['id'], strlen('order/1/#'));
  41. $this->assertContains(
  42. "order/view/order_id/{$orderIdByIncrementId[$orderIncrementId]}",
  43. $searchResults[$itemIndex]['url'],
  44. 'Item URL is invalid.'
  45. );
  46. $expectedItem['id'] = 'order/1/' . $orderIdByIncrementId[$orderIncrementId];
  47. unset($searchResults[$itemIndex]['url']);
  48. /** Validate other item data */
  49. foreach ($expectedItem as $field => $value) {
  50. $this->assertEquals(
  51. $value,
  52. (string)$searchResults[$itemIndex][$field],
  53. "Data of item #$itemIndex is invalid."
  54. );
  55. }
  56. }
  57. }
  58. public static function loadDataProvider()
  59. {
  60. return [
  61. 'All items, first page' => [
  62. '10000000',
  63. 2, // Items on page
  64. 1, // Page number
  65. [
  66. [
  67. 'id' => 'order/1/#100000001',
  68. 'type' => 'Order',
  69. 'name' => 'Order #100000001',
  70. 'description' => 'firstname lastname',
  71. ],
  72. [
  73. 'id' => 'order/1/#100000002',
  74. 'type' => 'Order',
  75. 'name' => 'Order #100000002',
  76. 'description' => 'guest guest'
  77. ]
  78. ],
  79. ],
  80. 'All items, second page' => [
  81. '10000000',
  82. 2, // Items on page
  83. 2, // Page number
  84. [
  85. [
  86. 'id' => 'order/1/#100000003',
  87. 'type' => 'Order',
  88. 'name' => 'Order #100000003',
  89. 'description' => 'guest guest',
  90. ]
  91. ],
  92. ],
  93. 'Search by first name, first item only' => [
  94. 'First',
  95. 10, // Items on page
  96. 1, // Page number
  97. [
  98. [
  99. 'id' => 'order/1/#100000001',
  100. 'type' => 'Order',
  101. 'name' => 'Order #100000001',
  102. 'description' => 'firstname lastname',
  103. ]
  104. ],
  105. ],
  106. 'No results' => [
  107. 'NotExistingOrder',
  108. 10, // Items on page
  109. 1, // Page number
  110. [],
  111. ],
  112. 'Search by last name, first item only' => [
  113. 'last',
  114. 10, // Items on page
  115. 1, // Page number
  116. [
  117. [
  118. 'id' => 'order/1/#100000001',
  119. 'type' => 'Order',
  120. 'name' => 'Order #100000001',
  121. 'description' => 'firstname lastname',
  122. ]
  123. ],
  124. ],
  125. ];
  126. }
  127. }