123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Eav\Test\Unit\Model;
- /**
- * Class CustomAttributesMapperTest
- */
- class CustomAttributesMapperTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
- */
- private $objectManager;
- public function setUp()
- {
- $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
- }
- public function testEntityToDatabase()
- {
- $searchResult = $this->getMockBuilder(\Magento\Framework\Api\SearchResults::class)
- ->disableOriginalConstructor()
- ->setMethods(['getItems'])
- ->getMock();
- $searchResult->expects($this->any())
- ->method('getItems')
- ->will($this->returnValue($this->getAttributes()));
- $attributeRepository = $this->getMockBuilder(\Magento\Eav\Model\AttributeRepository::class)
- ->disableOriginalConstructor()
- ->setMethods(['getList'])
- ->getMock();
- $attributeRepository->expects($this->any())
- ->method('getList')
- ->will($this->returnValue($searchResult));
- $metadata = $this->objectManager->getObject(
- \Magento\Framework\EntityManager\EntityMetadata::class,
- [
- 'entityTableName' => 'test',
- 'identifierField' => 'entity_id',
- 'eavEntityType' => 'customer_address'
- ]
- );
- $metadataPool = $this->getMockBuilder(\Magento\Framework\EntityManager\MetadataPool::class)
- ->disableOriginalConstructor()
- ->setMethods(['getMetadata', 'hasConfiguration'])
- ->getMock();
- $metadataPool->expects($this->any())
- ->method('hasConfiguration')
- ->willReturn(true);
- $metadataPool->expects($this->any())
- ->method('getMetadata')
- ->with($this->equalTo(\Magento\Framework\Api\CustomAttributesDataInterface::class))
- ->will($this->returnValue($metadata));
- $metadataPool->expects($this->once())
- ->method('hasConfiguration')
- ->willReturn(true);
- $searchCriteriaBuilder = $this->getMockBuilder(\Magento\Framework\Api\SearchCriteriaBuilder::class)
- ->disableOriginalConstructor()
- ->setMethods(['addFilter', 'create'])
- ->getMock();
- $searchCriteria = $this->getMockBuilder(\Magento\Framework\Api\SearchCriteria::class)
- ->disableOriginalConstructor()
- ->getMock();
- $searchCriteriaBuilder->expects($this->any())
- ->method('addFilter')
- ->will($this->returnValue($searchCriteriaBuilder));
- $searchCriteriaBuilder->expects($this->any())
- ->method('create')
- ->will($this->returnValue($searchCriteria));
- /** @var \Magento\Eav\Model\CustomAttributesMapper $customAttributesMapper */
- $customAttributesMapper = $this->objectManager
- ->getObject(\Magento\Eav\Model\CustomAttributesMapper::class, [
- 'attributeRepository' => $attributeRepository,
- 'metadataPool' => $metadataPool,
- 'searchCriteriaBuilder' => $searchCriteriaBuilder
- ]);
- $actual = $customAttributesMapper->entityToDatabase(
- \Magento\Framework\Api\CustomAttributesDataInterface::class,
- [
- \Magento\Framework\Api\CustomAttributesDataInterface::CUSTOM_ATTRIBUTES => [
- 'test' => [
- \Magento\Framework\Api\AttributeInterface::ATTRIBUTE_CODE => 'test',
- \Magento\Framework\Api\AttributeInterface::VALUE => 'test'
- ],
- 'test1' => [
- \Magento\Framework\Api\AttributeInterface::ATTRIBUTE_CODE => 'test4',
- \Magento\Framework\Api\AttributeInterface::VALUE => 'test4'
- ],
- 'test2' => [
- \Magento\Framework\Api\AttributeInterface::ATTRIBUTE_CODE => 'test2',
- \Magento\Framework\Api\AttributeInterface::VALUE => 'test2'
- ]
- ]
- ]
- );
- $expected = [
- \Magento\Framework\Api\CustomAttributesDataInterface::CUSTOM_ATTRIBUTES => [
- 'test1' => [
- \Magento\Framework\Api\AttributeInterface::ATTRIBUTE_CODE => 'test4',
- \Magento\Framework\Api\AttributeInterface::VALUE => 'test4'
- ],
- 'test2' => [
- \Magento\Framework\Api\AttributeInterface::ATTRIBUTE_CODE => 'test2',
- \Magento\Framework\Api\AttributeInterface::VALUE => 'test2'
- ],
- ],
- 'test' => 'test'
- ];
- $this->assertEquals($expected, $actual);
- }
- public function testDatabaseToEntity()
- {
- $searchResult = $this->getMockBuilder(\Magento\Framework\Api\SearchResults::class)
- ->disableOriginalConstructor()
- ->setMethods(['getItems'])
- ->getMock();
- $searchResult->expects($this->any())
- ->method('getItems')
- ->will($this->returnValue($this->getAttributes()));
- $attributeRepository = $this->getMockBuilder(\Magento\Eav\Model\AttributeRepository::class)
- ->disableOriginalConstructor()
- ->setMethods(['getList'])
- ->getMock();
- $attributeRepository->expects($this->any())
- ->method('getList')
- ->will($this->returnValue($searchResult));
- $metadata = $this->objectManager->getObject(
- \Magento\Framework\EntityManager\EntityMetadata::class,
- [
- 'entityTableName' => 'test',
- 'identifierField' => 'entity_id',
- 'eavEntityType' => 'customer_address'
- ]
- );
- $metadataPool = $this->getMockBuilder(\Magento\Framework\EntityManager\MetadataPool::class)
- ->disableOriginalConstructor()
- ->setMethods(['getMetadata'])
- ->getMock();
- $metadataPool->expects($this->any())
- ->method('getMetadata')
- ->with($this->equalTo(\Magento\Framework\Api\CustomAttributesDataInterface::class))
- ->will($this->returnValue($metadata));
- $searchCriteriaBuilder = $this->getMockBuilder(\Magento\Framework\Api\SearchCriteriaBuilder::class)
- ->disableOriginalConstructor()
- ->setMethods(['addFilter', 'create'])
- ->getMock();
- $searchCriteria = $this->getMockBuilder(\Magento\Framework\Api\SearchCriteria::class)
- ->disableOriginalConstructor()
- ->getMock();
- $searchCriteriaBuilder->expects($this->any())
- ->method('addFilter')
- ->will($this->returnValue($searchCriteriaBuilder));
- $searchCriteriaBuilder->expects($this->any())
- ->method('create')
- ->will($this->returnValue($searchCriteria));
- /** @var \Magento\Eav\Model\CustomAttributesMapper $customAttributesMapper */
- $customAttributesMapper = $this->objectManager
- ->getObject(\Magento\Eav\Model\CustomAttributesMapper::class, [
- 'attributeRepository' => $attributeRepository,
- 'metadataPool' => $metadataPool,
- 'searchCriteriaBuilder' => $searchCriteriaBuilder
- ]);
- $actual = $customAttributesMapper->databaseToEntity(
- \Magento\Framework\Api\CustomAttributesDataInterface::class,
- [
- 'test' => 'test',
- 'test4' => 'test4',
- 'test2' => 'test2'
- ]
- );
- $expected = [
- 'test4' => 'test4',
- 'test2' => 'test2',
- \Magento\Framework\Api\CustomAttributesDataInterface::CUSTOM_ATTRIBUTES => [
- [
- \Magento\Framework\Api\AttributeInterface::ATTRIBUTE_CODE => 'test',
- \Magento\Framework\Api\AttributeInterface::VALUE => 'test'
- ]
- ],
- 'test' => 'test'
- ];
- $this->assertEquals($expected, $actual);
- }
- /**
- * @return array
- */
- private function getAttributes()
- {
- /* Attribute with the code we want to copy */
- $attribute = $this->getMockBuilder(\Magento\Eav\Model\Entity\Attribute\AbstractAttribute::class)
- ->disableOriginalConstructor()
- ->setMethods(['isStatic', 'getAttributeCode'])
- ->getMockForAbstractClass();
- $attribute->expects($this->any())
- ->method('isStatic')
- ->will($this->returnValue(false));
- $attribute->expects($this->any())
- ->method('getAttributeCode')
- ->will($this->returnValue('test'));
- /* Attribute with the code we don't want to copy */
- $attribute1 = $this->getMockBuilder(\Magento\Eav\Model\Entity\Attribute\AbstractAttribute::class)
- ->disableOriginalConstructor()
- ->setMethods(['isStatic', 'getAttributeCode'])
- ->getMockForAbstractClass();
- $attribute1->expects($this->any())
- ->method('isStatic')
- ->will($this->returnValue(false));
- $attribute1->expects($this->any())
- ->method('getAttributeCode')
- ->will($this->returnValue('test1'));
- /* Static attribute but with the code which exists in custom attributes */
- $attribute2 = $this->getMockBuilder(\Magento\Eav\Model\Entity\Attribute\AbstractAttribute::class)
- ->disableOriginalConstructor()
- ->setMethods(['isStatic', 'getAttributeCode'])
- ->getMockForAbstractClass();
- $attribute2->expects($this->any())
- ->method('isStatic')
- ->will($this->returnValue(true));
- $attribute2->expects($this->any())
- ->method('getAttributeCode')
- ->will($this->returnValue('test2'));
- return [$attribute, $attribute1, $attribute2];
- }
- }
|