10 use Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory;
22 private $saveDownloadableOrderItemObserver;
32 private $purchasedFactory;
37 private $productFactory;
47 private $itemsFactory;
52 private $objectCopyService;
72 private $observerMock;
80 $this->scopeConfig = $this->getMockBuilder(\
Magento\Framework\
App\Config::class)
81 ->disableOriginalConstructor()
82 ->setMethods([
'isSetFlag',
'getValue'])
85 $this->purchasedFactory = $this->getMockBuilder(\
Magento\Downloadable\Model\Link\PurchasedFactory::class)
86 ->setMethods([
'create'])
87 ->disableOriginalConstructor()
90 $this->productFactory = $this->getMockBuilder(\
Magento\Catalog\Model\ProductFactory::class)
91 ->setMethods([
'create'])
92 ->disableOriginalConstructor()
95 $this->itemFactory = $this->getMockBuilder(\
Magento\Downloadable\Model\Link\Purchased\ItemFactory::class)
96 ->setMethods([
'create'])
97 ->disableOriginalConstructor()
100 $this->itemsFactory = $this->getMockBuilder(
103 ->setMethods([
'create'])
104 ->disableOriginalConstructor()
107 $this->objectCopyService = $this->getMockBuilder(\
Magento\Framework\DataObject\Copy::class)
108 ->disableOriginalConstructor()
111 $this->resultMock = $this->getMockBuilder(\
Magento\Framework\DataObject::class)
112 ->disableOriginalConstructor()
113 ->setMethods([
'setIsAllowed'])
116 $this->storeMock = $this->getMockBuilder(\
Magento\Framework\DataObject::class)
117 ->disableOriginalConstructor()
120 $this->eventMock = $this->getMockBuilder(\
Magento\Framework\Event::class)
121 ->disableOriginalConstructor()
122 ->setMethods([
'getStore',
'getResult',
'getQuote',
'getOrder'])
125 $this->orderMock = $this->getMockBuilder(\
Magento\Sales\Model\Order::class)
126 ->disableOriginalConstructor()
127 ->setMethods([
'getId',
'getStoreId',
'getState',
'isCanceled',
'getAllItems'])
130 $this->observerMock = $this->getMockBuilder(\
Magento\Framework\Event\Observer::class)
131 ->disableOriginalConstructor()
132 ->setMethods([
'getEvent'])
135 $this->saveDownloadableOrderItemObserver = (
new ObjectManagerHelper($this))->getObject(
136 \
Magento\Downloadable\Observer\SaveDownloadableOrderItemObserver::class,
138 'scopeConfig' => $this->scopeConfig,
139 'purchasedFactory' => $this->purchasedFactory,
140 'productFactory' => $this->productFactory,
141 'itemFactory' => $this->itemFactory,
142 'itemsFactory' => $this->itemsFactory,
143 'objectCopyService' => $this->objectCopyService
151 $itemMock = $this->getMockBuilder(\
Magento\Sales\Model\Order\Item::class)
152 ->disableOriginalConstructor()
154 $itemMock->expects($this->atLeastOnce())
156 ->willReturn($this->orderMock);
157 $itemMock->expects($this->any())
159 ->willReturn($itemId);
160 $itemMock->expects($this->any())
161 ->method(
'getProductType')
162 ->willReturn(DownloadableProductType::TYPE_DOWNLOADABLE);
164 $this->orderMock->expects($this->once())
165 ->method(
'getStoreId')
168 $product = $this->getMockBuilder(\
Magento\Catalog\Model\Product::class)
169 ->disableOriginalConstructor()
172 ->method(
'getTypeId')
173 ->willReturn(DownloadableProductType::TYPE_DOWNLOADABLE);
174 $productType = $this->getMockBuilder(\
Magento\Downloadable\Model\Product\Type::class)
175 ->disableOriginalConstructor()
178 ->method(
'getTypeInstance')
179 ->willReturn($productType);
181 ->method(
'setStoreId')
187 $this->productFactory->expects($this->once())
191 $linkItem = $this->createLinkItem(12, 12,
true,
'pending');
192 $this->itemFactory->expects($this->once())
194 ->willReturn($linkItem);
196 $productType->expects($this->once())
198 ->willReturn([123 => $linkItem]);
200 $itemMock->expects($this->once())
201 ->method(
'getProductOptionByCode')
203 $itemMock->expects($this->once())
204 ->method(
'getProduct')
207 $purchasedLink = $this->getMockBuilder(\
Magento\Downloadable\Model\Link\Purchased::class)
208 ->disableOriginalConstructor()
209 ->setMethods([
'load',
'setLinkSectionTitle',
'save'])
211 $purchasedLink->expects($this->once())
213 ->with($itemId,
'order_item_id')
215 $purchasedLink->expects($this->once())
216 ->method(
'setLinkSectionTitle')
218 $purchasedLink->expects($this->once())
221 $this->purchasedFactory->expects($this->any())
223 ->willReturn($purchasedLink);
224 $event = new \Magento\Framework\DataObject(
229 $observer = new \Magento\Framework\Event\Observer(
234 $this->saveDownloadableOrderItemObserver->execute(
$observer);
240 $itemMock = $this->getMockBuilder(\
Magento\Sales\Model\Order\Item::class)
241 ->disableOriginalConstructor()
243 $itemMock->expects($this->any())
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(
256 $observer = new \Magento\Framework\Event\Observer(
261 $this->saveDownloadableOrderItemObserver->execute(
$observer);
266 $itemMock = $this->getMockBuilder(\
Magento\Sales\Model\Order\Item::class)
267 ->disableOriginalConstructor()
269 $itemMock->expects($this->any())
272 $event = new \Magento\Framework\DataObject(
277 $observer = new \Magento\Framework\Event\Observer(
283 $this->assertEquals($this->saveDownloadableOrderItemObserver,
$result);
289 $itemMock = $this->getMockBuilder(\
Magento\Sales\Model\Order\Item::class)
290 ->disableOriginalConstructor()
292 $itemMock->expects($this->any())
294 ->willReturn($itemId);
295 $itemMock->expects($this->any())
296 ->method(
'getProductType')
297 ->willReturn(DownloadableProductType::TYPE_DOWNLOADABLE);
299 $purchasedLink = $this->getMockBuilder(\
Magento\Downloadable\Model\Link\Purchased::class)
300 ->disableOriginalConstructor()
301 ->setMethods([
'load',
'setLinkSectionTitle',
'save',
'getId'])
303 $purchasedLink->expects($this->once())
305 ->with($itemId,
'order_item_id')
307 $purchasedLink->expects($this->once())
310 $this->purchasedFactory->expects($this->any())
312 ->willReturn($purchasedLink);
314 $event = new \Magento\Framework\DataObject(
319 $observer = new \Magento\Framework\Event\Observer(
324 $this->saveDownloadableOrderItemObserver->execute(
$observer);
334 private function createLinkItem(
$status, $orderItemId, $isSaved =
false, $expectedStatus =
null)
336 $linkItem = $this->getMockBuilder(\
Magento\Downloadable\Model\Link\Purchased\Item::class)
337 ->disableOriginalConstructor()
338 ->setMethods([
'getStatus',
'getOrderItemId',
'setStatus',
'save',
'setNumberOfDownloadsBought'])
340 $linkItem->expects($this->any())
341 ->method(
'getStatus')
344 $linkItem->expects($this->once())
345 ->method(
'setStatus')
346 ->with($this->equalTo($expectedStatus))
348 $linkItem->expects($this->once())
353 $linkItem->expects($this->any())
354 ->method(
'setNumberOfDownloadsBought')
357 $linkItem->expects($this->any())
358 ->method(
'getOrderItemId')
359 ->willReturn($orderItemId);
testSaveDownloadableOrderItemNotSavedOrderItem()
testSaveDownloadableOrderItemNotDownloadableItem()
testSaveDownloadableOrderItemSavedPurchasedLink()
testSaveDownloadableOrderItem()