70 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
namespace Magento\Downloadable\Model\Observer;
 | 
						|
 | 
						|
/**
 | 
						|
 * Integration test for case, when customer is able to download
 | 
						|
 * downloadable product, after order was canceled.
 | 
						|
 */
 | 
						|
class SetLinkStatusObserverTest extends \PHPUnit\Framework\TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Object manager
 | 
						|
     * @var \Magento\Framework\ObjectManagerInterface
 | 
						|
     */
 | 
						|
    private $objectManager;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Initialization of dependencies
 | 
						|
     */
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Asserting, that links status is expired after canceling of order.
 | 
						|
     * This test relates to the GitHub issue magento/magento2#8515.
 | 
						|
     *
 | 
						|
     * @magentoDataFixture Magento/Downloadable/_files/product_downloadable.php
 | 
						|
     * @magentoDataFixture Magento/Downloadable/_files/order_with_downloadable_product.php
 | 
						|
     * @magentoDbIsolation disabled
 | 
						|
     */
 | 
						|
    public function testCheckStatusOnOrderCancel()
 | 
						|
    {
 | 
						|
        /** @var \Magento\Sales\Model\Order $order */
 | 
						|
        $order = $this->objectManager->create(\Magento\Sales\Model\Order::class);
 | 
						|
        $order->loadByIncrementId('100000001');
 | 
						|
 | 
						|
        $orderItems = $order->getAllItems();
 | 
						|
        $items = array_values($orderItems);
 | 
						|
        /** @var \Magento\Sales\Model\Order\Item $orderItem */
 | 
						|
        $orderItem = array_shift($items);
 | 
						|
 | 
						|
        /** Canceling order to reproduce test case */
 | 
						|
        $order->setState(\Magento\Sales\Model\Order::STATE_CANCELED);
 | 
						|
        $order->save();
 | 
						|
 | 
						|
        /** @var \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\Collection $linkCollection */
 | 
						|
        $linkCollection = $this->objectManager->create(
 | 
						|
            \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory::class
 | 
						|
        )->create();
 | 
						|
 | 
						|
        $linkCollection->addFieldToFilter('order_item_id', $orderItem->getId());
 | 
						|
 | 
						|
        /** Assert there are items in linkCollection to avoid false-positive test result. */
 | 
						|
        $this->assertGreaterThan(0, $linkCollection->count());
 | 
						|
 | 
						|
        /** @var \Magento\Downloadable\Model\Link\Purchased\Item $linkItem */
 | 
						|
        foreach ($linkCollection->getItems() as $linkItem) {
 | 
						|
            $this->assertEquals(
 | 
						|
                \Magento\Downloadable\Model\Link\Purchased\Item::LINK_STATUS_EXPIRED,
 | 
						|
                $linkItem->getStatus()
 | 
						|
            );
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |