RouteParamsResolverTest.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Store\Test\Unit\Url\Plugin;
  7. class RouteParamsResolverTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\Config\ScopeConfigInterface
  11. */
  12. protected $scopeConfigMock;
  13. /**
  14. * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Store\Model\StoreManagerInterface
  15. */
  16. protected $storeManagerMock;
  17. /**
  18. * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Url\QueryParamsResolverInterface
  19. */
  20. protected $queryParamsResolverMock;
  21. /**
  22. * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Store\Model\Store
  23. */
  24. protected $storeMock;
  25. /**
  26. * @var \Magento\Store\Url\Plugin\RouteParamsResolver
  27. */
  28. protected $model;
  29. protected function setUp()
  30. {
  31. $this->scopeConfigMock = $this->createMock(\Magento\Framework\App\Config\ScopeConfigInterface::class);
  32. $this->storeMock = $this->getMockBuilder(\Magento\Store\Model\Store::class)
  33. ->setMethods(['getCode'])
  34. ->disableOriginalConstructor()
  35. ->getMock();
  36. $this->storeMock->expects($this->any())->method('getCode')->willReturn('custom_store');
  37. $this->storeManagerMock = $this->createMock(\Magento\Store\Model\StoreManagerInterface::class);
  38. $this->storeManagerMock
  39. ->expects($this->once())
  40. ->method('getStore')
  41. ->willReturn($this->storeMock);
  42. $this->queryParamsResolverMock = $this->createMock(\Magento\Framework\Url\QueryParamsResolverInterface::class);
  43. $this->model = new \Magento\Store\Url\Plugin\RouteParamsResolver(
  44. $this->scopeConfigMock,
  45. $this->storeManagerMock,
  46. $this->queryParamsResolverMock
  47. );
  48. }
  49. public function testBeforeSetRouteParamsScopeInParams()
  50. {
  51. $storeCode = 'custom_store';
  52. $data = ['_scope' => $storeCode, '_scope_to_url' => true];
  53. $this->scopeConfigMock
  54. ->expects($this->once())
  55. ->method('getValue')
  56. ->with(
  57. \Magento\Store\Model\Store::XML_PATH_STORE_IN_URL,
  58. \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
  59. $storeCode
  60. )
  61. ->will($this->returnValue(false));
  62. $this->storeManagerMock->expects($this->any())->method('hasSingleStore')->willReturn(false);
  63. /** @var \PHPUnit_Framework_MockObject_MockObject $routeParamsResolverMock */
  64. $routeParamsResolverMock = $this->getMockBuilder(\Magento\Framework\Url\RouteParamsResolver::class)
  65. ->setMethods(['setScope', 'getScope'])
  66. ->disableOriginalConstructor()
  67. ->getMock();
  68. $routeParamsResolverMock->expects($this->once())->method('setScope')->with($storeCode);
  69. $routeParamsResolverMock->expects($this->once())->method('getScope')->willReturn($storeCode);
  70. $this->queryParamsResolverMock->expects($this->any())->method('setQueryParam');
  71. $this->model->beforeSetRouteParams(
  72. $routeParamsResolverMock,
  73. $data
  74. );
  75. }
  76. public function testBeforeSetRouteParamsScopeUseStoreInUrl()
  77. {
  78. $storeCode = 'custom_store';
  79. $data = ['_scope' => $storeCode, '_scope_to_url' => true];
  80. $this->scopeConfigMock
  81. ->expects($this->once())
  82. ->method('getValue')
  83. ->with(
  84. \Magento\Store\Model\Store::XML_PATH_STORE_IN_URL,
  85. \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
  86. $storeCode
  87. )
  88. ->will($this->returnValue(true));
  89. $this->storeManagerMock->expects($this->any())->method('hasSingleStore')->willReturn(false);
  90. /** @var \PHPUnit_Framework_MockObject_MockObject $routeParamsResolverMock */
  91. $routeParamsResolverMock = $this->getMockBuilder(\Magento\Framework\Url\RouteParamsResolver::class)
  92. ->setMethods(['setScope', 'getScope'])
  93. ->disableOriginalConstructor()
  94. ->getMock();
  95. $routeParamsResolverMock->expects($this->once())->method('setScope')->with($storeCode);
  96. $routeParamsResolverMock->expects($this->once())->method('getScope')->willReturn($storeCode);
  97. $this->queryParamsResolverMock->expects($this->never())->method('setQueryParam')->with('___store', $storeCode);
  98. $this->model->beforeSetRouteParams(
  99. $routeParamsResolverMock,
  100. $data
  101. );
  102. }
  103. public function testBeforeSetRouteParamsSingleStore()
  104. {
  105. $storeCode = 'custom_store';
  106. $data = ['_scope' => $storeCode, '_scope_to_url' => true];
  107. $this->scopeConfigMock
  108. ->expects($this->once())
  109. ->method('getValue')
  110. ->with(
  111. \Magento\Store\Model\Store::XML_PATH_STORE_IN_URL,
  112. \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
  113. $storeCode
  114. )
  115. ->will($this->returnValue(false));
  116. $this->storeManagerMock->expects($this->any())->method('hasSingleStore')->willReturn(true);
  117. /** @var \PHPUnit_Framework_MockObject_MockObject $routeParamsResolverMock */
  118. $routeParamsResolverMock = $this->getMockBuilder(\Magento\Framework\Url\RouteParamsResolver::class)
  119. ->setMethods(['setScope', 'getScope'])
  120. ->disableOriginalConstructor()
  121. ->getMock();
  122. $routeParamsResolverMock->expects($this->once())->method('setScope')->with($storeCode);
  123. $routeParamsResolverMock->expects($this->once())->method('getScope')->willReturn($storeCode);
  124. $this->queryParamsResolverMock->expects($this->never())->method('setQueryParam');
  125. $this->model->beforeSetRouteParams(
  126. $routeParamsResolverMock,
  127. $data
  128. );
  129. }
  130. public function testBeforeSetRouteParamsNoScopeInParams()
  131. {
  132. $storeCode = 'custom_store';
  133. $data = ['_scope_to_url' => true];
  134. $this->scopeConfigMock
  135. ->expects($this->once())
  136. ->method('getValue')
  137. ->with(
  138. \Magento\Store\Model\Store::XML_PATH_STORE_IN_URL,
  139. \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
  140. $storeCode
  141. )
  142. ->will($this->returnValue(true));
  143. $this->storeManagerMock->expects($this->any())->method('hasSingleStore')->willReturn(false);
  144. /** @var \PHPUnit_Framework_MockObject_MockObject $routeParamsResolverMock */
  145. $routeParamsResolverMock = $this->getMockBuilder(\Magento\Framework\Url\RouteParamsResolver::class)
  146. ->setMethods(['setScope', 'getScope'])
  147. ->disableOriginalConstructor()
  148. ->getMock();
  149. $routeParamsResolverMock->expects($this->never())->method('setScope');
  150. $routeParamsResolverMock->expects($this->once())->method('getScope')->willReturn(false);
  151. $this->queryParamsResolverMock->expects($this->never())->method('setQueryParam')->with('___store', $storeCode);
  152. $this->model->beforeSetRouteParams(
  153. $routeParamsResolverMock,
  154. $data
  155. );
  156. }
  157. }