HandlerTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Webapi\Test\Unit\Controller\Soap\Request;
  7. use Magento\Framework\Api\SimpleDataObjectConverter;
  8. use Magento\Webapi\Model\ServiceMetadata;
  9. /**
  10. * Test for \Magento\Webapi\Controller\Soap\Request\Handler.
  11. */
  12. class HandlerTest extends \PHPUnit\Framework\TestCase
  13. {
  14. /** @var \Magento\Webapi\Controller\Soap\Request\Handler */
  15. protected $_handler;
  16. /** @var \Magento\Framework\ObjectManagerInterface */
  17. protected $_objectManagerMock;
  18. /** @var \PHPUnit_Framework_MockObject_MockObject */
  19. protected $_apiConfigMock;
  20. /** @var \Magento\Framework\Webapi\Request */
  21. protected $_requestMock;
  22. /** @var \PHPUnit_Framework_MockObject_MockObject */
  23. protected $_authorizationMock;
  24. /** @var SimpleDataObjectConverter|\PHPUnit_Framework_MockObject_MockObject */
  25. protected $_dataObjectConverter;
  26. /** @var \Magento\Framework\Webapi\ServiceInputProcessor|\PHPUnit_Framework_MockObject_MockObject */
  27. protected $_serviceInputProcessorMock;
  28. /** @var \Magento\Framework\Reflection\DataObjectProcessor|\PHPUnit_Framework_MockObject_MockObject */
  29. protected $_dataObjectProcessorMock;
  30. /** @var \Magento\Framework\Reflection\MethodsMap|\PHPUnit_Framework_MockObject_MockObject */
  31. protected $_methodsMapProcessorMock;
  32. /** @var array */
  33. protected $_arguments;
  34. protected function setUp()
  35. {
  36. /** Prepare mocks for SUT constructor. */
  37. $this->_apiConfigMock = $this->getMockBuilder(\Magento\Webapi\Model\Soap\Config::class)
  38. ->setMethods(['getServiceMethodInfo'])->disableOriginalConstructor()->getMock();
  39. $this->_requestMock = $this->createMock(\Magento\Framework\Webapi\Request::class);
  40. $this->_objectManagerMock = $this->createMock(\Magento\Framework\ObjectManagerInterface::class);
  41. $this->_authorizationMock = $this->createMock(\Magento\Framework\Webapi\Authorization::class);
  42. $this->_dataObjectConverter = $this->createPartialMock(
  43. \Magento\Framework\Api\SimpleDataObjectConverter::class,
  44. ['convertStdObjectToArray']
  45. );
  46. $this->_serviceInputProcessorMock = $this->createMock(\Magento\Framework\Webapi\ServiceInputProcessor::class);
  47. $this->_dataObjectProcessorMock = $this->createMock(\Magento\Framework\Reflection\DataObjectProcessor::class);
  48. $this->_methodsMapProcessorMock = $this->createMock(\Magento\Framework\Reflection\MethodsMap::class);
  49. /** Initialize SUT. */
  50. $this->_handler = new \Magento\Webapi\Controller\Soap\Request\Handler(
  51. $this->_requestMock,
  52. $this->_objectManagerMock,
  53. $this->_apiConfigMock,
  54. $this->_authorizationMock,
  55. $this->_dataObjectConverter,
  56. $this->_serviceInputProcessorMock,
  57. $this->_dataObjectProcessorMock,
  58. $this->_methodsMapProcessorMock
  59. );
  60. parent::setUp();
  61. }
  62. public function testCall()
  63. {
  64. $requestedServices = ['requestedServices'];
  65. $this->_requestMock->expects($this->once())
  66. ->method('getRequestedServices')
  67. ->will($this->returnValue($requestedServices));
  68. $this->_dataObjectConverter->expects($this->once())
  69. ->method('convertStdObjectToArray')
  70. ->will($this->returnValue(['field' => 1]));
  71. $this->_methodsMapProcessorMock->method('getMethodReturnType')->willReturn('string');
  72. $operationName = 'soapOperation';
  73. $className = \Magento\Framework\DataObject::class;
  74. $methodName = 'testMethod';
  75. $isSecure = false;
  76. $aclResources = [['Magento_TestModule::resourceA']];
  77. $this->_apiConfigMock->expects($this->once())
  78. ->method('getServiceMethodInfo')
  79. ->with($operationName, $requestedServices)
  80. ->will(
  81. $this->returnValue(
  82. [
  83. ServiceMetadata::KEY_CLASS => $className,
  84. ServiceMetadata::KEY_METHOD => $methodName,
  85. ServiceMetadata::KEY_IS_SECURE => $isSecure,
  86. ServiceMetadata::KEY_ACL_RESOURCES => $aclResources,
  87. ]
  88. )
  89. );
  90. $this->_authorizationMock->expects($this->once())->method('isAllowed')->will($this->returnValue(true));
  91. $serviceMock = $this->getMockBuilder($className)
  92. ->disableOriginalConstructor()
  93. ->setMethods([$methodName])
  94. ->getMock();
  95. $serviceResponse = ['foo' => 'bar'];
  96. $serviceMock->expects($this->once())->method($methodName)->will($this->returnValue($serviceResponse));
  97. $this->_objectManagerMock->expects($this->once())->method('get')->with($className)
  98. ->will($this->returnValue($serviceMock));
  99. $this->_serviceInputProcessorMock
  100. ->expects($this->once())
  101. ->method('process')
  102. ->will($this->returnArgument(2));
  103. /** Execute SUT. */
  104. $this->assertEquals(
  105. ['result' => $serviceResponse],
  106. $this->_handler->__call($operationName, [(object)['field' => 1]])
  107. );
  108. }
  109. }