Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ItemCarrierTest.php
Go to the documentation of this file.
1 <?php
7 
9 
13 class ItemCarrierTest extends \PHPUnit\Framework\TestCase
14 {
16  protected $model;
17 
19  protected $sessionMock;
20 
23 
25  protected $cartMock;
26 
28  protected $loggerMock;
29 
32 
34  protected $cartHelperMock;
35 
37  protected $urlBuilderMock;
38 
40  protected $managerMock;
41 
43  protected $redirectMock;
44 
45  protected function setUp()
46  {
47  $this->sessionMock = $this->getMockBuilder(\Magento\Customer\Model\Session::class)
48  ->disableOriginalConstructor()
49  ->getMock();
50  $this->quantityProcessorMock = $this->getMockBuilder(\Magento\Wishlist\Model\LocaleQuantityProcessor::class)
51  ->disableOriginalConstructor()
52  ->getMock();
53  $this->cartMock = $this->getMockBuilder(\Magento\Checkout\Model\Cart::class)
54  ->disableOriginalConstructor()
55  ->getMock();
56  $this->loggerMock = $this->getMockBuilder(\Psr\Log\LoggerInterface::class)
57  ->getMockForAbstractClass();
58  $this->wishlistHelperMock = $this->getMockBuilder(\Magento\Wishlist\Helper\Data::class)
59  ->disableOriginalConstructor()
60  ->getMock();
61  $this->cartHelperMock = $this->getMockBuilder(\Magento\Checkout\Helper\Cart::class)
62  ->disableOriginalConstructor()
63  ->getMock();
64  $this->urlBuilderMock = $this->getMockBuilder(\Magento\Framework\UrlInterface::class)
65  ->getMockForAbstractClass();
66  $this->managerMock = $this->getMockBuilder(\Magento\Framework\Message\ManagerInterface::class)
67  ->getMockForAbstractClass();
68  $this->redirectMock = $this->getMockBuilder(\Magento\Framework\App\Response\RedirectInterface::class)
69  ->getMockForAbstractClass();
70 
71  $this->model = new \Magento\Wishlist\Model\ItemCarrier(
72  $this->sessionMock,
73  $this->quantityProcessorMock,
74  $this->cartMock,
75  $this->loggerMock,
76  $this->wishlistHelperMock,
77  $this->cartHelperMock,
78  $this->urlBuilderMock,
79  $this->managerMock,
80  $this->redirectMock
81  );
82  }
83 
87  public function testMoveAllToCart()
88  {
89  $wishlistId = 7;
90  $sessionCustomerId = 23;
91  $itemOneId = 14;
92  $itemTwoId = 17;
93  $productOneName = 'product one';
94  $productTwoName = 'product two';
95  $qtys = [14 => 21];
96  $isOwner = true;
97  $indexUrl = 'index_url';
98  $redirectUrl = 'redirect_url';
99 
101  $itemOneMock = $this->getMockBuilder(\Magento\Wishlist\Model\Item::class)
102  ->setMethods(['getProduct', 'unsProduct', 'getId', 'setQty', 'addToCart', 'delete', 'getProductUrl'])
103  ->disableOriginalConstructor()
104  ->getMock();
106  $itemTwoMock = $this->getMockBuilder(\Magento\Wishlist\Model\Item::class)
107  ->setMethods(['getProduct', 'unsProduct', 'getId', 'setQty', 'addToCart', 'delete', 'getProductUrl'])
108  ->disableOriginalConstructor()
109  ->getMock();
110 
112  $productOneMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
113  ->setMethods(['getDisableAddToCart', 'setDisableAddToCart', 'getName'])
114  ->disableOriginalConstructor()
115  ->getMock();
117  $productTwoMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
118  ->setMethods(['getDisableAddToCart', 'setDisableAddToCart', 'getName'])
119  ->disableOriginalConstructor()
120  ->getMock();
121 
122  $itemOneMock->expects($this->any())
123  ->method('getProduct')
124  ->willReturn($productOneMock);
125  $itemTwoMock->expects($this->any())
126  ->method('getProduct')
127  ->willReturn($productTwoMock);
128 
129  $collection = [$itemOneMock, $itemTwoMock];
130 
132  $wishlistMock = $this->getMockBuilder(\Magento\Wishlist\Model\Wishlist::class)
133  ->disableOriginalConstructor()
134  ->getMock();
135 
136  $this->sessionMock->expects($this->once())
137  ->method('getCustomerId')
138  ->willReturn($sessionCustomerId);
139 
140  $wishlistMock->expects($this->once())
141  ->method('isOwner')
142  ->with($sessionCustomerId)
143  ->willReturn($isOwner);
144  $wishlistMock->expects($this->once())
145  ->method('getId')
146  ->willReturn($wishlistId);
147 
149  $collectionMock = $this->getMockBuilder(\Magento\Wishlist\Model\ResourceModel\Item\Collection::class)
150  ->disableOriginalConstructor()
151  ->getMock();
152 
153  $wishlistMock->expects($this->once())
154  ->method('getItemCollection')
155  ->willReturn($collectionMock);
156 
157  $collectionMock->expects($this->once())
158  ->method('setVisibilityFilter')
159  ->with(true)
160  ->willReturn($collection);
161 
162  $productOneMock->expects($this->once())
163  ->method('getDisableAddToCart')
164  ->willReturn(true);
165  $productOneMock->expects($this->once())
166  ->method('setDisableAddToCart')
167  ->with(true);
168  $productTwoMock->expects($this->once())
169  ->method('getDisableAddToCart')
170  ->willReturn(false);
171  $productTwoMock->expects($this->once())
172  ->method('setDisableAddToCart')
173  ->with(false);
174 
175  $itemOneMock->expects($this->once())
176  ->method('unsProduct');
177  $itemTwoMock->expects($this->once())
178  ->method('unsProduct');
179  $itemOneMock->expects($this->exactly(2))
180  ->method('getId')
181  ->willReturn($itemOneId);
182  $itemTwoMock->expects($this->once())
183  ->method('getId')
184  ->willReturn($itemTwoId);
185 
186  $this->quantityProcessorMock->expects($this->once())
187  ->method('process')
188  ->with($qtys[$itemOneId])
189  ->willReturnArgument(0);
190  $itemOneMock->expects($this->once())
191  ->method('setQty')
192  ->with($qtys[$itemOneId])
193  ->willReturnSelf();
194  $itemTwoMock->expects($this->never())
195  ->method('setQty');
196 
197  $itemOneMock->expects($this->once())
198  ->method('addToCart')
199  ->with($this->cartMock, $isOwner)
200  ->willReturn(false);
201  $itemTwoMock->expects($this->once())
202  ->method('addToCart')
203  ->with($this->cartMock, $isOwner)
204  ->willReturn(true);
205 
206  $this->wishlistHelperMock->expects($this->once())
207  ->method('getListUrl')
208  ->with($wishlistId)
209  ->willReturn($indexUrl);
210 
211  $this->cartHelperMock->expects($this->once())
212  ->method('getShouldRedirectToCart')
213  ->with(null)
214  ->willReturn(true);
215  $this->cartHelperMock->expects($this->once())
216  ->method('getCartUrl')
217  ->willReturn($redirectUrl);
218 
219  $wishlistMock->expects($this->once())
220  ->method('save')
221  ->willReturnSelf();
222 
223  $productOneMock->expects($this->any())
224  ->method('getName')
225  ->willReturn($productOneName);
226  $productTwoMock->expects($this->any())
227  ->method('getName')
228  ->willReturn($productTwoName);
229 
230  $this->managerMock->expects($this->once())
231  ->method('addSuccess')
232  ->with(__('%1 product(s) have been added to shopping cart: %2.', 1, '"' . $productTwoName . '"'), null)
233  ->willReturnSelf();
234 
235  $this->cartMock->expects($this->once())
236  ->method('save')
237  ->willReturnSelf();
238 
240  $quoteMock = $this->getMockBuilder(\Magento\Quote\Model\Quote::class)
241  ->disableOriginalConstructor()
242  ->getMock();
243 
244  $this->cartMock->expects($this->once())
245  ->method('getQuote')
246  ->willReturn($quoteMock);
247 
248  $quoteMock->expects($this->once())
249  ->method('collectTotals')
250  ->willReturnSelf();
251 
252  $this->wishlistHelperMock->expects($this->once())
253  ->method('calculate')
254  ->willReturnSelf();
255 
256  $this->assertEquals($redirectUrl, $this->model->moveAllToCart($wishlistMock, $qtys));
257  }
258 
262  public function testMoveAllToCartWithNotSalableAndOptions()
263  {
264  $sessionCustomerId = 23;
265  $itemOneId = 14;
266  $itemTwoId = 17;
267  $productOneName = 'product one';
268  $productTwoName = 'product two';
269  $qtys = [14 => 21, 17 => 29];
270  $isOwner = false;
271  $indexUrl = 'index_url';
272  $redirectUrl = 'redirect_url';
273  $sharingCode = 'sharingcode';
274 
276  $itemOneMock = $this->getMockBuilder(\Magento\Wishlist\Model\Item::class)
277  ->setMethods(['getProduct', 'unsProduct', 'getId', 'setQty', 'addToCart', 'delete', 'getProductUrl'])
278  ->disableOriginalConstructor()
279  ->getMock();
281  $itemTwoMock = $this->getMockBuilder(\Magento\Wishlist\Model\Item::class)
282  ->setMethods(['getProduct', 'unsProduct', 'getId', 'setQty', 'addToCart', 'delete', 'getProductUrl'])
283  ->disableOriginalConstructor()
284  ->getMock();
285 
287  $productOneMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
288  ->setMethods(['getDisableAddToCart', 'setDisableAddToCart', 'getName'])
289  ->disableOriginalConstructor()
290  ->getMock();
292  $productTwoMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
293  ->setMethods(['getDisableAddToCart', 'setDisableAddToCart', 'getName'])
294  ->disableOriginalConstructor()
295  ->getMock();
296 
297  $itemOneMock->expects($this->any())
298  ->method('getProduct')
299  ->willReturn($productOneMock);
300  $itemTwoMock->expects($this->any())
301  ->method('getProduct')
302  ->willReturn($productTwoMock);
303 
304  $collection = [$itemOneMock, $itemTwoMock];
305 
307  $wishlistMock = $this->getMockBuilder(\Magento\Wishlist\Model\Wishlist::class)
308  ->setMethods(['isOwner', 'getItemCollection', 'getId', 'getSharingCode', 'save'])
309  ->disableOriginalConstructor()
310  ->getMock();
311 
312  $this->sessionMock->expects($this->once())
313  ->method('getCustomerId')
314  ->willReturn($sessionCustomerId);
315 
316  $wishlistMock->expects($this->once())
317  ->method('isOwner')
318  ->with($sessionCustomerId)
319  ->willReturn($isOwner);
320 
322  $collectionMock = $this->getMockBuilder(\Magento\Wishlist\Model\ResourceModel\Item\Collection::class)
323  ->disableOriginalConstructor()
324  ->getMock();
325 
326  $wishlistMock->expects($this->once())
327  ->method('getItemCollection')
328  ->willReturn($collectionMock);
329 
330  $collectionMock->expects($this->once())
331  ->method('setVisibilityFilter')
332  ->with(true)
333  ->willReturn($collection);
334 
335  $productOneMock->expects($this->once())
336  ->method('getDisableAddToCart')
337  ->willReturn(false);
338  $productOneMock->expects($this->once())
339  ->method('setDisableAddToCart')
340  ->with(false);
341  $productTwoMock->expects($this->once())
342  ->method('getDisableAddToCart')
343  ->willReturn(true);
344  $productTwoMock->expects($this->once())
345  ->method('setDisableAddToCart')
346  ->with(true);
347 
348  $itemOneMock->expects($this->once())
349  ->method('unsProduct');
350  $itemTwoMock->expects($this->once())
351  ->method('unsProduct');
352  $itemOneMock->expects($this->exactly(2))
353  ->method('getId')
354  ->willReturn($itemOneId);
355  $itemTwoMock->expects($this->exactly(2))
356  ->method('getId')
357  ->willReturn($itemTwoId);
358 
359  $this->quantityProcessorMock->expects($this->exactly(2))
360  ->method('process')
361  ->willReturnMap(
362  [
363  [$qtys[$itemOneId], $qtys[$itemOneId]],
364  [$qtys[$itemTwoId], $qtys[$itemTwoId]],
365  ]
366  );
367  $itemOneMock->expects($this->once())
368  ->method('setQty')
369  ->with($qtys[$itemOneId])
370  ->willReturnSelf();
371  $itemTwoMock->expects($this->once())
372  ->method('setQty')
373  ->with($qtys[$itemTwoId])
374  ->willReturnSelf();
375 
376  $itemOneMock->expects($this->once())
377  ->method('addToCart')
378  ->with($this->cartMock, $isOwner)
379  ->willThrowException(new \Magento\Catalog\Model\Product\Exception(__('Product Exception.')));
380  $itemTwoMock->expects($this->once())
381  ->method('addToCart')
382  ->with($this->cartMock, $isOwner)
383  ->willThrowException(new \Magento\Framework\Exception\LocalizedException(__('Localized Exception.')));
384 
386  $quoteMock = $this->getMockBuilder(\Magento\Quote\Model\Quote::class)
387  ->disableOriginalConstructor()
388  ->getMock();
389 
390  $this->cartMock->expects($this->exactly(4))
391  ->method('getQuote')
392  ->willReturn($quoteMock);
393 
395  $itemMock = $this->getMockBuilder(\Magento\Quote\Model\Quote\Item::class)
396  ->disableOriginalConstructor()
397  ->getMock();
398 
399  $quoteMock->expects($this->exactly(2))
400  ->method('getItemByProduct')
401  ->willReturn($itemMock);
402 
403  $quoteMock->expects($this->exactly(2))
404  ->method('deleteItem')
405  ->with($itemMock)
406  ->willReturnSelf();
407 
408  $wishlistMock->expects($this->once())
409  ->method('getSharingCode')
410  ->willReturn($sharingCode);
411 
412  $this->urlBuilderMock->expects($this->once())
413  ->method('getUrl')
414  ->with('wishlist/shared', ['code' => $sharingCode])
415  ->willReturn($indexUrl);
416 
417  $this->cartHelperMock->expects($this->once())
418  ->method('getShouldRedirectToCart')
419  ->with(null)
420  ->willReturn(false);
421 
422  $this->redirectMock->expects($this->exactly(2))
423  ->method('getRefererUrl')
424  ->willReturn($redirectUrl);
425 
426  $productOneMock->expects($this->any())
427  ->method('getName')
428  ->willReturn($productOneName);
429  $productTwoMock->expects($this->any())
430  ->method('getName')
431  ->willReturn($productTwoName);
432 
433  $this->managerMock->expects($this->at(0))
434  ->method('addError')
435  ->with(__('%1 for "%2".', 'Localized Exception', $productTwoName), null)
436  ->willReturnSelf();
437 
438  $this->managerMock->expects($this->at(1))
439  ->method('addError')
440  ->with(
441  __(
442  'We couldn\'t add the following product(s) to the shopping cart: %1.',
443  '"' . $productOneName . '"'
444  ),
445  null
446  )->willReturnSelf();
447 
448  $this->wishlistHelperMock->expects($this->once())
449  ->method('calculate')
450  ->willReturnSelf();
451 
452  $this->assertEquals($indexUrl, $this->model->moveAllToCart($wishlistMock, $qtys));
453  }
454 
458  public function testMoveAllToCartWithException()
459  {
460  $wishlistId = 7;
461  $sessionCustomerId = 23;
462  $itemOneId = 14;
463  $itemTwoId = 17;
464  $productOneName = 'product one';
465  $productTwoName = 'product two';
466  $qtys = [14 => 21];
467  $isOwner = true;
468  $indexUrl = 'index_url';
469 
471  $itemOneMock = $this->getMockBuilder(\Magento\Wishlist\Model\Item::class)
472  ->setMethods(['getProduct', 'unsProduct', 'getId', 'setQty', 'addToCart', 'delete', 'getProductUrl'])
473  ->disableOriginalConstructor()
474  ->getMock();
476  $itemTwoMock = $this->getMockBuilder(\Magento\Wishlist\Model\Item::class)
477  ->setMethods(['getProduct', 'unsProduct', 'getId', 'setQty', 'addToCart', 'delete', 'getProductUrl'])
478  ->disableOriginalConstructor()
479  ->getMock();
480 
482  $productOneMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
483  ->setMethods(['getDisableAddToCart', 'setDisableAddToCart', 'getName'])
484  ->disableOriginalConstructor()
485  ->getMock();
487  $productTwoMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
488  ->setMethods(['getDisableAddToCart', 'setDisableAddToCart', 'getName'])
489  ->disableOriginalConstructor()
490  ->getMock();
491 
492  $itemOneMock->expects($this->any())
493  ->method('getProduct')
494  ->willReturn($productOneMock);
495  $itemTwoMock->expects($this->any())
496  ->method('getProduct')
497  ->willReturn($productTwoMock);
498 
499  $collection = [$itemOneMock, $itemTwoMock];
500 
502  $wishlistMock = $this->getMockBuilder(\Magento\Wishlist\Model\Wishlist::class)
503  ->disableOriginalConstructor()
504  ->getMock();
505 
506  $this->sessionMock->expects($this->once())
507  ->method('getCustomerId')
508  ->willReturn($sessionCustomerId);
509 
510  $wishlistMock->expects($this->once())
511  ->method('isOwner')
512  ->with($sessionCustomerId)
513  ->willReturn($isOwner);
514  $wishlistMock->expects($this->once())
515  ->method('getId')
516  ->willReturn($wishlistId);
517 
519  $collectionMock = $this->getMockBuilder(\Magento\Wishlist\Model\ResourceModel\Item\Collection::class)
520  ->disableOriginalConstructor()
521  ->getMock();
522 
523  $wishlistMock->expects($this->once())
524  ->method('getItemCollection')
525  ->willReturn($collectionMock);
526 
527  $collectionMock->expects($this->once())
528  ->method('setVisibilityFilter')
529  ->with(true)
530  ->willReturn($collection);
531 
532  $productOneMock->expects($this->once())
533  ->method('getDisableAddToCart')
534  ->willReturn(true);
535  $productOneMock->expects($this->once())
536  ->method('setDisableAddToCart')
537  ->with(true);
538  $productTwoMock->expects($this->once())
539  ->method('getDisableAddToCart')
540  ->willReturn(false);
541  $productTwoMock->expects($this->once())
542  ->method('setDisableAddToCart')
543  ->with(false);
544 
545  $itemOneMock->expects($this->once())
546  ->method('unsProduct');
547  $itemTwoMock->expects($this->once())
548  ->method('unsProduct');
549  $itemOneMock->expects($this->exactly(2))
550  ->method('getId')
551  ->willReturn($itemOneId);
552  $itemTwoMock->expects($this->once())
553  ->method('getId')
554  ->willReturn($itemTwoId);
555 
556  $this->quantityProcessorMock->expects($this->once())
557  ->method('process')
558  ->with($qtys[$itemOneId])
559  ->willReturnArgument(0);
560  $itemOneMock->expects($this->once())
561  ->method('setQty')
562  ->with($qtys[$itemOneId])
563  ->willReturnSelf();
564  $itemTwoMock->expects($this->never())
565  ->method('setQty');
566 
567  $itemOneMock->expects($this->once())
568  ->method('addToCart')
569  ->with($this->cartMock, $isOwner)
570  ->willReturn(true);
571 
572  $exception = new \Exception('Exception.');
573  $itemTwoMock->expects($this->once())
574  ->method('addToCart')
575  ->with($this->cartMock, $isOwner)
576  ->willThrowException($exception);
577 
578  $this->loggerMock->expects($this->once())
579  ->method('critical')
580  ->with($exception, []);
581 
582  $this->managerMock->expects($this->at(0))
583  ->method('addError')
584  ->with(__('We can\'t add this item to your shopping cart right now.'), null)
585  ->willReturnSelf();
586 
587  $this->wishlistHelperMock->expects($this->once())
588  ->method('getListUrl')
589  ->with($wishlistId)
590  ->willReturn($indexUrl);
591 
592  $this->cartHelperMock->expects($this->once())
593  ->method('getShouldRedirectToCart')
594  ->with(null)
595  ->willReturn(false);
596 
597  $this->redirectMock->expects($this->once())
598  ->method('getRefererUrl')
599  ->willReturn('');
600 
601  $wishlistMock->expects($this->once())
602  ->method('save')
603  ->willThrowException(new \Exception());
604 
605  $this->managerMock->expects($this->at(1))
606  ->method('addError')
607  ->with(__('We can\'t update the Wish List right now.'), null)
608  ->willReturnSelf();
609 
610  $productOneMock->expects($this->any())
611  ->method('getName')
612  ->willReturn($productOneName);
613  $productTwoMock->expects($this->any())
614  ->method('getName')
615  ->willReturn($productTwoName);
616 
617  $this->managerMock->expects($this->once())
618  ->method('addSuccess')
619  ->with(__('%1 product(s) have been added to shopping cart: %2.', 1, '"' . $productOneName . '"'), null)
620  ->willReturnSelf();
621 
622  $this->cartMock->expects($this->once())
623  ->method('save')
624  ->willReturnSelf();
625 
627  $quoteMock = $this->getMockBuilder(\Magento\Quote\Model\Quote::class)
628  ->disableOriginalConstructor()
629  ->getMock();
630 
631  $this->cartMock->expects($this->once())
632  ->method('getQuote')
633  ->willReturn($quoteMock);
634 
635  $quoteMock->expects($this->once())
636  ->method('collectTotals')
637  ->willReturnSelf();
638 
639  $this->wishlistHelperMock->expects($this->once())
640  ->method('calculate')
641  ->willReturnSelf();
642 
643  $this->assertEquals($indexUrl, $this->model->moveAllToCart($wishlistMock, $qtys));
644  }
645 }
__()
Definition: __.php:13