contextMock = $this->getMockBuilder(\Magento\Framework\Model\Context::class) ->disableOriginalConstructor() ->getMock(); $this->registryMock = $this->getMockBuilder(\Magento\Framework\Registry::class) ->getMock(); $this->extensionAttributesFactory = $this->getMockBuilder( \Magento\Framework\Api\ExtensionAttributesFactory::class ) ->disableOriginalConstructor() ->getMock(); $this->attributeValueFactoryMock = $this->getMockBuilder(\Magento\Framework\Api\AttributeValueFactory::class) ->disableOriginalConstructor() ->getMock(); $this->configMock = $this->getMockBuilder(\Magento\Eav\Model\Config::class) ->disableOriginalConstructor() ->getMock(); $this->typeFactoryMock = $this->getMockBuilder(\Magento\Eav\Model\Entity\TypeFactory::class) ->disableOriginalConstructor() ->getMock(); $this->storeManagerMock = $this->getMockBuilder(\Magento\Store\Model\StoreManagerInterface::class) ->getMock(); $this->helperMock = $this->getMockBuilder(\Magento\Eav\Model\ResourceModel\Helper::class) ->disableOriginalConstructor() ->getMock(); $this->universalFactoryMock = $this->getMockBuilder(\Magento\Framework\Validator\UniversalFactory::class) ->disableOriginalConstructor() ->getMock(); $this->attributeOptionFactoryMock = $this->getMockBuilder(\Magento\Eav\Api\Data\AttributeOptionInterfaceFactory::class) ->disableOriginalConstructor() ->getMock(); $this->dataObjectProcessorMock = $this->getMockBuilder(\Magento\Framework\Reflection\DataObjectProcessor::class) ->disableOriginalConstructor() ->getMock(); $this->dataObjectHelperMock = $this->getMockBuilder(\Magento\Framework\Api\DataObjectHelper::class) ->disableOriginalConstructor() ->getMock(); $this->timezoneMock = $this->getMockBuilder(\Magento\Framework\Stdlib\DateTime\TimezoneInterface::class) ->getMock(); $this->reservedAttributeListMock = $this->getMockBuilder( \Magento\Catalog\Model\Product\ReservedAttributeList::class ) ->disableOriginalConstructor() ->getMock(); $this->resolverMock = $this->getMockBuilder(\Magento\Framework\Locale\ResolverInterface::class) ->getMock(); $this->dateTimeFormatter = $this->createMock( \Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface::class ); $this->resourceMock = $this->getMockBuilder(\Magento\Framework\Model\ResourceModel\AbstractResource::class) ->setMethods(['_construct', 'getConnection', 'getIdFieldName', 'saveInSetIncluding']) ->getMockForAbstractClass(); $this->cacheManager = $this->getMockBuilder(\Magento\Framework\App\CacheInterface::class) ->getMock(); $this->eventDispatcher = $this->getMockBuilder(\Magento\Framework\Event\ManagerInterface::class) ->getMock(); $this->contextMock ->expects($this->any()) ->method('getCacheManager') ->willReturn($this->cacheManager); $this->contextMock ->expects($this->any()) ->method('getEventDispatcher') ->willReturn($this->eventDispatcher); $this->indexerRegistryMock = $this->getMockBuilder(\Magento\Framework\Indexer\IndexerRegistry::class) ->disableOriginalConstructor() ->getMock(); $this->attributeMetadataCacheMock = $this->getMockBuilder(AttributeMetadataCache::class) ->disableOriginalConstructor() ->getMock(); $this->attribute = $objectManagerHelper->getObject( Attribute::class, [ 'context' => $this->contextMock, 'registry' => $this->registryMock, 'extensionFactory' => $this->extensionAttributesFactory, 'attributeValueFactory' => $this->attributeValueFactoryMock, 'eavConfig' => $this->configMock, 'typeFactory' => $this->typeFactoryMock, 'storeManager' => $this->storeManagerMock, 'helper' => $this->helperMock, 'universalFactory' => $this->universalFactoryMock, 'attributeOptionFactory' => $this->attributeOptionFactoryMock, 'dataObjectProcessor' => $this->dataObjectProcessorMock, 'dataObjectHelper' => $this->dataObjectHelperMock, 'timezone' => $this->timezoneMock, 'reservedAttributeList' => $this->reservedAttributeListMock, 'resolver' => $this->resolverMock, 'dateTimeFormatter' => $this->dateTimeFormatter, 'indexerRegistry' => $this->indexerRegistryMock, 'resource' => $this->resourceMock, 'attributeMetadataCache' => $this->attributeMetadataCacheMock ] ); } public function testAfterSaveEavCache() { $this->configMock ->expects($this->once()) ->method('clear'); $this->attributeMetadataCacheMock ->expects($this->once()) ->method('clean'); $this->attribute->afterSave(); } public function testAfterDeleteEavCache() { $this->configMock ->expects($this->once()) ->method('clear'); $this->attributeMetadataCacheMock ->expects($this->once()) ->method('clean'); $this->attribute->afterDelete(); } public function testInvalidate() { /** @var IndexerInterface|\PHPUnit_Framework_MockObject_MockObject $indexerMock */ $indexerMock = $this->getMockBuilder(\Magento\Framework\Indexer\IndexerInterface::class) ->getMockForAbstractClass(); $this->indexerRegistryMock->expects($this->once()) ->method('get') ->with(Customer::CUSTOMER_GRID_INDEXER_ID) ->willReturn($indexerMock); $indexerMock->expects($this->once()) ->method('invalidate'); $this->attribute->invalidate(); } /** * @param int $isSearchableInGrid * @param string $frontendInput * @param bool $result * @dataProvider dataProviderCanBeSearchableInGrid */ public function testCanBeSearchableInGrid($isSearchableInGrid, $frontendInput, $result) { $this->attribute->setData('is_searchable_in_grid', $isSearchableInGrid); $this->attribute->setData(AttributeInterface::FRONTEND_INPUT, $frontendInput); $this->assertEquals($result, $this->attribute->canBeSearchableInGrid()); } /** * @return array */ public function dataProviderCanBeSearchableInGrid() { return [ [0, 'text', false], [0, 'textarea', false], [1, 'text', true], [1, 'textarea', true], [1, 'date', false], [1, 'boolean', false], [1, 'select', false], [1, 'media_image', false], [1, 'gallery', false], [1, 'multiselect', false], [1, 'image', false], [1, 'price', false], [1, 'weight', false], ]; } /** * @param int $isFilterableInGrid * @param string $frontendInput * @param bool $result * @dataProvider dataProviderCanBeFilterableInGrid */ public function testCanBeFilterableInGrid($isFilterableInGrid, $frontendInput, $result) { $this->attribute->setData('is_filterable_in_grid', $isFilterableInGrid); $this->attribute->setData(AttributeInterface::FRONTEND_INPUT, $frontendInput); $this->assertEquals($result, $this->attribute->canBeFilterableInGrid()); } /** * @return array */ public function dataProviderCanBeFilterableInGrid() { return [ [0, 'text', false], [0, 'date', false], [0, 'select', false], [0, 'boolean', false], [1, 'text', true], [1, 'date', true], [1, 'select', true], [1, 'boolean', true], [1, 'textarea', false], [1, 'media_image', false], [1, 'gallery', false], [1, 'multiselect', false], [1, 'image', false], [1, 'price', false], [1, 'weight', false], ]; } }