Skip to content

Commit df2c759

Browse files
author
Rudolf Vince
committed
Implement ActionInterface for Wishlist/Shared/Cart + unit test
1 parent a002bf2 commit df2c759

File tree

2 files changed

+88
-57
lines changed

2 files changed

+88
-57
lines changed

app/code/Magento/Wishlist/Controller/Shared/Cart.php

Lines changed: 44 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,22 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
7+
declare(strict_types=1);
8+
69
namespace Magento\Wishlist\Controller\Shared;
710

811
use Magento\Catalog\Model\Product\Exception as ProductException;
912
use Magento\Checkout\Helper\Cart as CartHelper;
1013
use Magento\Checkout\Model\Cart as CustomerCart;
11-
use Magento\Framework\App\Action\Context as ActionContext;
1214
use Magento\Framework\App\Action\HttpGetActionInterface;
15+
use Magento\Framework\App\RequestInterface;
1316
use Magento\Framework\Controller\ResultFactory;
17+
use Magento\Framework\Controller\Result\Redirect as ResultRedirect;
1418
use Magento\Framework\Escaper;
1519
use Magento\Framework\Exception\LocalizedException;
20+
use Magento\Framework\Message\ManagerInterface as MessageManagerInterface;
21+
use Magento\Framework\App\Response\RedirectInterface;
1622
use Magento\Wishlist\Model\Item;
1723
use Magento\Wishlist\Model\Item\OptionFactory;
1824
use Magento\Wishlist\Model\ItemFactory;
@@ -23,55 +29,73 @@
2329
*
2430
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2531
*/
26-
class Cart extends \Magento\Framework\App\Action\Action implements HttpGetActionInterface
32+
class Cart implements HttpGetActionInterface
2733
{
2834
/**
2935
* @var CustomerCart
3036
*/
31-
protected $cart;
37+
private $cart;
3238

3339
/**
3440
* @var OptionFactory
3541
*/
36-
protected $optionFactory;
42+
private $optionFactory;
3743

3844
/**
3945
* @var ItemFactory
4046
*/
41-
protected $itemFactory;
47+
private $itemFactory;
4248

4349
/**
4450
* @var CartHelper
4551
*/
46-
protected $cartHelper;
52+
private $cartHelper;
4753

4854
/**
4955
* @var Escaper
5056
*/
51-
protected $escaper;
57+
private $escaper;
58+
59+
/**
60+
* @var RequestInterface
61+
*/
62+
private $request;
63+
64+
/**
65+
* @var RedirectInterface
66+
*/
67+
private $redirect;
68+
69+
/**
70+
* @var MessageManagerInterface
71+
*/
72+
private $messageManager;
5273

5374
/**
54-
* @param ActionContext $context
55-
* @param CustomerCart $cart
56-
* @param OptionFactory $optionFactory
57-
* @param ItemFactory $itemFactory
58-
* @param CartHelper $cartHelper
59-
* @param Escaper $escaper
75+
* @var ResultFactory
6076
*/
77+
private $resultFactory;
78+
6179
public function __construct(
62-
ActionContext $context,
6380
CustomerCart $cart,
6481
OptionFactory $optionFactory,
6582
ItemFactory $itemFactory,
6683
CartHelper $cartHelper,
67-
Escaper $escaper
84+
Escaper $escaper,
85+
RequestInterface $request,
86+
RedirectInterface $redirect,
87+
MessageManagerInterface $messageManager,
88+
ResultFactory $resultFactory
6889
) {
6990
$this->cart = $cart;
7091
$this->optionFactory = $optionFactory;
7192
$this->itemFactory = $itemFactory;
7293
$this->cartHelper = $cartHelper;
7394
$this->escaper = $escaper;
74-
parent::__construct($context);
95+
$this->request = $request;
96+
$this->redirect = $redirect;
97+
$this->messageManager = $messageManager;
98+
$this->resultFactory = $resultFactory;
7599
}
76100

77101
/**
@@ -80,17 +104,17 @@ public function __construct(
80104
* If Product has required options - redirect
81105
* to product view page with message about needed defined required options
82106
*
83-
* @return \Magento\Framework\Controller\Result\Redirect
107+
* @inheritDoc
84108
*/
85109
public function execute()
86110
{
87-
$itemId = (int)$this->getRequest()->getParam('item');
111+
$itemId = (int)$this->request->getParam('item');
88112

89113
/* @var $item Item */
90114
$item = $this->itemFactory->create()
91115
->load($itemId);
92116

93-
$redirectUrl = $this->_redirect->getRefererUrl();
117+
$redirectUrl = $this->redirect->getRefererUrl();
94118

95119
try {
96120
/** @var OptionCollection $options */
@@ -120,7 +144,7 @@ public function execute()
120144
} catch (\Exception $e) {
121145
$this->messageManager->addExceptionMessage($e, __('We can\'t add the item to the cart right now.'));
122146
}
123-
/** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
147+
/** @var ResultRedirect $resultRedirect */
124148
$resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
125149
$resultRedirect->setUrl($redirectUrl);
126150
return $resultRedirect;

app/code/Magento/Wishlist/Test/Unit/Controller/Shared/CartTest.php

Lines changed: 44 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
67
namespace Magento\Wishlist\Test\Unit\Controller\Shared;
78

89
use Magento\Catalog\Model\Product;
10+
use Magento\Catalog\Model\Product\Exception;
911
use Magento\Checkout\Helper\Cart as CartHelper;
1012
use Magento\Checkout\Model\Cart;
1113
use Magento\Framework\App\Action\Context as ActionContext;
@@ -23,88 +25,90 @@
2325
use Magento\Wishlist\Model\Item\OptionFactory;
2426
use Magento\Wishlist\Model\ItemFactory;
2527
use Magento\Wishlist\Model\ResourceModel\Item\Option\Collection as OptionCollection;
28+
use PHPUnit\Framework\MockObject\MockObject;
29+
use PHPUnit\Framework\TestCase;
2630

2731
/**
2832
* @SuppressWarnings(PHPMD.TooManyFields)
2933
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
3034
*/
31-
class CartTest extends \PHPUnit\Framework\TestCase
35+
class CartTest extends TestCase
3236
{
33-
/** @var SharedCart|\PHPUnit\Framework\MockObject\MockObject */
37+
/** @var SharedCart|MockObject */
3438
protected $model;
3539

36-
/** @var RequestInterface|\PHPUnit\Framework\MockObject\MockObject */
40+
/** @var RequestInterface|MockObject */
3741
protected $request;
3842

39-
/** @var ManagerInterface|\PHPUnit\Framework\MockObject\MockObject */
43+
/** @var ManagerInterface|MockObject */
4044
protected $messageManager;
4145

42-
/** @var ActionContext|\PHPUnit\Framework\MockObject\MockObject */
46+
/** @var ActionContext|MockObject */
4347
protected $context;
4448

45-
/** @var Cart|\PHPUnit\Framework\MockObject\MockObject */
49+
/** @var Cart|MockObject */
4650
protected $cart;
4751

48-
/** @var CartHelper|\PHPUnit\Framework\MockObject\MockObject */
52+
/** @var CartHelper|MockObject */
4953
protected $cartHelper;
5054

51-
/** @var Quote|\PHPUnit\Framework\MockObject\MockObject */
55+
/** @var Quote|MockObject */
5256
protected $quote;
5357

54-
/** @var OptionCollection|\PHPUnit\Framework\MockObject\MockObject */
58+
/** @var OptionCollection|MockObject */
5559
protected $optionCollection;
5660

57-
/** @var OptionFactory|\PHPUnit\Framework\MockObject\MockObject */
61+
/** @var OptionFactory|MockObject */
5862
protected $optionFactory;
5963

60-
/** @var Option|\PHPUnit\Framework\MockObject\MockObject */
64+
/** @var Option|MockObject */
6165
protected $option;
6266

63-
/** @var ItemFactory|\PHPUnit\Framework\MockObject\MockObject */
67+
/** @var ItemFactory|MockObject */
6468
protected $itemFactory;
6569

66-
/** @var Item|\PHPUnit\Framework\MockObject\MockObject */
70+
/** @var Item|MockObject */
6771
protected $item;
6872

69-
/** @var Escaper|\PHPUnit\Framework\MockObject\MockObject */
73+
/** @var Escaper|MockObject */
7074
protected $escaper;
7175

72-
/** @var RedirectInterface|\PHPUnit\Framework\MockObject\MockObject */
76+
/** @var RedirectInterface|MockObject */
7377
protected $redirect;
7478

75-
/** @var ResultFactory|\PHPUnit\Framework\MockObject\MockObject */
79+
/** @var ResultFactory|MockObject */
7680
protected $resultFactory;
7781

78-
/** @var Redirect|\PHPUnit\Framework\MockObject\MockObject */
82+
/** @var Redirect|MockObject */
7983
protected $resultRedirect;
8084

81-
/** @var Product|\PHPUnit\Framework\MockObject\MockObject */
85+
/** @var Product|MockObject */
8286
protected $product;
8387

8488
protected function setUp()
8589
{
86-
$this->request = $this->getMockBuilder(\Magento\Framework\App\RequestInterface::class)
90+
$this->request = $this->getMockBuilder(RequestInterface::class)
8791
->getMockForAbstractClass();
8892

89-
$this->redirect = $this->getMockBuilder(\Magento\Framework\App\Response\RedirectInterface::class)
93+
$this->redirect = $this->getMockBuilder(RedirectInterface::class)
9094
->getMockForAbstractClass();
9195

92-
$this->messageManager = $this->getMockBuilder(\Magento\Framework\Message\ManagerInterface::class)
96+
$this->messageManager = $this->getMockBuilder(ManagerInterface::class)
9397
->getMockForAbstractClass();
9498

95-
$this->resultRedirect = $this->getMockBuilder(\Magento\Framework\Controller\Result\Redirect::class)
99+
$this->resultRedirect = $this->getMockBuilder(Redirect::class)
96100
->disableOriginalConstructor()
97101
->getMock();
98102

99-
$this->resultFactory = $this->getMockBuilder(\Magento\Framework\Controller\ResultFactory::class)
103+
$this->resultFactory = $this->getMockBuilder(ResultFactory::class)
100104
->disableOriginalConstructor()
101105
->getMock();
102106
$this->resultFactory->expects($this->once())
103107
->method('create')
104108
->with(ResultFactory::TYPE_REDIRECT)
105109
->willReturn($this->resultRedirect);
106110

107-
$this->context = $this->getMockBuilder(\Magento\Framework\App\Action\Context::class)
111+
$this->context = $this->getMockBuilder(ActionContext::class)
108112
->disableOriginalConstructor()
109113
->getMock();
110114
$this->context->expects($this->any())
@@ -120,62 +124,65 @@ protected function setUp()
120124
->method('getResultFactory')
121125
->willReturn($this->resultFactory);
122126

123-
$this->cart = $this->getMockBuilder(\Magento\Checkout\Model\Cart::class)
127+
$this->cart = $this->getMockBuilder(Cart::class)
124128
->disableOriginalConstructor()
125129
->getMock();
126130

127-
$this->cartHelper = $this->getMockBuilder(\Magento\Checkout\Helper\Cart::class)
131+
$this->cartHelper = $this->getMockBuilder(CartHelper::class)
128132
->disableOriginalConstructor()
129133
->getMock();
130134

131-
$this->quote = $this->getMockBuilder(\Magento\Quote\Model\Quote::class)
135+
$this->quote = $this->getMockBuilder(Quote::class)
132136
->disableOriginalConstructor()
133137
->setMethods(['getHasError'])
134138
->getMock();
135139

136140
$this->optionCollection = $this->getMockBuilder(
137-
\Magento\Wishlist\Model\ResourceModel\Item\Option\Collection::class
141+
OptionCollection::class
138142
)->disableOriginalConstructor()->getMock();
139143

140-
$this->option = $this->getMockBuilder(\Magento\Wishlist\Model\Item\Option::class)
144+
$this->option = $this->getMockBuilder(Option::class)
141145
->disableOriginalConstructor()
142146
->getMock();
143147

144-
$this->optionFactory = $this->getMockBuilder(\Magento\Wishlist\Model\Item\OptionFactory::class)
148+
$this->optionFactory = $this->getMockBuilder(OptionFactory::class)
145149
->disableOriginalConstructor()
146150
->setMethods(['create'])
147151
->getMock();
148152
$this->optionFactory->expects($this->once())
149153
->method('create')
150154
->willReturn($this->option);
151155

152-
$this->item = $this->getMockBuilder(\Magento\Wishlist\Model\Item::class)
156+
$this->item = $this->getMockBuilder(Item::class)
153157
->disableOriginalConstructor()
154158
->getMock();
155159

156-
$this->itemFactory = $this->getMockBuilder(\Magento\Wishlist\Model\ItemFactory::class)
160+
$this->itemFactory = $this->getMockBuilder(ItemFactory::class)
157161
->disableOriginalConstructor()
158162
->setMethods(['create'])
159163
->getMock();
160164
$this->itemFactory->expects($this->once())
161165
->method('create')
162166
->willReturn($this->item);
163167

164-
$this->escaper = $this->getMockBuilder(\Magento\Framework\Escaper::class)
168+
$this->escaper = $this->getMockBuilder(Escaper::class)
165169
->disableOriginalConstructor()
166170
->getMock();
167171

168-
$this->product = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
172+
$this->product = $this->getMockBuilder(Product::class)
169173
->disableOriginalConstructor()
170174
->getMock();
171175

172176
$this->model = new SharedCart(
173-
$this->context,
174177
$this->cart,
175178
$this->optionFactory,
176179
$this->itemFactory,
177180
$this->cartHelper,
178-
$this->escaper
181+
$this->escaper,
182+
$this->request,
183+
$this->redirect,
184+
$this->messageManager,
185+
$this->resultFactory
179186
);
180187
}
181188

@@ -353,7 +360,7 @@ public function testExecuteProductException()
353360

354361
$this->option->expects($this->once())
355362
->method('getCollection')
356-
->willThrowException(new \Magento\Catalog\Model\Product\Exception(__('LocalizedException')));
363+
->willThrowException(new Exception(__('LocalizedException')));
357364

358365
$this->resultRedirect->expects($this->once())
359366
->method('setUrl')

0 commit comments

Comments
 (0)