![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-eav/Test/Unit/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Eav\Test\Unit\Model; use Magento\Eav\Api\Data\AttributeInterface; use Magento\Eav\Api\Data\AttributeSearchResultsInterface; use Magento\Eav\Api\Data\AttributeSearchResultsInterfaceFactory; use Magento\Eav\Model\AttributeRepository; use Magento\Eav\Model\Config; use Magento\Eav\Model\Entity\AttributeFactory; use Magento\Eav\Model\Entity\Type; use Magento\Eav\Model\ResourceModel\Entity\Attribute; use Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection; use Magento\Eav\Model\ResourceModel\Entity\Attribute\CollectionFactory; use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface; use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface; use Magento\Framework\Api\SearchCriteriaInterface; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class AttributeRepositoryTest extends TestCase { /** * @var Config|MockObject */ private $eavConfig; /** * @var Attribute|MockObject */ private $eavResource; /** * @var CollectionFactory|MockObject */ private $attributeCollectionFactory; /** * @var AttributeSearchResultsInterfaceFactory|MockObject */ private $searchResultsFactory; /** * @var AttributeFactory|MockObject */ private $attributeFactory; /** * @var JoinProcessorInterface|MockObject */ private $joinProcessor; /** * @var CollectionProcessorInterface|MockObject */ private $collectionProcessor; /** * @var AttributeRepository */ private $model; protected function setUp(): void { $this->eavConfig = $this->getMockBuilder(Config::class) ->disableOriginalConstructor() ->getMock(); $this->eavResource = $this->getMockBuilder(Attribute::class) ->disableOriginalConstructor() ->getMock(); $this->attributeCollectionFactory = $this->getMockBuilder(CollectionFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $this->searchResultsFactory = $this->getMockBuilder(AttributeSearchResultsInterfaceFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $this->attributeFactory = $this->getMockBuilder(AttributeFactory::class) ->disableOriginalConstructor() ->getMock(); $this->joinProcessor = $this->getMockBuilder(JoinProcessorInterface::class) ->getMockForAbstractClass(); $this->collectionProcessor = $this->getMockBuilder(CollectionProcessorInterface::class) ->getMockForAbstractClass(); $this->model = new AttributeRepository( $this->eavConfig, $this->eavResource, $this->attributeCollectionFactory, $this->searchResultsFactory, $this->attributeFactory, $this->joinProcessor, $this->collectionProcessor ); } public function testGetListInputException() { $this->expectException('Magento\Framework\Exception\InputException'); $this->expectExceptionMessage('"entity_type_code" is required. Enter and try again.'); $searchCriteriaMock = $this->getMockBuilder(SearchCriteriaInterface::class) ->getMockForAbstractClass(); $this->model->getList(null, $searchCriteriaMock); } /** * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testGetList() { $entityTypeCode = 'entity_type_code'; $eavEntityTypeTable = 'eav_entity_type_table'; $eavEntityAttributeTable = 'eav_entity_attribute_table'; $additionalTable = 'additional_table'; $attributeCode = 'attribute_code'; $attributeId = 1; $collectionSize = 1; $searchCriteriaMock = $this->getMockBuilder(SearchCriteriaInterface::class) ->setMethods(['getPageSize']) ->getMockForAbstractClass(); $searchCriteriaMock->expects($this->any()) ->method('getPageSize') ->willReturn($collectionSize); $attributeMock = $this->createAttributeMock($attributeCode, $attributeId); $attributeCollectionMock = $this->getMockBuilder(Collection::class) ->disableOriginalConstructor() ->getMock(); $attributeCollectionMock->expects($this->once()) ->method('addFieldToFilter') ->with('entity_type_code', ['eq' => $entityTypeCode]) ->willReturnSelf(); $attributeCollectionMock->expects($this->exactly(3)) ->method('getTable') ->willReturnMap([ ['eav_entity_type', $eavEntityTypeTable], ['eav_entity_attribute', $eavEntityAttributeTable], [$additionalTable, $additionalTable], ]); $attributeCollectionMock->expects($this->exactly(2)) ->method('join') ->willReturnMap([ [ ['entity_type' => $eavEntityTypeTable], 'main_table.entity_type_id = entity_type.entity_type_id', [] ], [ ['additional_table' => $additionalTable], 'main_table.attribute_id = additional_table.attribute_id', [] ] ]); $attributeCollectionMock->expects($this->once()) ->method('joinLeft') ->with( ['eav_entity_attribute' => $eavEntityAttributeTable], 'main_table.attribute_id = eav_entity_attribute.attribute_id', [] ) ->willReturnSelf(); $attributeCollectionMock->expects($this->once()) ->method('addAttributeGrouping') ->willReturnSelf(); $attributeCollectionMock->expects($this->once()) ->method('getIterator') ->willReturn(new \ArrayIterator([$attributeMock])); $attributeCollectionMock->expects($this->once()) ->method('getSize') ->willReturn($collectionSize); $this->attributeCollectionFactory->expects($this->once()) ->method('create') ->willReturn($attributeCollectionMock); $this->joinProcessor->expects($this->once()) ->method('process') ->with($attributeCollectionMock) ->willReturnSelf(); $entityTypeMock = $this->getMockBuilder(Type::class) ->disableOriginalConstructor() ->setMethods(['getAdditionalAttributeTable']) ->getMock(); $entityTypeMock->expects($this->once()) ->method('getAdditionalAttributeTable') ->willReturn($additionalTable); $this->eavConfig->expects($this->once()) ->method('getEntityType') ->with($entityTypeCode) ->willReturn($entityTypeMock); $this->eavConfig->expects($this->once()) ->method('getAttribute') ->with($entityTypeCode, $attributeCode) ->willReturn($attributeMock); $this->collectionProcessor->expects($this->once()) ->method('process') ->with($searchCriteriaMock, $attributeCollectionMock) ->willReturnSelf(); $searchResultsMock = $this->createSearchResultsMock($searchCriteriaMock, $attributeMock, $collectionSize); $this->searchResultsFactory->expects($this->once()) ->method('create') ->willReturn($searchResultsMock); $this->assertEquals($searchResultsMock, $this->model->getList($entityTypeCode, $searchCriteriaMock)); } /** * @param MockObject $searchCriteriaMock * @param MockObject $attributeMock * @param int $collectionSize * @return MockObject */ protected function createSearchResultsMock($searchCriteriaMock, $attributeMock, $collectionSize) { /** @var MockObject $searchResultsMock */ $searchResultsMock = $this->getMockBuilder(AttributeSearchResultsInterface::class) ->getMockForAbstractClass(); $searchResultsMock->expects($this->once()) ->method('setSearchCriteria') ->with($searchCriteriaMock) ->willReturnSelf(); $searchResultsMock->expects($this->once()) ->method('setItems') ->with([$attributeMock]) ->willReturnSelf(); $searchResultsMock->expects($this->once()) ->method('setTotalCount') ->with($collectionSize) ->willReturnSelf(); return $searchResultsMock; } /** * @param string $attributeCode * @param int $attributeId * @return MockObject */ protected function createAttributeMock($attributeCode, $attributeId) { /** @var MockObject $attributeMock */ $attributeMock = $this->getMockBuilder(AttributeInterface::class) ->setMethods([ 'getAttributeCode', 'getAttributeId', ]) ->getMockForAbstractClass(); $attributeMock->expects($this->once()) ->method('getAttributeCode') ->willReturn($attributeCode); $attributeMock->expects($this->once()) ->method('getAttributeId') ->willReturn($attributeId); return $attributeMock; } }