DataTest.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Url\Test\Unit\Helper;
  7. class DataTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
  11. */
  12. protected $objectManager;
  13. protected function setUp()
  14. {
  15. $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  16. }
  17. public function testGetCurrentBase64Url()
  18. {
  19. $urlBuilderMock = $this->getMockBuilder(\Magento\Framework\UrlInterface::class)
  20. ->disableOriginalConstructor()
  21. ->getMock();
  22. $url = 'http://example.com';
  23. $urlBuilderMock->expects($this->once())
  24. ->method('getCurrentUrl')
  25. ->will($this->returnValue($url));
  26. $encodedUrl = 'encodedUrl';
  27. $urlEncoder = $this->getMockBuilder(\Magento\Framework\Url\EncoderInterface::class)
  28. ->disableOriginalConstructor()
  29. ->getMock();
  30. $urlEncoder->expects($this->once())
  31. ->method('encode')
  32. ->will($this->returnValue($encodedUrl));
  33. $context = $this->objectManager->getObject(
  34. \Magento\Framework\App\Helper\Context::class,
  35. [
  36. 'urlBuilder' => $urlBuilderMock,
  37. 'urlEncoder' => $urlEncoder,
  38. ]
  39. );
  40. /** @var \Magento\Framework\Url\Helper\Data $helper */
  41. $helper = new \Magento\Framework\Url\Helper\Data($context);
  42. $this->assertEquals($encodedUrl, $helper->getCurrentBase64Url());
  43. }
  44. /**
  45. * @param string $url
  46. * @param int $callNum
  47. * @dataProvider getEncodedUrlDataProvider
  48. */
  49. public function testGetEncodedUrl($url, $callNum)
  50. {
  51. $urlBuilderMock = $this->getMockBuilder(\Magento\Framework\UrlInterface::class)
  52. ->disableOriginalConstructor()
  53. ->getMock();
  54. $encodingUrl = $url ? $url : 'http://example.com';
  55. $urlBuilderMock->expects($this->exactly($callNum))
  56. ->method('getCurrentUrl')
  57. ->will($this->returnValue($encodingUrl));
  58. $encodedUrl = 'encodedUrl';
  59. $urlEncoder = $this->getMockBuilder(\Magento\Framework\Url\EncoderInterface::class)
  60. ->disableOriginalConstructor()
  61. ->getMock();
  62. $urlEncoder->expects($this->once())
  63. ->method('encode')
  64. ->will($this->returnValue($encodedUrl));
  65. $context = $this->objectManager->getObject(
  66. \Magento\Framework\App\Helper\Context::class,
  67. [
  68. 'urlBuilder' => $urlBuilderMock,
  69. 'urlEncoder' => $urlEncoder,
  70. ]
  71. );
  72. /** @var \Magento\Framework\Url\Helper\Data $helper */
  73. $helper = new \Magento\Framework\Url\Helper\Data($context);
  74. $this->assertEquals($encodedUrl, $helper->getEncodedUrl($url));
  75. }
  76. /**
  77. * @return array
  78. */
  79. public function getEncodedUrlDataProvider()
  80. {
  81. return [
  82. 'no url' => [null, 1],
  83. 'with url' => ['http://test.com', 0],
  84. ];
  85. }
  86. /**
  87. * @param array $param
  88. * @param string $expected
  89. * @dataProvider addRequestParamDataProvider
  90. */
  91. public function testAddRequestParam($param, $expected)
  92. {
  93. $helper = $this->getHelper([]);
  94. $this->assertEquals($expected, $helper->addRequestParam('http://example.com', $param));
  95. }
  96. /**
  97. * @return array
  98. */
  99. public function addRequestParamDataProvider()
  100. {
  101. return [
  102. 'string' => [
  103. ['key1' => 'value1', 'key2' => 'value2'],
  104. 'http://example.com?key1=value1&key2=value2',
  105. ],
  106. 'numeric key' => [
  107. ['1' => 'value1', '2' => 'value2'],
  108. 'http://example.com',
  109. ],
  110. 'single param' => [
  111. ['key1' => 'value1'],
  112. 'http://example.com?key1=value1',
  113. ],
  114. 'valid/invalid param' => [
  115. ['1' => 'value1', 'key2' => 'value2'],
  116. 'http://example.com?key2=value2',
  117. ],
  118. 'mixed' => [
  119. [
  120. 'null' => null,
  121. 'string' => 'value',
  122. 'array' => ['arrayVal1', 'arrayVal2', 'arrayVal3'],
  123. ],
  124. 'http://example.com?null&string=value&array[]=arrayVal1&array[]=arrayVal2&array[]=arrayVal3',
  125. ],
  126. 'object' => [
  127. ['object' => new \Magento\Framework\DataObject()],
  128. 'http://example.com',
  129. ]
  130. ];
  131. }
  132. /**
  133. * @param string $paramKey
  134. * @param string $expected
  135. * @dataProvider removeRequestParamDataProvider
  136. */
  137. public function testRemoveRequestParam($paramKey, $expected)
  138. {
  139. $url = 'http://example.com?null&string=value&array[]=arrayVal1&array[]=arrayVal2&array[]=arrayVal3';
  140. $helper = $this->getHelper([]);
  141. $this->assertEquals($expected, $helper->removeRequestParam($url, $paramKey));
  142. }
  143. /**
  144. * @return array
  145. */
  146. public function removeRequestParamDataProvider()
  147. {
  148. return [
  149. 'no match' => [
  150. 'other',
  151. 'http://example.com?null&string=value&array[]=arrayVal1&array[]=arrayVal2&array[]=arrayVal3',
  152. ],
  153. 'one match' => [
  154. 'string',
  155. 'http://example.com?null&array[]=arrayVal1&array[]=arrayVal2&array[]=arrayVal3',
  156. ],
  157. 'array match' => [
  158. 'array[]',
  159. 'http://example.com?null&string=value',
  160. ],
  161. ];
  162. }
  163. /**
  164. * Get helper instance
  165. *
  166. * @param array $arguments
  167. * @return \Magento\Framework\Url\Helper\Data
  168. */
  169. private function getHelper($arguments)
  170. {
  171. return $this->objectManager->getObject(\Magento\Framework\Url\Helper\Data::class, $arguments);
  172. }
  173. }