123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Sales\Test\Unit\Model\Order;
- use Magento\Framework\Serialize\Serializer\Json;
- use Magento\Sales\Model\ResourceModel\OrderFactory;
- use \Magento\Sales\Model\Order;
- /**
- * Class ItemTest
- *
- * @package Magento\Sales\Model\Order
- */
- class ItemTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \Magento\Sales\Model\Order\Item
- */
- protected $model;
- /**
- * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
- */
- protected $objectManager;
- /**
- * @var OrderFactory |\PHPUnit_Framework_MockObject_MockObject
- */
- protected $orderFactory;
- /**
- * @var Json|\PHPUnit_Framework_MockObject_MockObject
- */
- private $serializerMock;
- protected function setUp()
- {
- $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
- $this->orderFactory = $this->createPartialMock(\Magento\Sales\Model\OrderFactory::class, ['create']);
- $this->serializerMock = $this->getMockBuilder(Json::class)
- ->setMethods(['unserialize'])
- ->getMock();
- $arguments = [
- 'orderFactory' => $this->orderFactory,
- 'serializer' => $this->serializerMock
- ];
- $this->model = $this->objectManager->getObject(\Magento\Sales\Model\Order\Item::class, $arguments);
- }
- public function testSetParentItemNull()
- {
- $this->assertEquals($this->model, $this->model->setParentItem(null));
- $this->assertNull($this->model->getParentItem());
- }
- public function testSetParentItem()
- {
- $item = $this->objectManager->getObject(\Magento\Sales\Model\Order\Item::class, []);
- $this->assertEquals($this->model, $this->model->setParentItem($item));
- $this->assertEquals($item, $this->model->getParentItem());
- $this->assertTrue($item->getHasChildren());
- $this->assertCount(1, $item->getChildrenItems());
- }
- public function testGetPatentItem()
- {
- $item = $this->objectManager->getObject(\Magento\Sales\Model\Order\Item::class, []);
- $this->model->setData(\Magento\Sales\Api\Data\OrderItemInterface::PARENT_ITEM, $item);
- $this->assertEquals($item, $this->model->getParentItem());
- }
- public function testSetOrder()
- {
- $orderId = 123;
- $order = $this->createMock(\Magento\Sales\Model\Order::class);
- $order->expects($this->once())
- ->method('getId')
- ->willReturn($orderId);
- $this->assertEquals($this->model, $this->model->setOrder($order));
- $this->assertEquals($orderId, $this->model->getOrderId());
- }
- public function testGetOrder()
- {
- //order and order_id was not set
- $this->assertNull($this->model->getOrder());
- //set order_id and get order by id
- $orderId = 123;
- $order = $this->createMock(\Magento\Sales\Model\Order::class);
- $order->expects($this->once())
- ->method('load')
- ->with($orderId)
- ->willReturnSelf();
- $this->orderFactory->expects($this->once())
- ->method('create')
- ->willReturn($order);
- $this->model->setOrderId($orderId);
- $this->assertEquals($order, $this->model->getOrder());
- //get existed order
- $this->assertEquals($order, $this->model->getOrder());
- }
- /**
- * @param $qtyBackOrdered
- * @param $hasChildren
- * @param $qtyCanceled
- * @param $qtyInvoiced
- * @param $qtyOrdered
- * @param $qtyRefunded
- * @param $qtyShipped
- * @param $expectedStatus
- *
- * @dataProvider getStatusIdDataProvider
- */
- public function testGetStatusId(
- $qtyBackOrdered,
- $qtyCanceled,
- $qtyInvoiced,
- $qtyOrdered,
- $qtyRefunded,
- $qtyShipped,
- $expectedStatus
- ) {
- $this->model->setQtyBackordered($qtyBackOrdered);
- $this->model->setQtyCanceled($qtyCanceled);
- $this->model->setQtyInvoiced($qtyInvoiced);
- $this->model->setQtyOrdered($qtyOrdered);
- $this->model->setQtyRefunded($qtyRefunded);
- $this->model->setQtyShipped($qtyShipped);
- $this->assertEquals($expectedStatus, $this->model->getStatusId());
- }
- /**
- * @return array
- */
- public function getStatusIdDataProvider()
- {
- return [
- [0, 0, 0, null, 0, 0, \Magento\Sales\Model\Order\Item::STATUS_PENDING],
- [0, 10, 1, 100, 10, 80, \Magento\Sales\Model\Order\Item::STATUS_SHIPPED],
- [1, 10, 1, 100, 10, 80, \Magento\Sales\Model\Order\Item::STATUS_SHIPPED],
- [1, 10, 1, 100, 10, 99, \Magento\Sales\Model\Order\Item::STATUS_MIXED],
- [0, 10, 80, 100, 10, 0, \Magento\Sales\Model\Order\Item::STATUS_INVOICED],
- [1, 10, 80, 100, 10, 0, \Magento\Sales\Model\Order\Item::STATUS_INVOICED],
- [1, 10, 99, 100, 10, 0, \Magento\Sales\Model\Order\Item::STATUS_MIXED],
- [80, 10, null, 100, 10, null, \Magento\Sales\Model\Order\Item::STATUS_BACKORDERED],
- [null, null, null, 9, 9, null, \Magento\Sales\Model\Order\Item::STATUS_REFUNDED],
- [null, 9, null, 9, null, null, \Magento\Sales\Model\Order\Item::STATUS_CANCELED],
- [1, 10, 70, 100, 10, 79, \Magento\Sales\Model\Order\Item::STATUS_PARTIAL],
- [0, 10, 70, 100, 10, 79, \Magento\Sales\Model\Order\Item::STATUS_PARTIAL]
- ];
- }
- public function testGetStatuses()
- {
- $statuses = [
- \Magento\Sales\Model\Order\Item::STATUS_PENDING => 'Ordered',
- \Magento\Sales\Model\Order\Item::STATUS_SHIPPED => 'Shipped',
- \Magento\Sales\Model\Order\Item::STATUS_INVOICED => 'Invoiced',
- \Magento\Sales\Model\Order\Item::STATUS_BACKORDERED => 'Backordered',
- \Magento\Sales\Model\Order\Item::STATUS_RETURNED => 'Returned',
- \Magento\Sales\Model\Order\Item::STATUS_REFUNDED => 'Refunded',
- \Magento\Sales\Model\Order\Item::STATUS_CANCELED => 'Canceled',
- \Magento\Sales\Model\Order\Item::STATUS_PARTIAL => 'Partial',
- \Magento\Sales\Model\Order\Item::STATUS_MIXED => 'Mixed',
- ];
- $this->assertEquals($statuses, $this->model->getStatuses());
- }
- public function testGetOriginalPrice()
- {
- $price = 9.99;
- $this->model->setPrice($price);
- $this->assertEquals($price, $this->model->getOriginalPrice());
- $originalPrice = 5.55;
- $this->model->setData(\Magento\Sales\Api\Data\OrderItemInterface::ORIGINAL_PRICE, $originalPrice);
- $this->assertEquals($originalPrice, $this->model->getOriginalPrice());
- }
- /**
- * Test get product options with serialization
- *
- * @param array|string $options
- * @param array $expectedResult
- *
- * @dataProvider getProductOptionsDataProvider
- */
- public function testGetProductOptions($options, $expectedResult)
- {
- if (is_string($options)) {
- $this->serializerMock->expects($this->once())
- ->method('unserialize')
- ->will($this->returnValue($expectedResult));
- }
- $this->model->setData('product_options', $options);
- $result = $this->model->getProductOptions();
- $this->assertSame($result, $expectedResult);
- }
- /**
- * Data provider for testGetProductOptions
- *
- * @return array
- */
- public function getProductOptionsDataProvider()
- {
- return [
- 'array' => [
- 'options' => [
- 'option1' => 'option 1 value',
- 'option2' => 'option 2 value',
- ],
- 'expectedResult' => [
- 'option1' => 'option 1 value',
- 'option2' => 'option 2 value',
- ]
- ],
- 'serialized' => [
- 'options' => json_encode([
- 'option1' => 'option 1 value',
- 'option2' => 'option 2 value',
- ]),
- 'expectedResult' => [
- 'option1' => 'option 1 value',
- 'option2' => 'option 2 value',
- ]
- ]
- ];
- }
- /**
- * Test different combinations of item qty setups
- *
- * @param array $options
- * @param float $expectedResult
- *
- * @dataProvider getItemQtyVariants
- */
- public function testGetSimpleQtyToMethods(array $options, $expectedResult)
- {
- $this->model->setData($options);
- $this->assertSame($this->model->getSimpleQtyToShip(), $expectedResult['to_ship']);
- $this->assertSame($this->model->getQtyToInvoice(), $expectedResult['to_invoice']);
- }
- /**
- * Provides different combinations of qty options for an item and the
- * expected qtys pending shipment and invoice
- *
- * @return array
- */
- public function getItemQtyVariants()
- {
- return [
- 'empty_item' => [
- 'options' => [
- 'qty_ordered' => 0, 'qty_invoiced' => 0, 'qty_refunded' => 0, 'qty_shipped' => 0,
- 'qty_canceled' => 0
- ],
- 'expectedResult' => ['to_ship' => 0.0, 'to_invoice' => 0.0]
- ],
- 'ordered_item' => [
- 'options' => [
- 'qty_ordered' => 12, 'qty_invoiced' => 0, 'qty_refunded' => 0, 'qty_shipped' => 0,
- 'qty_canceled' => 0
- ],
- 'expectedResult' => ['to_ship' => 12.0, 'to_invoice' => 12.0]
- ],
- 'partially_invoiced' => [
- 'options' => ['qty_ordered' => 12, 'qty_invoiced' => 4, 'qty_refunded' => 0, 'qty_shipped' => 0,
- 'qty_canceled' => 0,
- ],
- 'expectedResult' => ['to_ship' => 12.0, 'to_invoice' => 8.0]
- ],
- 'completely_invoiced' => [
- 'options' => [
- 'qty_ordered' => 12, 'qty_invoiced' => 12, 'qty_refunded' => 0, 'qty_shipped' => 0,
- 'qty_canceled' => 0,
- ],
- 'expectedResult' => ['to_ship' => 12.0, 'to_invoice' => 0.0]
- ],
- 'partially_invoiced_refunded' => [
- 'options' => [
- 'qty_ordered' => 12, 'qty_invoiced' => 5, 'qty_refunded' => 5, 'qty_shipped' => 0,
- 'qty_canceled' => 0,
- ],
- 'expectedResult' => ['to_ship' => 7.0, 'to_invoice' => 7.0]
- ],
- 'partially_refunded' => [
- 'options' => [
- 'qty_ordered' => 12, 'qty_invoiced' => 12, 'qty_refunded' => 5, 'qty_shipped' => 0,
- 'qty_canceled' => 0,
- ],
- 'expectedResult' => ['to_ship' => 7.0, 'to_invoice' => 0.0]
- ],
- 'partially_shipped' => [
- 'options' => [
- 'qty_ordered' => 12, 'qty_invoiced' => 0, 'qty_refunded' => 0, 'qty_shipped' => 4,
- 'qty_canceled' => 0
- ],
- 'expectedResult' => ['to_ship' => 8.0, 'to_invoice' => 12.0]
- ],
- 'partially_refunded_partially_shipped' => [
- 'options' => [
- 'qty_ordered' => 12, 'qty_invoiced' => 12, 'qty_refunded' => 5, 'qty_shipped' => 4,
- 'qty_canceled' => 0
- ],
- 'expectedResult' => ['to_ship' => 3.0, 'to_invoice' => 0.0]
- ],
- 'complete' => [
- 'options' => [
- 'qty_ordered' => 12, 'qty_invoiced' => 12, 'qty_refunded' => 0, 'qty_shipped' => 12,
- 'qty_canceled' => 0
- ],
- 'expectedResult' => ['to_ship' => 0.0, 'to_invoice' => 0.0]
- ],
- 'canceled' => [
- 'options' => [
- 'qty_ordered' => 12, 'qty_invoiced' => 0, 'qty_refunded' => 0, 'qty_shipped' => 0,
- 'qty_canceled' => 12
- ],
- 'expectedResult' => ['to_ship' => 0.0, 'to_invoice' => 0.0]
- ],
- 'completely_shipped_using_decimals' => [
- 'options' => [
- 'qty_ordered' => 4.4, 'qty_invoiced' => 0.4, 'qty_refunded' => 0.4, 'qty_shipped' => 4,
- 'qty_canceled' => 0,
- ],
- 'expectedResult' => ['to_ship' => 0.0, 'to_invoice' => 4.0]
- ],
- 'completely_invoiced_using_decimals' => [
- 'options' => [
- 'qty_ordered' => 4.4, 'qty_invoiced' => 4, 'qty_refunded' => 0, 'qty_shipped' => 4,
- 'qty_canceled' => 0.4
- ],
- 'expectedResult' => ['to_ship' => 0.0, 'to_invoice' => 0.0]
- ]
- ];
- }
- }
|