DataTest.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Wishlist\Test\Unit\Helper;
  7. use Magento\Catalog\Model\Product;
  8. use Magento\Framework\App\ActionInterface;
  9. use Magento\Framework\App\Helper\Context;
  10. use Magento\Framework\App\RequestInterface;
  11. use Magento\Framework\Data\Helper\PostHelper;
  12. use Magento\Framework\Registry;
  13. use Magento\Framework\Url\EncoderInterface;
  14. use Magento\Framework\UrlInterface;
  15. use Magento\Store\Model\Store;
  16. use Magento\Store\Model\StoreManagerInterface;
  17. use Magento\Wishlist\Controller\WishlistProviderInterface;
  18. use Magento\Wishlist\Model\Item as WishlistItem;
  19. use Magento\Wishlist\Model\Wishlist;
  20. /**
  21. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  22. */
  23. class DataTest extends \PHPUnit\Framework\TestCase
  24. {
  25. /** @var \Magento\Wishlist\Helper\Data */
  26. protected $model;
  27. /** @var WishlistProviderInterface |\PHPUnit_Framework_MockObject_MockObject */
  28. protected $wishlistProvider;
  29. /** @var Registry |\PHPUnit_Framework_MockObject_MockObject */
  30. protected $coreRegistry;
  31. /** @var PostHelper |\PHPUnit_Framework_MockObject_MockObject */
  32. protected $postDataHelper;
  33. /** @var WishlistItem |\PHPUnit_Framework_MockObject_MockObject */
  34. protected $wishlistItem;
  35. /** @var Product |\PHPUnit_Framework_MockObject_MockObject */
  36. protected $product;
  37. /** @var StoreManagerInterface |\PHPUnit_Framework_MockObject_MockObject */
  38. protected $storeManager;
  39. /** @var Store |\PHPUnit_Framework_MockObject_MockObject */
  40. protected $store;
  41. /** @var UrlInterface |\PHPUnit_Framework_MockObject_MockObject */
  42. protected $urlBuilder;
  43. /** @var Wishlist |\PHPUnit_Framework_MockObject_MockObject */
  44. protected $wishlist;
  45. /** @var EncoderInterface|\PHPUnit_Framework_MockObject_MockObject */
  46. protected $urlEncoderMock;
  47. /** @var RequestInterface|\PHPUnit_Framework_MockObject_MockObject */
  48. protected $requestMock;
  49. /** @var Context |\PHPUnit_Framework_MockObject_MockObject */
  50. protected $context;
  51. /**
  52. * Set up mock objects for tested class
  53. *
  54. * @return void
  55. */
  56. protected function setUp()
  57. {
  58. $this->store = $this->getMockBuilder(\Magento\Store\Model\Store::class)
  59. ->disableOriginalConstructor()
  60. ->getMock();
  61. $this->storeManager = $this->getMockBuilder(\Magento\Store\Model\StoreManagerInterface::class)
  62. ->disableOriginalConstructor()
  63. ->getMock();
  64. $this->storeManager->expects($this->any())
  65. ->method('getStore')
  66. ->willReturn($this->store);
  67. $this->urlEncoderMock = $this->getMockBuilder(\Magento\Framework\Url\EncoderInterface::class)
  68. ->disableOriginalConstructor()
  69. ->getMock();
  70. $this->requestMock = $this->getMockBuilder(\Magento\Framework\App\RequestInterface::class)
  71. ->disableOriginalConstructor()
  72. ->setMethods(['getServer'])
  73. ->getMockForAbstractClass();
  74. $this->urlBuilder = $this->getMockBuilder(\Magento\Framework\UrlInterface::class)
  75. ->disableOriginalConstructor()
  76. ->getMock();
  77. $this->context = $this->getMockBuilder(\Magento\Framework\App\Helper\Context::class)
  78. ->disableOriginalConstructor()
  79. ->getMock();
  80. $this->context->expects($this->once())
  81. ->method('getUrlBuilder')
  82. ->willReturn($this->urlBuilder);
  83. $this->context->expects($this->once())
  84. ->method('getUrlEncoder')
  85. ->willReturn($this->urlEncoderMock);
  86. $this->context->expects($this->once())
  87. ->method('getRequest')
  88. ->willReturn($this->requestMock);
  89. $this->wishlistProvider = $this->getMockBuilder(\Magento\Wishlist\Controller\WishlistProviderInterface::class)
  90. ->disableOriginalConstructor()
  91. ->getMock();
  92. $this->coreRegistry = $this->getMockBuilder(\Magento\Framework\Registry::class)
  93. ->disableOriginalConstructor()
  94. ->getMock();
  95. $this->postDataHelper = $this->getMockBuilder(\Magento\Framework\Data\Helper\PostHelper::class)
  96. ->disableOriginalConstructor()
  97. ->getMock();
  98. $this->wishlistItem = $this->getMockBuilder(\Magento\Wishlist\Model\Item::class)
  99. ->disableOriginalConstructor()
  100. ->setMethods([
  101. 'getProduct',
  102. 'getWishlistItemId',
  103. 'getQty',
  104. ])
  105. ->getMock();
  106. $this->wishlist = $this->getMockBuilder(\Magento\Wishlist\Model\Wishlist::class)
  107. ->disableOriginalConstructor()
  108. ->getMock();
  109. $this->product = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
  110. ->disableOriginalConstructor()
  111. ->getMock();
  112. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  113. $this->model = $objectManager->getObject(
  114. \Magento\Wishlist\Helper\Data::class,
  115. [
  116. 'context' => $this->context,
  117. 'storeManager' => $this->storeManager,
  118. 'wishlistProvider' => $this->wishlistProvider,
  119. 'coreRegistry' => $this->coreRegistry,
  120. 'postDataHelper' => $this->postDataHelper
  121. ]
  122. );
  123. }
  124. public function testGetAddToCartUrl()
  125. {
  126. $url = 'http://magento.com/wishlist/index/index/wishlist_id/1/?___store=default';
  127. $this->store->expects($this->once())
  128. ->method('getUrl')
  129. ->with('wishlist/index/cart', ['item' => '%item%'])
  130. ->will($this->returnValue($url));
  131. $this->urlBuilder->expects($this->any())
  132. ->method('getUrl')
  133. ->with('wishlist/index/index', ['_current' => true, '_use_rewrite' => true, '_scope_to_url' => true])
  134. ->will($this->returnValue($url));
  135. $this->assertEquals($url, $this->model->getAddToCartUrl('%item%'));
  136. }
  137. public function testGetConfigureUrl()
  138. {
  139. $url = 'http://magento2ce/wishlist/index/configure/id/4/product_id/30/';
  140. /** @var \Magento\Wishlist\Model\Item|\PHPUnit_Framework_MockObject_MockObject $wishlistItem */
  141. $wishlistItem = $this->createPartialMock(
  142. \Magento\Wishlist\Model\Item::class,
  143. ['getWishlistItemId', 'getProductId']
  144. );
  145. $wishlistItem
  146. ->expects($this->once())
  147. ->method('getWishlistItemId')
  148. ->will($this->returnValue(4));
  149. $wishlistItem
  150. ->expects($this->once())
  151. ->method('getProductId')
  152. ->will($this->returnValue(30));
  153. $this->urlBuilder->expects($this->once())
  154. ->method('getUrl')
  155. ->with('wishlist/index/configure', ['id' => 4, 'product_id' => 30])
  156. ->will($this->returnValue($url));
  157. $this->assertEquals($url, $this->model->getConfigureUrl($wishlistItem));
  158. }
  159. public function testGetWishlist()
  160. {
  161. $this->wishlistProvider->expects($this->once())
  162. ->method('getWishlist')
  163. ->will($this->returnValue($this->wishlist));
  164. $this->assertEquals($this->wishlist, $this->model->getWishlist());
  165. }
  166. public function testGetWishlistWithCoreRegistry()
  167. {
  168. $this->coreRegistry->expects($this->any())
  169. ->method('registry')
  170. ->willReturn($this->wishlist);
  171. $this->assertEquals($this->wishlist, $this->model->getWishlist());
  172. }
  173. public function testGetAddToCartParams()
  174. {
  175. $url = 'result url';
  176. $storeId = 1;
  177. $wishlistItemId = 1;
  178. $wishlistItemQty = 1;
  179. $this->wishlistItem->expects($this->once())
  180. ->method('getProduct')
  181. ->willReturn($this->product);
  182. $this->wishlistItem->expects($this->once())
  183. ->method('getWishlistItemId')
  184. ->willReturn($wishlistItemId);
  185. $this->wishlistItem->expects($this->once())
  186. ->method('getQty')
  187. ->willReturn($wishlistItemQty);
  188. $this->product->expects($this->once())
  189. ->method('isVisibleInSiteVisibility')
  190. ->willReturn(true);
  191. $this->product->expects($this->once())
  192. ->method('getStoreId')
  193. ->willReturn($storeId);
  194. $this->requestMock->expects($this->never())
  195. ->method('getServer');
  196. $this->urlEncoderMock->expects($this->never())
  197. ->method('encode');
  198. $this->store->expects($this->once())
  199. ->method('getUrl')
  200. ->with('wishlist/index/cart')
  201. ->willReturn($url);
  202. $expected = [
  203. 'item' => $wishlistItemId,
  204. 'qty' => $wishlistItemQty,
  205. ActionInterface::PARAM_NAME_URL_ENCODED => '',
  206. ];
  207. $this->postDataHelper->expects($this->once())
  208. ->method('getPostData')
  209. ->with($url, $expected)
  210. ->willReturn($url);
  211. $this->assertEquals($url, $this->model->getAddToCartParams($this->wishlistItem));
  212. }
  213. public function testGetAddToCartParamsWithReferer()
  214. {
  215. $url = 'result url';
  216. $storeId = 1;
  217. $wishlistItemId = 1;
  218. $wishlistItemQty = 1;
  219. $referer = 'referer';
  220. $refererEncoded = 'referer_encoded';
  221. $this->wishlistItem->expects($this->once())
  222. ->method('getProduct')
  223. ->willReturn($this->product);
  224. $this->wishlistItem->expects($this->once())
  225. ->method('getWishlistItemId')
  226. ->willReturn($wishlistItemId);
  227. $this->wishlistItem->expects($this->once())
  228. ->method('getQty')
  229. ->willReturn($wishlistItemQty);
  230. $this->product->expects($this->once())
  231. ->method('isVisibleInSiteVisibility')
  232. ->willReturn(true);
  233. $this->product->expects($this->once())
  234. ->method('getStoreId')
  235. ->willReturn($storeId);
  236. $this->requestMock->expects($this->once())
  237. ->method('getServer')
  238. ->with('HTTP_REFERER')
  239. ->willReturn($referer);
  240. $this->urlEncoderMock->expects($this->once())
  241. ->method('encode')
  242. ->with($referer)
  243. ->willReturn($refererEncoded);
  244. $this->store->expects($this->once())
  245. ->method('getUrl')
  246. ->with('wishlist/index/cart')
  247. ->willReturn($url);
  248. $expected = [
  249. 'item' => $wishlistItemId,
  250. ActionInterface::PARAM_NAME_URL_ENCODED => $refererEncoded,
  251. 'qty' => $wishlistItemQty,
  252. ];
  253. $this->postDataHelper->expects($this->once())
  254. ->method('getPostData')
  255. ->with($url, $expected)
  256. ->willReturn($url);
  257. $this->assertEquals($url, $this->model->getAddToCartParams($this->wishlistItem, true));
  258. }
  259. public function testGetRemoveParams()
  260. {
  261. $url = 'result url';
  262. $wishlistItemId = 1;
  263. $this->wishlistItem->expects($this->once())
  264. ->method('getWishlistItemId')
  265. ->willReturn($wishlistItemId);
  266. $this->requestMock->expects($this->never())
  267. ->method('getServer');
  268. $this->urlEncoderMock->expects($this->never())
  269. ->method('encode');
  270. $this->urlBuilder->expects($this->once())
  271. ->method('getUrl')
  272. ->with('wishlist/index/remove', [])
  273. ->willReturn($url);
  274. $this->postDataHelper->expects($this->once())
  275. ->method('getPostData')
  276. ->with($url, ['item' => $wishlistItemId, ActionInterface::PARAM_NAME_URL_ENCODED => ''])
  277. ->willReturn($url);
  278. $this->assertEquals($url, $this->model->getRemoveParams($this->wishlistItem));
  279. }
  280. public function testGetRemoveParamsWithReferer()
  281. {
  282. $url = 'result url';
  283. $wishlistItemId = 1;
  284. $referer = 'referer';
  285. $refererEncoded = 'referer_encoded';
  286. $this->wishlistItem->expects($this->once())
  287. ->method('getWishlistItemId')
  288. ->willReturn($wishlistItemId);
  289. $this->requestMock->expects($this->once())
  290. ->method('getServer')
  291. ->with('HTTP_REFERER')
  292. ->willReturn($referer);
  293. $this->urlEncoderMock->expects($this->once())
  294. ->method('encode')
  295. ->with($referer)
  296. ->willReturn($refererEncoded);
  297. $this->urlBuilder->expects($this->once())
  298. ->method('getUrl')
  299. ->with('wishlist/index/remove', [])
  300. ->willReturn($url);
  301. $this->postDataHelper->expects($this->once())
  302. ->method('getPostData')
  303. ->with($url, ['item' => $wishlistItemId, ActionInterface::PARAM_NAME_URL_ENCODED => $refererEncoded])
  304. ->willReturn($url);
  305. $this->assertEquals($url, $this->model->getRemoveParams($this->wishlistItem, true));
  306. }
  307. public function testGetSharedAddToCartUrl()
  308. {
  309. $url = 'result url';
  310. $storeId = 1;
  311. $wishlistItemId = 1;
  312. $wishlistItemQty = 1;
  313. $this->wishlistItem->expects($this->once())
  314. ->method('getProduct')
  315. ->willReturn($this->product);
  316. $this->wishlistItem->expects($this->once())
  317. ->method('getWishlistItemId')
  318. ->willReturn($wishlistItemId);
  319. $this->wishlistItem->expects($this->once())
  320. ->method('getQty')
  321. ->willReturn($wishlistItemQty);
  322. $this->product->expects($this->once())
  323. ->method('isVisibleInSiteVisibility')
  324. ->willReturn(true);
  325. $this->product->expects($this->once())
  326. ->method('getStoreId')
  327. ->willReturn($storeId);
  328. $this->store->expects($this->once())
  329. ->method('getUrl')
  330. ->with('wishlist/shared/cart')
  331. ->willReturn($url);
  332. $expected = [
  333. 'item' => $wishlistItemId,
  334. 'qty' => $wishlistItemQty,
  335. ];
  336. $this->postDataHelper->expects($this->once())
  337. ->method('getPostData')
  338. ->with($url, $expected)
  339. ->willReturn($url);
  340. $this->assertEquals($url, $this->model->getSharedAddToCartUrl($this->wishlistItem));
  341. }
  342. public function testGetSharedAddAllToCartUrl()
  343. {
  344. $url = 'result url';
  345. $this->store->expects($this->once())
  346. ->method('getUrl')
  347. ->with('*/*/allcart', ['_current' => true])
  348. ->willReturn($url);
  349. $this->postDataHelper->expects($this->once())
  350. ->method('getPostData')
  351. ->with($url)
  352. ->willReturn($url);
  353. $this->assertEquals($url, $this->model->getSharedAddAllToCartUrl());
  354. }
  355. }