Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CreditmemoFactoryTest.php
Go to the documentation of this file.
1 <?php
7 
13 
18 class CreditmemoFactoryTest extends \PHPUnit\Framework\TestCase
19 {
23  const ORDER_ITEM_ID_PLACEHOLDER = 'id_item_';
24 
28  private $objectManager;
29 
33  private $creditmemoFactory;
34 
38  protected function setUp()
39  {
40  $this->objectManager = Bootstrap::getObjectManager();
41  $this->creditmemoFactory = $this->objectManager->create(CreditmemoFactory::class);
42  }
43 
52  public function testCreateByOrder(array $creditmemoData, $expectedQty)
53  {
54  $order = $this->getOrder('100000001');
55  $creditmemoData = $this->prepareCreditMemoData($order, $creditmemoData);
56  $creditmemo = $this->creditmemoFactory->createByOrder($order, $creditmemoData);
57  self::assertEquals($expectedQty, $creditmemo->getTotalQty(), 'Creditmemo has wrong total qty.');
58  }
59 
63  public function createByOrderDataProvider(): array
64  {
65  return [
66  [
67  'creditmemoData' => [
68  'qtys' => [
69  self::ORDER_ITEM_ID_PLACEHOLDER . '2' => 2,
70  self::ORDER_ITEM_ID_PLACEHOLDER . '3' => 10,
71  ],
72  ],
73  'expectedQty' => 12,
74  ],
75  [
76  'creditmemoData' => [
77  'qtys' => [
78  self::ORDER_ITEM_ID_PLACEHOLDER . '1' => 2,
79  self::ORDER_ITEM_ID_PLACEHOLDER . '2' => 2,
80  self::ORDER_ITEM_ID_PLACEHOLDER . '3' => 10,
81  ],
82  ],
83  'expectedQty' => 14,
84  ],
85  ];
86  }
87 
95  public function testCreateByInvoice()
96  {
97  $invoice = $this->getInvoice('100000001');
98  $creditmemo = $this->creditmemoFactory->createByInvoice($invoice);
99  self::assertEquals(14, $creditmemo->getTotalQty(), 'Creditmemo has wrong total qty.');
100  }
101 
109  private function prepareCreditMemoData(Order $order, array $creditmemoData): array
110  {
111  $result = [];
112  $orderItems = $order->getAllItems();
113  foreach ($creditmemoData['qtys'] as $key => $item) {
114  $result[$orderItems[$this->prepareOrderItemKey($key)]->getId()] = $item;
115  }
116  $creditmemoData['qtys'] = $result;
117 
118  return $creditmemoData;
119  }
120 
127  private function prepareOrderItemKey($key)
128  {
129  return str_replace(self::ORDER_ITEM_ID_PLACEHOLDER, '', $key) - 1;
130  }
131 
138  private function getOrder(string $incrementId): Order
139  {
141  $order = $this->objectManager->create(Order::class);
142  $order->loadByIncrementId($incrementId);
143 
144  return $order;
145  }
146 
153  private function getInvoice(string $incrementId): Invoice
154  {
156  $searchCriteriaBuilder = $this->objectManager->get(SearchCriteriaBuilder::class);
158  ->addFilter('increment_id', $incrementId)
159  ->create();
161  $repository = $this->objectManager->get(InvoiceRepositoryInterface::class);
162  $items = $repository->getList($searchCriteria)->getItems();
163 
164  return array_pop($items);
165  }
166 }
$order
Definition: order.php:55
$searchCriteria
$invoice
testCreateByOrder(array $creditmemoData, $expectedQty)
$searchCriteriaBuilder
$items