SignUpCommandTest.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Analytics\Test\Unit\Model\Connector;
  7. use Magento\Analytics\Model\Connector\Http\ClientInterface;
  8. use Magento\Analytics\Model\Connector\Http\JsonConverter;
  9. use Magento\Analytics\Model\Connector\Http\ResponseResolver;
  10. use Magento\Analytics\Model\Connector\SignUpCommand;
  11. use Magento\Analytics\Model\AnalyticsToken;
  12. use Magento\Analytics\Model\IntegrationManager;
  13. use Magento\Framework\App\Config\ScopeConfigInterface;
  14. use Magento\Integration\Model\Oauth\Token as IntegrationToken;
  15. use Psr\Log\LoggerInterface;
  16. class SignUpCommandTest extends \PHPUnit\Framework\TestCase
  17. {
  18. /**
  19. * @var SignUpCommand
  20. */
  21. private $signUpCommand;
  22. /**
  23. * @var AnalyticsToken|\PHPUnit_Framework_MockObject_MockObject
  24. */
  25. private $analyticsTokenMock;
  26. /**
  27. * @var IntegrationManager|\PHPUnit_Framework_MockObject_MockObject
  28. */
  29. private $integrationManagerMock;
  30. /**
  31. * @var IntegrationToken|\PHPUnit_Framework_MockObject_MockObject
  32. */
  33. private $integrationToken;
  34. /**
  35. * @var ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
  36. */
  37. private $configMock;
  38. /**
  39. * @var ClientInterface|\PHPUnit_Framework_MockObject_MockObject
  40. */
  41. private $httpClientMock;
  42. /**
  43. * @var LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
  44. */
  45. private $loggerMock;
  46. /**
  47. * @var ResponseResolver|\PHPUnit_Framework_MockObject_MockObject
  48. */
  49. private $responseResolverMock;
  50. /**
  51. * @return void
  52. */
  53. protected function setUp()
  54. {
  55. $this->analyticsTokenMock = $this->getMockBuilder(AnalyticsToken::class)
  56. ->disableOriginalConstructor()
  57. ->getMock();
  58. $this->integrationManagerMock = $this->getMockBuilder(IntegrationManager::class)
  59. ->disableOriginalConstructor()
  60. ->getMock();
  61. $this->integrationToken = $this->getMockBuilder(IntegrationToken::class)
  62. ->disableOriginalConstructor()
  63. ->getMock();
  64. $this->configMock = $this->getMockBuilder(ScopeConfigInterface::class)
  65. ->disableOriginalConstructor()
  66. ->getMock();
  67. $this->httpClientMock = $this->getMockBuilder(ClientInterface::class)
  68. ->disableOriginalConstructor()
  69. ->getMock();
  70. $this->loggerMock = $this->getMockBuilder(LoggerInterface::class)
  71. ->disableOriginalConstructor()
  72. ->getMock();
  73. $this->responseResolverMock = $this->getMockBuilder(ResponseResolver::class)
  74. ->disableOriginalConstructor()
  75. ->getMock();
  76. $this->signUpCommand = new SignUpCommand(
  77. $this->analyticsTokenMock,
  78. $this->integrationManagerMock,
  79. $this->configMock,
  80. $this->httpClientMock,
  81. $this->loggerMock,
  82. $this->responseResolverMock
  83. );
  84. }
  85. /**
  86. * @throws \Zend_Http_Exception
  87. * @return void
  88. */
  89. public function testExecuteSuccess()
  90. {
  91. $this->integrationManagerMock->expects($this->once())
  92. ->method('generateToken')
  93. ->willReturn($this->integrationToken);
  94. $this->integrationManagerMock->expects($this->once())
  95. ->method('activateIntegration')
  96. ->willReturn(true);
  97. $data = $this->getTestData();
  98. $this->configMock->expects($this->any())
  99. ->method('getValue')
  100. ->willReturn($data['url']);
  101. $this->integrationToken->expects($this->any())
  102. ->method('getData')
  103. ->with('token')
  104. ->willReturn($data['integration-token']);
  105. $httpResponse = new \Zend_Http_Response(201, [], '{"access-token": "' . $data['access-token'] . '"}');
  106. $this->httpClientMock->expects($this->once())
  107. ->method('request')
  108. ->with(
  109. $data['method'],
  110. $data['url'],
  111. $data['body']
  112. )
  113. ->willReturn($httpResponse);
  114. $this->responseResolverMock->expects($this->any())
  115. ->method('getResult')
  116. ->with($httpResponse)
  117. ->willReturn(true);
  118. $this->assertTrue($this->signUpCommand->execute());
  119. }
  120. /**
  121. * @return void
  122. */
  123. public function testExecuteFailureCannotGenerateToken()
  124. {
  125. $this->integrationManagerMock->expects($this->once())
  126. ->method('generateToken')
  127. ->willReturn(false);
  128. $this->integrationManagerMock->expects($this->never())
  129. ->method('activateIntegration');
  130. $this->assertFalse($this->signUpCommand->execute());
  131. }
  132. /**
  133. * @throws \Zend_Http_Exception
  134. * @return void
  135. */
  136. public function testExecuteFailureResponseIsEmpty()
  137. {
  138. $this->integrationManagerMock->expects($this->once())
  139. ->method('generateToken')
  140. ->willReturn($this->integrationToken);
  141. $this->integrationManagerMock->expects($this->once())
  142. ->method('activateIntegration')
  143. ->willReturn(true);
  144. $httpResponse = new \Zend_Http_Response(0, []);
  145. $this->httpClientMock->expects($this->once())
  146. ->method('request')
  147. ->willReturn($httpResponse);
  148. $this->responseResolverMock->expects($this->any())
  149. ->method('getResult')
  150. ->willReturn(false);
  151. $this->assertFalse($this->signUpCommand->execute());
  152. }
  153. /**
  154. * Returns test parameters for request.
  155. *
  156. * @return array
  157. */
  158. private function getTestData()
  159. {
  160. return [
  161. 'url' => 'http://www.mystore.com',
  162. 'access-token' => 'thisisaccesstoken',
  163. 'integration-token' => 'thisisintegrationtoken',
  164. 'method' => \Magento\Framework\HTTP\ZendClient::POST,
  165. 'body'=> ['token' => 'thisisintegrationtoken','url' => 'http://www.mystore.com'],
  166. ];
  167. }
  168. }