ReportUrlProviderTest.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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;
  7. use Magento\Analytics\Model\AnalyticsToken;
  8. use Magento\Analytics\Model\Config\Backend\Baseurl\SubscriptionUpdateHandler;
  9. use Magento\Analytics\Model\Connector\OTPRequest;
  10. use Magento\Analytics\Model\Exception\State\SubscriptionUpdateException;
  11. use Magento\Analytics\Model\ReportUrlProvider;
  12. use Magento\Framework\App\Config\ScopeConfigInterface;
  13. use Magento\Framework\FlagManager;
  14. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  15. /**
  16. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  17. */
  18. class ReportUrlProviderTest extends \PHPUnit\Framework\TestCase
  19. {
  20. /**
  21. * @var ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
  22. */
  23. private $configMock;
  24. /**
  25. * @var AnalyticsToken|\PHPUnit_Framework_MockObject_MockObject
  26. */
  27. private $analyticsTokenMock;
  28. /**
  29. * @var OTPRequest|\PHPUnit_Framework_MockObject_MockObject
  30. */
  31. private $otpRequestMock;
  32. /**
  33. * @var FlagManager|\PHPUnit_Framework_MockObject_MockObject
  34. */
  35. private $flagManagerMock;
  36. /**
  37. * @var ObjectManagerHelper
  38. */
  39. private $objectManagerHelper;
  40. /**
  41. * @var ReportUrlProvider
  42. */
  43. private $reportUrlProvider;
  44. /**
  45. * @var string
  46. */
  47. private $urlReportConfigPath = 'path/url/report';
  48. /**
  49. * @return void
  50. */
  51. protected function setUp()
  52. {
  53. $this->configMock = $this->getMockBuilder(ScopeConfigInterface::class)
  54. ->disableOriginalConstructor()
  55. ->getMock();
  56. $this->analyticsTokenMock = $this->getMockBuilder(AnalyticsToken::class)
  57. ->disableOriginalConstructor()
  58. ->getMock();
  59. $this->otpRequestMock = $this->getMockBuilder(OTPRequest::class)
  60. ->disableOriginalConstructor()
  61. ->getMock();
  62. $this->flagManagerMock = $this->getMockBuilder(FlagManager::class)
  63. ->disableOriginalConstructor()
  64. ->getMock();
  65. $this->objectManagerHelper = new ObjectManagerHelper($this);
  66. $this->reportUrlProvider = $this->objectManagerHelper->getObject(
  67. ReportUrlProvider::class,
  68. [
  69. 'config' => $this->configMock,
  70. 'analyticsToken' => $this->analyticsTokenMock,
  71. 'otpRequest' => $this->otpRequestMock,
  72. 'flagManager' => $this->flagManagerMock,
  73. 'urlReportConfigPath' => $this->urlReportConfigPath,
  74. ]
  75. );
  76. }
  77. /**
  78. * @param bool $isTokenExist
  79. * @param string|null $otp If null OTP was not received.
  80. *
  81. * @dataProvider getUrlDataProvider
  82. */
  83. public function testGetUrl($isTokenExist, $otp)
  84. {
  85. $reportUrl = 'https://example.com/report';
  86. $url = '';
  87. $this->configMock
  88. ->expects($this->once())
  89. ->method('getValue')
  90. ->with($this->urlReportConfigPath)
  91. ->willReturn($reportUrl);
  92. $this->analyticsTokenMock
  93. ->expects($this->once())
  94. ->method('isTokenExist')
  95. ->with()
  96. ->willReturn($isTokenExist);
  97. $this->otpRequestMock
  98. ->expects($isTokenExist ? $this->once() : $this->never())
  99. ->method('call')
  100. ->with()
  101. ->willReturn($otp);
  102. if ($isTokenExist && $otp) {
  103. $url = $reportUrl . '?' . http_build_query(['otp' => $otp], '', '&');
  104. }
  105. $this->assertSame($url ?: $reportUrl, $this->reportUrlProvider->getUrl());
  106. }
  107. /**
  108. * @return array
  109. */
  110. public function getUrlDataProvider()
  111. {
  112. return [
  113. 'TokenDoesNotExist' => [false, null],
  114. 'TokenExistAndOtpEmpty' => [true, null],
  115. 'TokenExistAndOtpValid' => [true, '249e6b658877bde2a77bc4ab'],
  116. ];
  117. }
  118. /**
  119. * @return void
  120. */
  121. public function testGetUrlWhenSubscriptionUpdateRunning()
  122. {
  123. $this->flagManagerMock
  124. ->expects($this->once())
  125. ->method('getFlagData')
  126. ->with(SubscriptionUpdateHandler::PREVIOUS_BASE_URL_FLAG_CODE)
  127. ->willReturn('http://store.com');
  128. $this->expectException(SubscriptionUpdateException::class);
  129. $this->reportUrlProvider->getUrl();
  130. }
  131. }