JoinDirectivesTest.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Webapi;
  7. use Magento\Framework\Api\SearchCriteriaBuilder;
  8. use Magento\Framework\Api\SortOrderBuilder;
  9. use Magento\Framework\Api\SortOrder;
  10. use Magento\Framework\Api\SearchCriteria;
  11. use Magento\Framework\Api\FilterBuilder;
  12. class JoinDirectivesTest extends \Magento\TestFramework\TestCase\WebapiAbstract
  13. {
  14. /**
  15. * @var SearchCriteriaBuilder
  16. */
  17. private $searchBuilder;
  18. /**
  19. * @var SortOrderBuilder
  20. */
  21. private $sortOrderBuilder;
  22. /**
  23. * @var FilterBuilder
  24. */
  25. private $filterBuilder;
  26. /**
  27. * @var \Magento\User\Model\User
  28. */
  29. private $user;
  30. protected function setUp()
  31. {
  32. $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  33. $this->searchBuilder = $objectManager->create(\Magento\Framework\Api\SearchCriteriaBuilder::class);
  34. $this->sortOrderBuilder = $objectManager->create(\Magento\Framework\Api\SortOrderBuilder::class);
  35. $this->filterBuilder = $objectManager->create(\Magento\Framework\Api\FilterBuilder::class);
  36. $this->user = $objectManager->create(\Magento\User\Model\User::class);
  37. }
  38. /**
  39. * Rollback rules
  40. * @magentoApiDataFixture Magento/SalesRule/_files/rules_rollback.php
  41. * @magentoApiDataFixture Magento/Sales/_files/quote.php
  42. */
  43. public function testGetList()
  44. {
  45. /** @var SortOrder $sortOrder */
  46. $sortOrder = $this->sortOrderBuilder->setField('store_id')->setDirection(SortOrder::SORT_ASC)->create();
  47. $this->searchBuilder->setSortOrders([$sortOrder]);
  48. $searchCriteria = $this->searchBuilder->create()->__toArray();
  49. $requestData = ['searchCriteria' => $searchCriteria];
  50. $restResourcePath = '/V1/TestModuleJoinDirectives/';
  51. $soapService = 'testModuleJoinDirectivesTestRepositoryV1';
  52. $expectedExtensionAttributes = $this->getExpectedExtensionAttributes();
  53. $serviceInfo = [
  54. 'rest' => [
  55. 'resourcePath' => $restResourcePath . '?' . http_build_query($requestData),
  56. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
  57. ],
  58. 'soap' => [
  59. 'service' => $soapService,
  60. 'operation' => $soapService . 'GetList',
  61. ],
  62. ];
  63. $searchResult = $this->_webApiCall($serviceInfo, $requestData);
  64. $this->assertArrayHasKey('items', $searchResult);
  65. $itemData = array_pop($searchResult['items']);
  66. $this->assertArrayHasKey('extension_attributes', $itemData);
  67. $this->assertArrayHasKey('quote_api_test_attribute', $itemData['extension_attributes']);
  68. $testAttribute = $itemData['extension_attributes']['quote_api_test_attribute'];
  69. $this->assertEquals($expectedExtensionAttributes['firstname'], $testAttribute['first_name']);
  70. $this->assertEquals($expectedExtensionAttributes['lastname'], $testAttribute['last_name']);
  71. $this->assertEquals($expectedExtensionAttributes['email'], $testAttribute['email']);
  72. }
  73. /**
  74. * @magentoApiDataFixture Magento/Sales/_files/invoice.php
  75. */
  76. public function testAutoGeneratedGetList()
  77. {
  78. $this->markTestSkipped(
  79. 'Invoice repository is not autogenerated anymore and does not have joined extension attributes'
  80. );
  81. $this->getExpectedExtensionAttributes();
  82. /** @var SortOrder $sortOrder */
  83. $sortOrder = $this->sortOrderBuilder->setField('store_id')->setDirection(SortOrder::SORT_ASC)->create();
  84. $this->searchBuilder->setSortOrders([$sortOrder]);
  85. $this->searchBuilder->addFilters([$this->filterBuilder->setField('state')->setValue(2)->create()]);
  86. $searchCriteria = $this->searchBuilder->create()->__toArray();
  87. $requestData = ['criteria' => $searchCriteria];
  88. $restResourcePath = '/V1/invoices/';
  89. $soapService = 'salesInvoiceRepositoryV1';
  90. $expectedExtensionAttributes = $this->getExpectedExtensionAttributes();
  91. $serviceInfo = [
  92. 'rest' => [
  93. 'resourcePath' => $restResourcePath . '?' . http_build_query($requestData),
  94. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
  95. ],
  96. 'soap' => [
  97. 'service' => $soapService,
  98. 'operation' => $soapService . 'GetList',
  99. ],
  100. ];
  101. $searchResult = $this->_webApiCall($serviceInfo, $requestData);
  102. $this->assertArrayHasKey('items', $searchResult);
  103. $itemData = array_pop($searchResult['items']);
  104. $this->assertArrayHasKey('extension_attributes', $itemData);
  105. $this->assertArrayHasKey('invoice_api_test_attribute', $itemData['extension_attributes']);
  106. $testAttribute = $itemData['extension_attributes']['invoice_api_test_attribute'];
  107. $this->assertEquals($expectedExtensionAttributes['firstname'], $testAttribute['first_name']);
  108. $this->assertEquals($expectedExtensionAttributes['lastname'], $testAttribute['last_name']);
  109. $this->assertEquals($expectedExtensionAttributes['email'], $testAttribute['email']);
  110. }
  111. /**
  112. * Retrieve the admin user's information.
  113. *
  114. * @return array
  115. */
  116. private function getExpectedExtensionAttributes()
  117. {
  118. $this->user->load(1);
  119. return [
  120. 'firstname' => $this->user->getFirstname(),
  121. 'lastname' => $this->user->getLastname(),
  122. 'email' => $this->user->getEmail()
  123. ];
  124. }
  125. }