StructurePluginTest.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Paypal\Test\Unit\Model\Config;
  7. use Magento\Paypal\Model\Config\StructurePlugin as ConfigStructurePlugin;
  8. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  9. use Magento\Config\Model\Config\ScopeDefiner as ConfigScopeDefiner;
  10. use Magento\Paypal\Helper\Backend as BackendHelper;
  11. use Magento\Config\Model\Config\Structure as ConfigStructure;
  12. use Magento\Config\Model\Config\Structure\ElementInterface as ElementConfigStructure;
  13. class StructurePluginTest extends \PHPUnit\Framework\TestCase
  14. {
  15. /**
  16. * @var ConfigStructurePlugin
  17. */
  18. private $plugin;
  19. /**
  20. * @var ObjectManagerHelper
  21. */
  22. private $objectManagerHelper;
  23. /**
  24. * @var ConfigScopeDefiner|\PHPUnit_Framework_MockObject_MockObject
  25. */
  26. private $configScopeDefinerMock;
  27. /**
  28. * @var BackendHelper|\PHPUnit_Framework_MockObject_MockObject
  29. */
  30. private $backendHelperMock;
  31. /**
  32. * @var ConfigStructure|\PHPUnit_Framework_MockObject_MockObject
  33. */
  34. private $configStructureMock;
  35. /**
  36. * @var ElementConfigStructure|\PHPUnit_Framework_MockObject_MockObject
  37. */
  38. private $elementConfigStructureMock;
  39. protected function setUp()
  40. {
  41. $this->configScopeDefinerMock = $this->getMockBuilder(ConfigScopeDefiner::class)
  42. ->disableOriginalConstructor()
  43. ->getMock();
  44. $this->backendHelperMock = $this->getMockBuilder(BackendHelper::class)
  45. ->disableOriginalConstructor()
  46. ->getMock();
  47. $this->configStructureMock = $this->getMockBuilder(ConfigStructure::class)
  48. ->disableOriginalConstructor()
  49. ->getMock();
  50. $this->elementConfigStructureMock = $this->getMockBuilder(ElementConfigStructure::class)
  51. ->getMockForAbstractClass();
  52. $this->objectManagerHelper = new ObjectManagerHelper($this);
  53. $this->plugin = $this->objectManagerHelper->getObject(
  54. ConfigStructurePlugin::class,
  55. [
  56. 'scopeDefiner' => $this->configScopeDefinerMock,
  57. 'backendHelper' => $this->backendHelperMock
  58. ]
  59. );
  60. }
  61. public function testGetPaypalConfigCountriesWithOther()
  62. {
  63. $countries = ConfigStructurePlugin::getPaypalConfigCountries(true);
  64. $this->assertContains('payment_us', $countries);
  65. $this->assertContains('payment_other', $countries);
  66. }
  67. public function testGetPaypalConfigCountries()
  68. {
  69. $countries = ConfigStructurePlugin::getPaypalConfigCountries(false);
  70. $this->assertContains('payment_us', $countries);
  71. $this->assertNotContains('payment_other', $countries);
  72. }
  73. /**
  74. * @param array $pathParts
  75. * @param bool $returnResult
  76. *
  77. * @dataProvider aroundGetElementByPathPartsNonPaymentDataProvider
  78. */
  79. public function testAroundGetElementByPathPartsNonPayment($pathParts, $returnResult)
  80. {
  81. $result = $returnResult ? $this->elementConfigStructureMock : null;
  82. $proceed = function () use ($result) {
  83. return $result;
  84. };
  85. $this->assertSame(
  86. $result,
  87. $this->plugin->aroundGetElementByPathParts($this->configStructureMock, $proceed, $pathParts)
  88. );
  89. }
  90. /**
  91. * @return array
  92. */
  93. public function aroundGetElementByPathPartsNonPaymentDataProvider()
  94. {
  95. return [
  96. [['non-payment', 'group1', 'group2', 'field'], true],
  97. [['non-payment'], true],
  98. [['non-payment', 'group1', 'group2', 'field'], false],
  99. [['non-payment'], false],
  100. ];
  101. }
  102. /**
  103. * @param array $pathParts
  104. * @param string $countryCode
  105. *
  106. * @dataProvider aroundGetElementByPathPartsDataProvider
  107. */
  108. public function testAroundGetElementByPathPartsNoResult($pathParts, $countryCode)
  109. {
  110. $proceed = function () {
  111. return null;
  112. };
  113. $this->backendHelperMock->expects(static::once())
  114. ->method('getConfigurationCountryCode')
  115. ->willReturn($countryCode);
  116. $this->assertEquals(
  117. null,
  118. $this->plugin->aroundGetElementByPathParts($this->configStructureMock, $proceed, $pathParts)
  119. );
  120. }
  121. /**
  122. * @param array $pathParts
  123. * @param string $countryCode
  124. *
  125. * @dataProvider aroundGetElementByPathPartsDataProvider
  126. */
  127. public function testAroundGetElementByPathParts($pathParts, $countryCode)
  128. {
  129. $result = $this->elementConfigStructureMock;
  130. $proceed = function () use ($result) {
  131. return $result;
  132. };
  133. $this->backendHelperMock->expects(static::once())
  134. ->method('getConfigurationCountryCode')
  135. ->willReturn($countryCode);
  136. $this->assertSame(
  137. $this->elementConfigStructureMock,
  138. $this->plugin->aroundGetElementByPathParts($this->configStructureMock, $proceed, $pathParts)
  139. );
  140. }
  141. /**
  142. * @return array
  143. */
  144. public function aroundGetElementByPathPartsDataProvider()
  145. {
  146. return [
  147. [
  148. ['payment', 'group1', 'group2', 'field'],
  149. 'any',
  150. ],
  151. [
  152. ['payment', 'group1', 'group2', 'field'],
  153. 'DE',
  154. ]
  155. ];
  156. }
  157. }