PartialResponseTest.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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\Customer\Api\AccountManagementTest;
  8. use Magento\TestFramework\Helper\Bootstrap;
  9. use Magento\TestFramework\Helper\Customer as CustomerHelper;
  10. class PartialResponseTest extends \Magento\TestFramework\TestCase\WebapiAbstract
  11. {
  12. /** @var CustomerHelper */
  13. protected $customerHelper;
  14. /** @var string */
  15. protected $customerData;
  16. protected function setUp()
  17. {
  18. $this->_markTestAsRestOnly('Partial response functionality available in REST mode only.');
  19. $this->customerHelper = Bootstrap::getObjectManager()
  20. ->get(\Magento\TestFramework\Helper\Customer::class);
  21. $this->customerData = $this->customerHelper->createSampleCustomer();
  22. }
  23. public function testCustomerWithEmailFilter()
  24. {
  25. $filter = 'email';
  26. $expected = ['email' => $this->customerData['email']];
  27. $result = $this->_getCustomerWithFilter($filter, $this->customerData['id']);
  28. $this->assertEquals($expected, $result);
  29. }
  30. public function testCustomerWithEmailAndAddressFilter()
  31. {
  32. $filter = 'email,addresses[city]';
  33. $expected = [
  34. 'email' => $this->customerData['email'],
  35. 'addresses' => [
  36. ['city' => CustomerHelper::ADDRESS_CITY1],
  37. ['city' => CustomerHelper::ADDRESS_CITY2],
  38. ],
  39. ];
  40. $result = $this->_getCustomerWithFilter($filter, $this->customerData['id']);
  41. $this->assertEquals($expected, $result);
  42. }
  43. public function testCustomerWithNestedAddressFilter()
  44. {
  45. $filter = 'addresses[region[region_code]]';
  46. $expected = [
  47. 'addresses' => [
  48. ['region' => ['region_code' => CustomerHelper::ADDRESS_REGION_CODE1]],
  49. ['region' => ['region_code' => CustomerHelper::ADDRESS_REGION_CODE2]],
  50. ],
  51. ];
  52. $result = $this->_getCustomerWithFilter($filter, $this->customerData['id']);
  53. $this->assertEquals($expected, $result);
  54. }
  55. public function testCustomerInvalidFilter()
  56. {
  57. // Invalid filter should return an empty result
  58. $result = $this->_getCustomerWithFilter('invalid', $this->customerData['id']);
  59. $this->assertEmpty($result);
  60. }
  61. public function testFilterForCustomerApiWithSimpleResponse()
  62. {
  63. $result = $this->_getCustomerWithFilter('customers', $this->customerData['id'], '/permissions/readonly');
  64. // assert if filter is ignored and a normal response is returned
  65. $this->assertFalse($result);
  66. }
  67. protected function _getCustomerWithFilter($filter, $customerId, $path = '')
  68. {
  69. $resourcePath = sprintf(
  70. '%s/%d%s?fields=%s',
  71. AccountManagementTest::RESOURCE_PATH,
  72. $customerId,
  73. $path,
  74. $filter
  75. );
  76. $serviceInfo = [
  77. 'rest' => [
  78. 'resourcePath' => $resourcePath,
  79. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
  80. ],
  81. ];
  82. return $this->_webApiCall($serviceInfo);
  83. }
  84. }