Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CreditmemoLoaderTest.php
Go to the documentation of this file.
1 <?php
7 
13 class CreditmemoLoaderTest extends \PHPUnit\Framework\TestCase
14 {
18  private $loader;
19 
23  private $creditmemoRepositoryMock;
24 
28  private $creditmemoFactoryMock;
29 
33  private $orderFactoryMock;
34 
38  private $invoiceRepositoryMock;
39 
43  private $eventManagerMock;
44 
48  private $sessionMock;
49 
53  private $messageManagerMock;
54 
58  private $registryMock;
59 
63  private $helperMock;
64 
68  private $stockConfiguration;
69 
70  protected function setUp()
71  {
72  $data = [];
73  $this->creditmemoRepositoryMock = $this->getMockBuilder(\Magento\Sales\Api\CreditmemoRepositoryInterface::class)
74  ->disableOriginalConstructor()
75  ->getMock();
76  $this->creditmemoFactoryMock = $this->createMock(\Magento\Sales\Model\Order\CreditmemoFactory::class);
77  $this->orderFactoryMock = $this->getMockBuilder(\Magento\Sales\Model\OrderFactory::class)
78  ->disableOriginalConstructor()
79  ->setMethods(['create'])
80  ->getMock();
81  $this->invoiceRepositoryMock = $this->getMockBuilder(\Magento\Sales\Api\InvoiceRepositoryInterface::class)
82  ->disableOriginalConstructor()
83  ->setMethods(['create'])
84  ->getMockForAbstractClass();
85  $this->eventManagerMock = $this->getMockBuilder(\Magento\Framework\Event\Manager::class)
86  ->disableOriginalConstructor()
87  ->setMethods([])
88  ->getMock();
89  $this->sessionMock = $this->getMockBuilder(\Magento\Backend\Model\Session::class)
90  ->disableOriginalConstructor()
91  ->setMethods([])
92  ->getMock();
93  $this->messageManagerMock = $this->getMockBuilder(\Magento\Framework\Message\Manager::class)
94  ->disableOriginalConstructor()
95  ->setMethods([])
96  ->getMock();
97  $this->registryMock = $this->getMockBuilder(\Magento\Framework\Registry::class)
98  ->disableOriginalConstructor()
99  ->setMethods([])
100  ->getMock();
101  $this->helperMock = $this->getMockBuilder(\Magento\CatalogInventory\Helper\Data::class)
102  ->disableOriginalConstructor()
103  ->setMethods([])
104  ->getMock();
105 
106  $this->stockConfiguration = $this->getMockBuilder(\Magento\CatalogInventory\Model\Configuration::class)
107  ->disableOriginalConstructor()
108  ->setMethods([])
109  ->getMock();
110 
111  $this->loader = new \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader(
112  $this->creditmemoRepositoryMock,
113  $this->creditmemoFactoryMock,
114  $this->orderFactoryMock,
115  $this->invoiceRepositoryMock,
116  $this->eventManagerMock,
117  $this->sessionMock,
118  $this->messageManagerMock,
119  $this->registryMock,
120  $this->stockConfiguration,
121  $data
122  );
123  }
124 
125  public function testLoadByCreditmemoId()
126  {
127  $this->loader->setCreditmemoId(1);
128  $this->loader->setOrderId(1);
129  $this->loader->setCreditmemo('test');
130 
131  $creditmemoMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Creditmemo::class)
132  ->disableOriginalConstructor()
133  ->setMethods([])
134  ->getMock();
135  $this->creditmemoRepositoryMock->expects($this->once())
136  ->method('get')
137  ->willReturn($creditmemoMock);
138 
139  $this->assertInstanceOf(\Magento\Sales\Model\Order\Creditmemo::class, $this->loader->load());
140  }
141 
142  public function testLoadCannotCreditmemo()
143  {
144  $orderId = 1234;
145  $invoiceId = 99;
146  $this->loader->setCreditmemoId(0);
147  $this->loader->setOrderId($orderId);
148  $this->loader->setCreditmemo('test');
149  $this->loader->setInvoiceId($invoiceId);
150 
151  $orderMock = $this->getMockBuilder(\Magento\Sales\Model\Order::class)
152  ->disableOriginalConstructor()
153  ->setMethods([])
154  ->getMock();
155  $orderMock->expects($this->once())
156  ->method('load')
157  ->willReturnSelf();
158  $orderMock->expects($this->once())
159  ->method('getId')
160  ->willReturn($orderId);
161  $orderMock->expects($this->once())
162  ->method('canCreditmemo')
163  ->willReturn(false);
164  $this->orderFactoryMock->expects($this->once())
165  ->method('create')
166  ->willReturn($orderMock);
167  $invoiceMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Invoice::class)
168  ->disableOriginalConstructor()
169  ->setMethods([])
170  ->getMock();
171  $invoiceMock->expects($this->any())
172  ->method('setOrder')
173  ->with($orderMock)
174  ->willReturnSelf();
175  $invoiceMock->expects($this->any())
176  ->method('getId')
177  ->willReturn(1);
178  $this->invoiceRepositoryMock->expects($this->once())
179  ->method('get')
180  ->willReturn($invoiceMock);
181 
182  $this->assertFalse($this->loader->load());
183  }
184 
185  public function testLoadByOrder()
186  {
187  $orderId = 1234;
188  $invoiceId = 99;
189  $qty = 1;
190  $data = ['items' => [1 => ['qty' => $qty, 'back_to_stock' => true]]];
191  $this->loader->setCreditmemoId(0);
192  $this->loader->setOrderId($orderId);
193  $this->loader->setCreditmemo($data);
194  $this->loader->setInvoiceId($invoiceId);
195 
196  $orderMock = $this->getMockBuilder(\Magento\Sales\Model\Order::class)
197  ->disableOriginalConstructor()
198  ->setMethods([])
199  ->getMock();
200  $orderMock->expects($this->once())
201  ->method('load')
202  ->willReturnSelf();
203  $orderMock->expects($this->once())
204  ->method('getId')
205  ->willReturn($orderId);
206  $orderMock->expects($this->once())
207  ->method('canCreditmemo')
208  ->willReturn(true);
209  $this->orderFactoryMock->expects($this->once())
210  ->method('create')
211  ->willReturn($orderMock);
212  $invoiceMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Invoice::class)
213  ->disableOriginalConstructor()
214  ->getMock();
215  $invoiceMock->expects($this->any())
216  ->method('setOrder')
217  ->willReturnSelf();
218  $invoiceMock->expects($this->any())
219  ->method('getId')
220  ->willReturn(1);
221  $this->invoiceRepositoryMock->expects($this->once())
222  ->method('get')
223  ->willReturn($invoiceMock);
224  $creditmemoMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Creditmemo::class)
225  ->disableOriginalConstructor()
226  ->setMethods([])
227  ->getMock();
228 
229  $orderItemMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Item::class)
230  ->disableOriginalConstructor()
231  ->setMethods([])
232  ->getMock();
233  $creditmemoItemMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Creditmemo\Item::class)
234  ->disableOriginalConstructor()
235  ->setMethods([])
236  ->getMock();
237  $creditmemoItemMock->expects($this->any())
238  ->method('getOrderItem')
239  ->willReturn($orderItemMock);
240  $items = [$creditmemoItemMock, $creditmemoItemMock, $creditmemoItemMock];
241  $creditmemoMock->expects($this->any())
242  ->method('getAllItems')
243  ->willReturn($items);
244  $data['qtys'] = [1 => $qty];
245  $this->creditmemoFactoryMock->expects($this->any())
246  ->method('createByInvoice')
247  ->with($invoiceMock, $data)
248  ->willReturn($creditmemoMock);
249 
250  $this->assertEquals($creditmemoMock, $this->loader->load());
251  }
252 }
$items