SetLinkStatusObserverTest.php 2.41 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
<?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()
    {
        $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()
            );
        }
    }
}