InvoiceServiceTest.php 2.77 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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
declare(strict_types=1);

namespace Magento\Sales\Model\Service;

use Magento\Sales\Api\Data\OrderInterface;
use Magento\Sales\Model\Order;
use Magento\TestFramework\Helper\Bootstrap;

/**
 * Tests \Magento\Sales\Model\Service\InvoiceService
 */
class InvoiceServiceTest extends \PHPUnit\Framework\TestCase
{
    /**
     * @var InvoiceService
     */
    private $invoiceService;

    /**
     * @inheritdoc
     */
    protected function setUp()
    {
        $this->invoiceService = Bootstrap::getObjectManager()->create(InvoiceService::class);
    }

    /**
     * @param int $invoiceQty
     * @magentoDataFixture Magento/Sales/_files/order_configurable_product.php
     * @return void
     * @dataProvider prepareInvoiceConfigurableProductDataProvider
     */
    public function testPrepareInvoiceConfigurableProduct(int $invoiceQty): void
    {
        /** @var OrderInterface $order */
        $order = Bootstrap::getObjectManager()->create(Order::class)->load('100000001', 'increment_id');
        $orderItems = $order->getItems();
        foreach ($orderItems as $orderItem) {
            if ($orderItem->getParentItemId()) {
                $parentItemId = $orderItem->getParentItemId();
            }
        }
        $invoice = $this->invoiceService->prepareInvoice($order, [$parentItemId => $invoiceQty]);
        $invoiceItems = $invoice->getItems();
        foreach ($invoiceItems as $invoiceItem) {
            $this->assertEquals($invoiceQty, $invoiceItem->getQty());
        }
    }

    public function prepareInvoiceConfigurableProductDataProvider()
    {
        return [
            'full invoice' => [2],
            'partial invoice' => [1]
        ];
    }

    /**
     * @param int $invoiceQty
     * @magentoDataFixture Magento/Sales/_files/order.php
     * @return void
     * @dataProvider prepareInvoiceSimpleProductDataProvider
     */
    public function testPrepareInvoiceSimpleProduct(int $invoiceQty): void
    {
        /** @var OrderInterface $order */
        $order = Bootstrap::getObjectManager()->create(Order::class)->load('100000001', 'increment_id');
        $orderItems = $order->getItems();
        $invoiceQtys = [];
        foreach ($orderItems as $orderItem) {
            $invoiceQtys[$orderItem->getItemId()] = $invoiceQty;
        }
        $invoice = $this->invoiceService->prepareInvoice($order, $invoiceQtys);
        $invoiceItems = $invoice->getItems();
        foreach ($invoiceItems as $invoiceItem) {
            $this->assertEquals($invoiceQty, $invoiceItem->getQty());
        }
    }

    public function prepareInvoiceSimpleProductDataProvider()
    {
        return [
            'full invoice' => [2],
            'partial invoice' => [1]
        ];
    }
}