SubscriptionStatusProviderTest.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  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\Config\Backend\Enabled\SubscriptionHandler;
  10. use Magento\Analytics\Model\SubscriptionStatusProvider;
  11. use Magento\Framework\App\Config\ScopeConfigInterface;
  12. use Magento\Framework\FlagManager;
  13. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  14. class SubscriptionStatusProviderTest extends \PHPUnit\Framework\TestCase
  15. {
  16. /**
  17. * @var ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
  18. */
  19. private $scopeConfigMock;
  20. /**
  21. * @var AnalyticsToken|\PHPUnit_Framework_MockObject_MockObject
  22. */
  23. private $analyticsTokenMock;
  24. /**
  25. * @var FlagManager|\PHPUnit_Framework_MockObject_MockObject
  26. */
  27. private $flagManagerMock;
  28. /**
  29. * @var ObjectManagerHelper
  30. */
  31. private $objectManagerHelper;
  32. /**
  33. * @var SubscriptionStatusProvider
  34. */
  35. private $statusProvider;
  36. /**
  37. * @return void
  38. */
  39. protected function setUp()
  40. {
  41. $this->scopeConfigMock = $this->getMockBuilder(ScopeConfigInterface::class)
  42. ->getMockForAbstractClass();
  43. $this->analyticsTokenMock = $this->getMockBuilder(AnalyticsToken::class)
  44. ->disableOriginalConstructor()
  45. ->getMock();
  46. $this->flagManagerMock = $this->getMockBuilder(FlagManager::class)
  47. ->disableOriginalConstructor()
  48. ->getMock();
  49. $this->objectManagerHelper = new ObjectManagerHelper($this);
  50. $this->statusProvider = $this->objectManagerHelper->getObject(
  51. SubscriptionStatusProvider::class,
  52. [
  53. 'scopeConfig' => $this->scopeConfigMock,
  54. 'analyticsToken' => $this->analyticsTokenMock,
  55. 'flagManager' => $this->flagManagerMock,
  56. ]
  57. );
  58. }
  59. /**
  60. * @param array $flagManagerData
  61. * @dataProvider getStatusShouldBeFailedDataProvider
  62. */
  63. public function testGetStatusShouldBeFailed(array $flagManagerData)
  64. {
  65. $this->analyticsTokenMock->expects($this->once())
  66. ->method('isTokenExist')
  67. ->willReturn(false);
  68. $this->scopeConfigMock->expects($this->once())
  69. ->method('getValue')
  70. ->with('analytics/subscription/enabled')
  71. ->willReturn(true);
  72. $this->expectFlagManagerReturn($flagManagerData);
  73. $this->assertEquals(SubscriptionStatusProvider::FAILED, $this->statusProvider->getStatus());
  74. }
  75. /**
  76. * @return array
  77. */
  78. public function getStatusShouldBeFailedDataProvider()
  79. {
  80. return [
  81. 'Subscription update doesn\'t active' => [
  82. 'Flag Manager data mapping' => [
  83. [SubscriptionUpdateHandler::PREVIOUS_BASE_URL_FLAG_CODE, null],
  84. [SubscriptionHandler::ATTEMPTS_REVERSE_COUNTER_FLAG_CODE, null]
  85. ],
  86. ],
  87. 'Subscription update is active' => [
  88. 'Flag Manager data mapping' => [
  89. [SubscriptionUpdateHandler::PREVIOUS_BASE_URL_FLAG_CODE, 'http://store.com'],
  90. [SubscriptionHandler::ATTEMPTS_REVERSE_COUNTER_FLAG_CODE, null]
  91. ],
  92. ],
  93. ];
  94. }
  95. /**
  96. * @param array $flagManagerData
  97. * @param bool $isTokenExist
  98. * @dataProvider getStatusShouldBePendingDataProvider
  99. */
  100. public function testGetStatusShouldBePending(array $flagManagerData, bool $isTokenExist)
  101. {
  102. $this->analyticsTokenMock->expects($this->once())
  103. ->method('isTokenExist')
  104. ->willReturn($isTokenExist);
  105. $this->scopeConfigMock->expects($this->once())
  106. ->method('getValue')
  107. ->with('analytics/subscription/enabled')
  108. ->willReturn(true);
  109. $this->expectFlagManagerReturn($flagManagerData);
  110. $this->assertEquals(SubscriptionStatusProvider::PENDING, $this->statusProvider->getStatus());
  111. }
  112. /**
  113. * @return array
  114. */
  115. public function getStatusShouldBePendingDataProvider()
  116. {
  117. return [
  118. 'Subscription update doesn\'t active and the token does not exist' => [
  119. 'Flag Manager data mapping' => [
  120. [SubscriptionUpdateHandler::PREVIOUS_BASE_URL_FLAG_CODE, null],
  121. [SubscriptionHandler::ATTEMPTS_REVERSE_COUNTER_FLAG_CODE, 45]
  122. ],
  123. 'isTokenExist' => false,
  124. ],
  125. 'Subscription update is active and the token does not exist' => [
  126. 'Flag Manager data mapping' => [
  127. [SubscriptionUpdateHandler::PREVIOUS_BASE_URL_FLAG_CODE, 'http://store.com'],
  128. [SubscriptionHandler::ATTEMPTS_REVERSE_COUNTER_FLAG_CODE, 45]
  129. ],
  130. 'isTokenExist' => false,
  131. ],
  132. 'Subscription update is active and token exist' => [
  133. 'Flag Manager data mapping' => [
  134. [SubscriptionUpdateHandler::PREVIOUS_BASE_URL_FLAG_CODE, 'http://store.com'],
  135. [SubscriptionHandler::ATTEMPTS_REVERSE_COUNTER_FLAG_CODE, null]
  136. ],
  137. 'isTokenExist' => true,
  138. ],
  139. ];
  140. }
  141. public function testGetStatusShouldBeEnabled()
  142. {
  143. $this->flagManagerMock
  144. ->method('getFlagData')
  145. ->with(SubscriptionUpdateHandler::PREVIOUS_BASE_URL_FLAG_CODE)
  146. ->willReturn(null);
  147. $this->analyticsTokenMock->expects($this->once())
  148. ->method('isTokenExist')
  149. ->willReturn(true);
  150. $this->scopeConfigMock->expects($this->once())
  151. ->method('getValue')
  152. ->with('analytics/subscription/enabled')
  153. ->willReturn(true);
  154. $this->assertEquals(SubscriptionStatusProvider::ENABLED, $this->statusProvider->getStatus());
  155. }
  156. public function testGetStatusShouldBeDisabled()
  157. {
  158. $this->scopeConfigMock->expects($this->once())
  159. ->method('getValue')
  160. ->with('analytics/subscription/enabled')
  161. ->willReturn(false);
  162. $this->assertEquals(SubscriptionStatusProvider::DISABLED, $this->statusProvider->getStatus());
  163. }
  164. /**
  165. * @param array $mapping
  166. */
  167. private function expectFlagManagerReturn(array $mapping)
  168. {
  169. $this->flagManagerMock
  170. ->method('getFlagData')
  171. ->willReturnMap($mapping);
  172. }
  173. }