Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SaveDownloadableOrderItemObserverTest.php
Go to the documentation of this file.
1 <?php
7 
9 use Magento\Downloadable\Model\Product\Type as DownloadableProductType;
10 use Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory;
12 
16 class SaveDownloadableOrderItemObserverTest extends \PHPUnit\Framework\TestCase
17 {
19  private $orderMock;
20 
22  private $saveDownloadableOrderItemObserver;
23 
27  private $scopeConfig;
28 
32  private $purchasedFactory;
33 
37  private $productFactory;
38 
42  private $itemFactory;
43 
47  private $itemsFactory;
48 
52  private $objectCopyService;
53 
57  private $resultMock;
58 
62  private $storeMock;
63 
67  private $eventMock;
68 
72  private $observerMock;
73 
78  protected function setUp()
79  {
80  $this->scopeConfig = $this->getMockBuilder(\Magento\Framework\App\Config::class)
81  ->disableOriginalConstructor()
82  ->setMethods(['isSetFlag', 'getValue'])
83  ->getMock();
84 
85  $this->purchasedFactory = $this->getMockBuilder(\Magento\Downloadable\Model\Link\PurchasedFactory::class)
86  ->setMethods(['create'])
87  ->disableOriginalConstructor()
88  ->getMock();
89 
90  $this->productFactory = $this->getMockBuilder(\Magento\Catalog\Model\ProductFactory::class)
91  ->setMethods(['create'])
92  ->disableOriginalConstructor()
93  ->getMock();
94 
95  $this->itemFactory = $this->getMockBuilder(\Magento\Downloadable\Model\Link\Purchased\ItemFactory::class)
96  ->setMethods(['create'])
97  ->disableOriginalConstructor()
98  ->getMock();
99 
100  $this->itemsFactory = $this->getMockBuilder(
101  \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory::class
102  )
103  ->setMethods(['create'])
104  ->disableOriginalConstructor()
105  ->getMock();
106 
107  $this->objectCopyService = $this->getMockBuilder(\Magento\Framework\DataObject\Copy::class)
108  ->disableOriginalConstructor()
109  ->getMock();
110 
111  $this->resultMock = $this->getMockBuilder(\Magento\Framework\DataObject::class)
112  ->disableOriginalConstructor()
113  ->setMethods(['setIsAllowed'])
114  ->getMock();
115 
116  $this->storeMock = $this->getMockBuilder(\Magento\Framework\DataObject::class)
117  ->disableOriginalConstructor()
118  ->getMock();
119 
120  $this->eventMock = $this->getMockBuilder(\Magento\Framework\Event::class)
121  ->disableOriginalConstructor()
122  ->setMethods(['getStore', 'getResult', 'getQuote', 'getOrder'])
123  ->getMock();
124 
125  $this->orderMock = $this->getMockBuilder(\Magento\Sales\Model\Order::class)
126  ->disableOriginalConstructor()
127  ->setMethods(['getId', 'getStoreId', 'getState', 'isCanceled', 'getAllItems'])
128  ->getMock();
129 
130  $this->observerMock = $this->getMockBuilder(\Magento\Framework\Event\Observer::class)
131  ->disableOriginalConstructor()
132  ->setMethods(['getEvent'])
133  ->getMock();
134 
135  $this->saveDownloadableOrderItemObserver = (new ObjectManagerHelper($this))->getObject(
136  \Magento\Downloadable\Observer\SaveDownloadableOrderItemObserver::class,
137  [
138  'scopeConfig' => $this->scopeConfig,
139  'purchasedFactory' => $this->purchasedFactory,
140  'productFactory' => $this->productFactory,
141  'itemFactory' => $this->itemFactory,
142  'itemsFactory' => $this->itemsFactory,
143  'objectCopyService' => $this->objectCopyService
144  ]
145  );
146  }
147 
149  {
150  $itemId = 100;
151  $itemMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Item::class)
152  ->disableOriginalConstructor()
153  ->getMock();
154  $itemMock->expects($this->atLeastOnce())
155  ->method('getOrder')
156  ->willReturn($this->orderMock);
157  $itemMock->expects($this->any())
158  ->method('getId')
159  ->willReturn($itemId);
160  $itemMock->expects($this->any())
161  ->method('getProductType')
162  ->willReturn(DownloadableProductType::TYPE_DOWNLOADABLE);
163 
164  $this->orderMock->expects($this->once())
165  ->method('getStoreId')
166  ->willReturn(10500);
167 
168  $product = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
169  ->disableOriginalConstructor()
170  ->getMock();
171  $product->expects($this->once())
172  ->method('getTypeId')
173  ->willReturn(DownloadableProductType::TYPE_DOWNLOADABLE);
174  $productType = $this->getMockBuilder(\Magento\Downloadable\Model\Product\Type::class)
175  ->disableOriginalConstructor()
176  ->getMock();
177  $product->expects($this->once())
178  ->method('getTypeInstance')
179  ->willReturn($productType);
180  $product->expects($this->once())
181  ->method('setStoreId')
182  ->with(10500)
183  ->willReturnSelf();
184  $product->expects($this->once())
185  ->method('load')
186  ->willReturnSelf();
187  $this->productFactory->expects($this->once())
188  ->method('create')
189  ->willReturn($product);
190 
191  $linkItem = $this->createLinkItem(12, 12, true, 'pending');
192  $this->itemFactory->expects($this->once())
193  ->method('create')
194  ->willReturn($linkItem);
195 
196  $productType->expects($this->once())
197  ->method('getLinks')
198  ->willReturn([123 => $linkItem]);
199 
200  $itemMock->expects($this->once())
201  ->method('getProductOptionByCode')
202  ->willReturn([123]);
203  $itemMock->expects($this->once())
204  ->method('getProduct')
205  ->willReturn(null);
206 
207  $purchasedLink = $this->getMockBuilder(\Magento\Downloadable\Model\Link\Purchased::class)
208  ->disableOriginalConstructor()
209  ->setMethods(['load', 'setLinkSectionTitle', 'save'])
210  ->getMock();
211  $purchasedLink->expects($this->once())
212  ->method('load')
213  ->with($itemId, 'order_item_id')
214  ->willReturnSelf();
215  $purchasedLink->expects($this->once())
216  ->method('setLinkSectionTitle')
217  ->willReturnSelf();
218  $purchasedLink->expects($this->once())
219  ->method('save')
220  ->willReturnSelf();
221  $this->purchasedFactory->expects($this->any())
222  ->method('create')
223  ->willReturn($purchasedLink);
224  $event = new \Magento\Framework\DataObject(
225  [
226  'item' => $itemMock,
227  ]
228  );
229  $observer = new \Magento\Framework\Event\Observer(
230  [
231  'event' => $event
232  ]
233  );
234  $this->saveDownloadableOrderItemObserver->execute($observer);
235  }
236 
238  {
239  $itemId = 100;
240  $itemMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Item::class)
241  ->disableOriginalConstructor()
242  ->getMock();
243  $itemMock->expects($this->any())
244  ->method('getId')
245  ->willReturn($itemId);
246  $itemMock->expects($this->any())
247  ->method('getProductType')
248  ->willReturn('simple');
249  $itemMock->expects($this->never())
250  ->method('getProduct');
251  $event = new \Magento\Framework\DataObject(
252  [
253  'item' => $itemMock,
254  ]
255  );
256  $observer = new \Magento\Framework\Event\Observer(
257  [
258  'event' => $event
259  ]
260  );
261  $this->saveDownloadableOrderItemObserver->execute($observer);
262  }
263 
265  {
266  $itemMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Item::class)
267  ->disableOriginalConstructor()
268  ->getMock();
269  $itemMock->expects($this->any())
270  ->method('getId')
271  ->willReturn(null);
272  $event = new \Magento\Framework\DataObject(
273  [
274  'item' => $itemMock,
275  ]
276  );
277  $observer = new \Magento\Framework\Event\Observer(
278  [
279  'event' => $event
280  ]
281  );
282  $result = $this->saveDownloadableOrderItemObserver->execute($observer);
283  $this->assertEquals($this->saveDownloadableOrderItemObserver, $result);
284  }
285 
287  {
288  $itemId = 100;
289  $itemMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Item::class)
290  ->disableOriginalConstructor()
291  ->getMock();
292  $itemMock->expects($this->any())
293  ->method('getId')
294  ->willReturn($itemId);
295  $itemMock->expects($this->any())
296  ->method('getProductType')
297  ->willReturn(DownloadableProductType::TYPE_DOWNLOADABLE);
298 
299  $purchasedLink = $this->getMockBuilder(\Magento\Downloadable\Model\Link\Purchased::class)
300  ->disableOriginalConstructor()
301  ->setMethods(['load', 'setLinkSectionTitle', 'save', 'getId'])
302  ->getMock();
303  $purchasedLink->expects($this->once())
304  ->method('load')
305  ->with($itemId, 'order_item_id')
306  ->willReturnSelf();
307  $purchasedLink->expects($this->once())
308  ->method('getId')
309  ->willReturn(123);
310  $this->purchasedFactory->expects($this->any())
311  ->method('create')
312  ->willReturn($purchasedLink);
313 
314  $event = new \Magento\Framework\DataObject(
315  [
316  'item' => $itemMock,
317  ]
318  );
319  $observer = new \Magento\Framework\Event\Observer(
320  [
321  'event' => $event
322  ]
323  );
324  $this->saveDownloadableOrderItemObserver->execute($observer);
325  }
326 
334  private function createLinkItem($status, $orderItemId, $isSaved = false, $expectedStatus = null)
335  {
336  $linkItem = $this->getMockBuilder(\Magento\Downloadable\Model\Link\Purchased\Item::class)
337  ->disableOriginalConstructor()
338  ->setMethods(['getStatus', 'getOrderItemId', 'setStatus', 'save', 'setNumberOfDownloadsBought'])
339  ->getMock();
340  $linkItem->expects($this->any())
341  ->method('getStatus')
342  ->willReturn($status);
343  if ($isSaved) {
344  $linkItem->expects($this->once())
345  ->method('setStatus')
346  ->with($this->equalTo($expectedStatus))
347  ->willReturnSelf();
348  $linkItem->expects($this->once())
349  ->method('save')
350  ->willReturnSelf();
351  }
352 
353  $linkItem->expects($this->any())
354  ->method('setNumberOfDownloadsBought')
355  ->willReturnSelf();
356 
357  $linkItem->expects($this->any())
358  ->method('getOrderItemId')
359  ->willReturn($orderItemId);
360 
361  return $linkItem;
362  }
363 }
$status
Definition: order_status.php:8