AssignOrderToCustomerObserverTest.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Sales\Test\Unit\Observer;
  8. use Magento\Customer\Api\Data\CustomerInterface;
  9. use Magento\Framework\Event;
  10. use Magento\Framework\Event\Observer;
  11. use Magento\Sales\Api\Data\OrderInterface;
  12. use Magento\Sales\Api\OrderRepositoryInterface;
  13. use Magento\Sales\Observer\AssignOrderToCustomerObserver;
  14. use PHPUnit\Framework\TestCase;
  15. use PHPUnit_Framework_MockObject_MockObject;
  16. /**
  17. * Class AssignOrderToCustomerObserverTest
  18. */
  19. class AssignOrderToCustomerObserverTest extends TestCase
  20. {
  21. /** @var AssignOrderToCustomerObserver */
  22. protected $sut;
  23. /** @var OrderRepositoryInterface|PHPUnit_Framework_MockObject_MockObject */
  24. protected $orderRepositoryMock;
  25. /**
  26. * Set Up
  27. */
  28. protected function setUp()
  29. {
  30. $this->orderRepositoryMock = $this->getMockBuilder(OrderRepositoryInterface::class)
  31. ->disableOriginalConstructor()
  32. ->getMock();
  33. $this->sut = new AssignOrderToCustomerObserver($this->orderRepositoryMock);
  34. }
  35. /**
  36. * Test assigning order to customer after issuing guest order
  37. *
  38. * @dataProvider getCustomerIds
  39. * @param null|int $customerId
  40. * @return void
  41. */
  42. public function testAssignOrderToCustomerAfterGuestOrder($customerId)
  43. {
  44. $orderId = 1;
  45. /** @var Observer|PHPUnit_Framework_MockObject_MockObject $observerMock */
  46. $observerMock = $this->createMock(Observer::class);
  47. /** @var Event|PHPUnit_Framework_MockObject_MockObject $eventMock */
  48. $eventMock = $this->getMockBuilder(Event::class)->disableOriginalConstructor()
  49. ->setMethods(['getData'])
  50. ->getMock();
  51. /** @var CustomerInterface|PHPUnit_Framework_MockObject_MockObject $customerMock */
  52. $customerMock = $this->createMock(CustomerInterface::class);
  53. /** @var OrderInterface|PHPUnit_Framework_MockObject_MockObject $orderMock */
  54. $orderMock = $this->getMockBuilder(OrderInterface::class)
  55. ->disableOriginalConstructor()
  56. ->getMockForAbstractClass();
  57. $observerMock->expects($this->once())->method('getEvent')->willReturn($eventMock);
  58. $eventMock->expects($this->any())->method('getData')
  59. ->willReturnMap([
  60. ['delegate_data', null, ['__sales_assign_order_id' => $orderId]],
  61. ['customer_data_object', null, $customerMock]
  62. ]);
  63. $orderMock->expects($this->once())->method('getCustomerId')->willReturn($customerId);
  64. $this->orderRepositoryMock->expects($this->once())->method('get')->with($orderId)
  65. ->willReturn($orderMock);
  66. $orderMock->expects($this->once())->method('setCustomerId')->willReturn($orderMock);
  67. $orderMock->expects($this->once())->method('setCustomerIsGuest')->willReturn($orderMock);
  68. $orderMock->expects($this->once())->method('setCustomerEmail')->willReturn($orderMock);
  69. $orderMock->expects($this->once())->method('setCustomerFirstname')->willReturn($orderMock);
  70. $orderMock->expects($this->once())->method('setCustomerLastname')->willReturn($orderMock);
  71. $orderMock->expects($this->once())->method('setCustomerMiddlename')->willReturn($orderMock);
  72. $orderMock->expects($this->once())->method('setCustomerPrefix')->willReturn($orderMock);
  73. $orderMock->expects($this->once())->method('setCustomerSuffix')->willReturn($orderMock);
  74. $orderMock->expects($this->once())->method('setCustomerGroupId')->willReturn($orderMock);
  75. if (!$customerId) {
  76. $this->orderRepositoryMock->expects($this->once())->method('save')->with($orderMock);
  77. $this->sut->execute($observerMock);
  78. return ;
  79. }
  80. $this->orderRepositoryMock->expects($this->never())->method('save')->with($orderMock);
  81. $this->sut->execute($observerMock);
  82. }
  83. /**
  84. * Customer id assigned to order
  85. *
  86. * @return array
  87. */
  88. public function getCustomerIds()
  89. {
  90. return [[null, 1]];
  91. }
  92. }