MapperTest.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Customer\Test\Unit\Model\Address;
  7. class MapperTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /** @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager */
  10. protected $_objectManager;
  11. /**
  12. * @var \Magento\Customer\Model\Address\Mapper
  13. */
  14. protected $addressMapper;
  15. /** @var \Magento\Framework\Api\ExtensibleDataObjectConverter|\PHPUnit_Framework_MockObject_MockObject */
  16. protected $extensibleObjectConverter;
  17. protected function setUp()
  18. {
  19. $this->extensibleObjectConverter = $this->getMockBuilder(
  20. \Magento\Framework\Api\ExtensibleDataObjectConverter::class
  21. )->disableOriginalConstructor()->getMock();
  22. $this->_objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  23. $this->addressMapper = $this->_objectManager->getObject(
  24. \Magento\Customer\Model\Address\Mapper::class,
  25. [
  26. 'extensibleDataObjectConverter' => $this->extensibleObjectConverter
  27. ]
  28. );
  29. }
  30. public function testToFlatArray()
  31. {
  32. $expectedResultWithoutStreet = [
  33. 'id' => 1,
  34. 'default_shipping' => false,
  35. 'default_billing' => true,
  36. 'firstname' => 'John',
  37. 'lastname' => 'Doe',
  38. 'city' => 'Austin',
  39. 'country_id' => 'US',
  40. 'region_id' => 1,
  41. 'region' => 'Texas',
  42. 'region_code' => 'TX'
  43. ];
  44. $expectedResultWithStreet = array_merge(
  45. $expectedResultWithoutStreet,
  46. [
  47. 'street' => ['7700 W Parmer Ln', 'Austin, TX'],
  48. ]
  49. );
  50. $this->extensibleObjectConverter->expects($this->once())->method('toFlatArray')->willReturn(
  51. $expectedResultWithoutStreet
  52. );
  53. $addressData = $this->createAddressMock();
  54. $result = $this->addressMapper->toFlatArray($addressData);
  55. $this->assertEquals($expectedResultWithStreet, $result);
  56. }
  57. /**
  58. * @return \Magento\Customer\Api\Data\AddressInterface|\PHPUnit_Framework_MockObject_MockObject
  59. */
  60. protected function createAddressMock()
  61. {
  62. /** @var \Magento\Customer\Api\Data\RegionInterface|\PHPUnit_Framework_MockObject_MockObject $regionMock */
  63. $regionMock = $this->getMockForAbstractClass(\Magento\Customer\Api\Data\RegionInterface::class, [], '', false);
  64. $regionMock->expects($this->any())->method('getRegion')->willReturn('Texas');
  65. $regionMock->expects($this->any())->method('getRegionId')->willReturn(1);
  66. $regionMock->expects($this->any())->method('getRegionCode')->willReturn('TX');
  67. $addressMock = $this->getMockBuilder(\Magento\Customer\Api\Data\AddressInterface::class)
  68. ->setMethods(
  69. [
  70. 'getId',
  71. 'getDefaultBilling',
  72. 'getDefaultShipping',
  73. 'getCity',
  74. 'getFirstname',
  75. 'getLastname',
  76. 'getCountryId',
  77. 'getRegion',
  78. 'getStreet'
  79. ]
  80. )
  81. ->getMockForAbstractClass();
  82. $addressMock->expects($this->any())->method('getId')->willReturn('1');
  83. $addressMock->expects($this->any())->method('getDefaultBilling')->willReturn(true);
  84. $addressMock->expects($this->any())->method('getDefaultShipping')->willReturn(false);
  85. $addressMock->expects($this->any())->method('getCity')->willReturn('Austin');
  86. $addressMock->expects($this->any())->method('getFirstname')->willReturn('John');
  87. $addressMock->expects($this->any())->method('getLastname')->willReturn('Doe');
  88. $addressMock->expects($this->any())->method('getCountryId')->willReturn('US');
  89. $addressMock->expects($this->any())->method('getRegion')->willReturn($regionMock);
  90. $addressMock->expects($this->any())->method('getStreet')->willReturn(['7700 W Parmer Ln', 'Austin, TX']);
  91. return $addressMock;
  92. }
  93. }