208 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			208 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
namespace Magento\Eav\Model;
 | 
						|
 | 
						|
use Magento\Framework\App\Config\MutableScopeConfigInterface;
 | 
						|
use Magento\Framework\DataObject;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use Magento\TestFramework\Helper\CacheCleaner;
 | 
						|
 | 
						|
/**
 | 
						|
 * @magentoAppIsolation enabled
 | 
						|
 * @magentoDbIsolation enabled
 | 
						|
 */
 | 
						|
class ConfigTest extends \PHPUnit\Framework\TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var Config
 | 
						|
     */
 | 
						|
    private $config;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $objectManager = Bootstrap::getObjectManager();
 | 
						|
        $this->config = $objectManager->get(Config::class);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDataFixture Magento/Eav/_files/attribute_for_search.php
 | 
						|
     */
 | 
						|
    public function testGetEntityAttributeCodes()
 | 
						|
    {
 | 
						|
        $entityType = 'test';
 | 
						|
        $entityAttributeCodes1 = $this->config->getEntityAttributeCodes($entityType);
 | 
						|
        $this->assertEquals(
 | 
						|
            [
 | 
						|
                'attribute_for_search_1',
 | 
						|
                'attribute_for_search_2',
 | 
						|
                'attribute_for_search_3',
 | 
						|
                'attribute_for_search_4',
 | 
						|
                'attribute_for_search_5',
 | 
						|
            ],
 | 
						|
            $entityAttributeCodes1
 | 
						|
        );
 | 
						|
 | 
						|
        $entityAttributeCodes2 = $this->config->getEntityAttributeCodes($entityType);
 | 
						|
        $this->assertEquals($entityAttributeCodes1, $entityAttributeCodes2);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDataFixture Magento/Eav/_files/attribute_for_search.php
 | 
						|
     */
 | 
						|
    public function testGetEntityAttributeCodesWithObject()
 | 
						|
    {
 | 
						|
        $entityType = 'test';
 | 
						|
        /** @var \Magento\Eav\Model\Entity\Type $testEntityType */
 | 
						|
        $testEntityType = Bootstrap::getObjectManager()->create(\Magento\Eav\Model\Entity\Type::class)
 | 
						|
            ->loadByCode('test');
 | 
						|
        $attributeSetId = $testEntityType->getDefaultAttributeSetId();
 | 
						|
        $object = new DataObject(
 | 
						|
            [
 | 
						|
                'attribute_set_id' => $attributeSetId,
 | 
						|
                'store_id' => 0
 | 
						|
            ]
 | 
						|
        );
 | 
						|
        $entityAttributeCodes1 = $this->config->getEntityAttributeCodes($entityType, $object);
 | 
						|
        $this->assertEquals(
 | 
						|
            [
 | 
						|
                'attribute_for_search_1',
 | 
						|
                'attribute_for_search_2',
 | 
						|
            ],
 | 
						|
            $entityAttributeCodes1
 | 
						|
        );
 | 
						|
 | 
						|
        $entityAttributeCodes2 = $this->config->getEntityAttributeCodes($entityType, $object);
 | 
						|
        $this->assertEquals($entityAttributeCodes1, $entityAttributeCodes2);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDataFixture Magento/Eav/_files/attribute_for_search.php
 | 
						|
     */
 | 
						|
    public function testGetAttributes()
 | 
						|
    {
 | 
						|
        $entityType = 'test';
 | 
						|
        $attributes1 = $this->config->getAttributes($entityType);
 | 
						|
        $expectedAttributeCodes = [
 | 
						|
            'attribute_for_search_1',
 | 
						|
            'attribute_for_search_2',
 | 
						|
            'attribute_for_search_3',
 | 
						|
            'attribute_for_search_4',
 | 
						|
            'attribute_for_search_5',
 | 
						|
        ];
 | 
						|
        $this->assertEquals(count($expectedAttributeCodes), count($attributes1));
 | 
						|
        $attributeCodes = [];
 | 
						|
        foreach ($attributes1 as $attribute) {
 | 
						|
            $attributeCodes[] = $attribute->getAttributeCode();
 | 
						|
        }
 | 
						|
        $this->assertEquals($expectedAttributeCodes, $attributeCodes);
 | 
						|
        $attributes2 = $this->config->getAttributes($entityType);
 | 
						|
        $this->assertEquals($attributes1, $attributes2);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDataFixture Magento/Eav/_files/attribute_for_search.php
 | 
						|
     */
 | 
						|
    public function testGetAttribute()
 | 
						|
    {
 | 
						|
        $entityType = 'test';
 | 
						|
        $attribute1 = $this->config->getAttribute($entityType, 'attribute_for_search_1');
 | 
						|
        $this->assertEquals('attribute_for_search_1', $attribute1->getAttributeCode());
 | 
						|
        $this->assertEquals('varchar', $attribute1->getBackendType());
 | 
						|
        $this->assertEquals(1, $attribute1->getIsRequired());
 | 
						|
        $this->assertEquals(1, $attribute1->getIsUserDefined());
 | 
						|
        $this->assertEquals(0, $attribute1->getIsUnique());
 | 
						|
        $attribute2 = $this->config->getAttribute($entityType, 'attribute_for_search_1');
 | 
						|
        $this->assertEquals($attribute1, $attribute2);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDataFixture Magento/Eav/_files/attribute_for_caching.php
 | 
						|
     */
 | 
						|
    public function testGetAttributeWithCacheUserDefinedAttribute()
 | 
						|
    {
 | 
						|
        /** @var MutableScopeConfigInterface $mutableScopeConfig */
 | 
						|
        $mutableScopeConfig = Bootstrap::getObjectManager()->get(MutableScopeConfigInterface::class);
 | 
						|
        $mutableScopeConfig->setValue('dev/caching/cache_user_defined_attributes', 1);
 | 
						|
        $entityType = 'catalog_product';
 | 
						|
        $attribute = $this->config->getAttribute($entityType, 'foo');
 | 
						|
        $this->assertEquals('foo', $attribute->getAttributeCode());
 | 
						|
        $this->assertEquals('foo', $attribute->getFrontendLabel());
 | 
						|
        $this->assertEquals('varchar', $attribute->getBackendType());
 | 
						|
        $this->assertEquals(1, $attribute->getIsRequired());
 | 
						|
        $this->assertEquals(1, $attribute->getIsUserDefined());
 | 
						|
        $this->assertEquals(0, $attribute->getIsUnique());
 | 
						|
        // Update attribute
 | 
						|
        $eavSetupFactory = Bootstrap::getObjectManager()->create(\Magento\Eav\Setup\EavSetupFactory::class);
 | 
						|
        /** @var \Magento\Eav\Setup\EavSetup $eavSetup */
 | 
						|
        $eavSetup = $eavSetupFactory->create();
 | 
						|
        $eavSetup->updateAttribute(
 | 
						|
            \Magento\Catalog\Model\Product::ENTITY,
 | 
						|
            'foo',
 | 
						|
            [
 | 
						|
                'frontend_label' => 'bar',
 | 
						|
            ]
 | 
						|
        );
 | 
						|
        // Check that attribute data has not changed
 | 
						|
        $config = Bootstrap::getObjectManager()->create(\Magento\Eav\Model\Config::class);
 | 
						|
        $updatedAttribute = $config->getAttribute($entityType, 'foo');
 | 
						|
        $this->assertEquals('foo', $updatedAttribute->getFrontendLabel());
 | 
						|
        CacheCleaner::clean(['eav']);
 | 
						|
        $config = Bootstrap::getObjectManager()->create(\Magento\Eav\Model\Config::class);
 | 
						|
        // Check that attribute data has changed
 | 
						|
        $updatedAttributeAfterCacheClean = $config->getAttribute($entityType, 'foo');
 | 
						|
        $this->assertEquals('bar', $updatedAttributeAfterCacheClean->getFrontendLabel());
 | 
						|
        $mutableScopeConfig->setValue('dev/caching/cache_user_defined_attributes', 0);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDataFixture Magento/Eav/_files/attribute_for_caching.php
 | 
						|
     */
 | 
						|
    public function testGetAttributeWithInitUserDefinedAttribute()
 | 
						|
    {
 | 
						|
        /** @var MutableScopeConfigInterface $mutableScopeConfig */
 | 
						|
        $mutableScopeConfig = Bootstrap::getObjectManager()->get(MutableScopeConfigInterface::class);
 | 
						|
        $mutableScopeConfig->setValue('dev/caching/cache_user_defined_attributes', 0);
 | 
						|
        $entityType = 'catalog_product';
 | 
						|
        $attribute = $this->config->getAttribute($entityType, 'foo');
 | 
						|
        $this->assertEquals('foo', $attribute->getAttributeCode());
 | 
						|
        $this->assertEquals('foo', $attribute->getFrontendLabel());
 | 
						|
        $this->assertEquals('varchar', $attribute->getBackendType());
 | 
						|
        $this->assertEquals(1, $attribute->getIsRequired());
 | 
						|
        $this->assertEquals(1, $attribute->getIsUserDefined());
 | 
						|
        $this->assertEquals(0, $attribute->getIsUnique());
 | 
						|
        // Update attribute
 | 
						|
        $eavSetupFactory = Bootstrap::getObjectManager()->create(\Magento\Eav\Setup\EavSetupFactory::class);
 | 
						|
        /** @var \Magento\Eav\Setup\EavSetup $eavSetup */
 | 
						|
        $eavSetup = $eavSetupFactory->create();
 | 
						|
        $eavSetup->updateAttribute(
 | 
						|
            \Magento\Catalog\Model\Product::ENTITY,
 | 
						|
            'foo',
 | 
						|
            [
 | 
						|
                'frontend_label' => 'bar',
 | 
						|
            ]
 | 
						|
        );
 | 
						|
        // Check that attribute data has changed
 | 
						|
        $config = Bootstrap::getObjectManager()->create(\Magento\Eav\Model\Config::class);
 | 
						|
        $updatedAttributeAfterCacheClean = $config->getAttribute($entityType, 'foo');
 | 
						|
        $this->assertEquals('bar', $updatedAttributeAfterCacheClean->getFrontendLabel());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritDoc
 | 
						|
     */
 | 
						|
    protected function tearDown(): void
 | 
						|
    {
 | 
						|
        parent::tearDown();
 | 
						|
        $reflection = new \ReflectionObject($this);
 | 
						|
        foreach ($reflection->getProperties() as $property) {
 | 
						|
            if (!$property->isStatic() && 0 !== strpos($property->getDeclaringClass()->getName(), 'PHPUnit')) {
 | 
						|
                $property->setAccessible(true);
 | 
						|
                $property->setValue($this, null);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |