166 lines
4.7 KiB
PHP
Executable File
166 lines
4.7 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
namespace Magento\Eav\Setup;
|
|
|
|
/**
|
|
* Test class for Magento\Eav\Setup\EavSetup.
|
|
* @magentoDbIsolation enabled
|
|
*/
|
|
class EavSetupTest extends \PHPUnit\Framework\TestCase
|
|
{
|
|
/**
|
|
* Eav setup.
|
|
*
|
|
* @var \Magento\Eav\Setup\EavSetup
|
|
*/
|
|
private $eavSetup;
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function setUp(): void
|
|
{
|
|
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
|
|
$this->eavSetup = $objectManager->create(\Magento\Eav\Setup\EavSetup::class);
|
|
}
|
|
|
|
/**
|
|
* Verify that add attribute work correct attribute_code.
|
|
*
|
|
* @param string $attributeCode
|
|
*
|
|
* @dataProvider addAttributeDataProvider
|
|
*/
|
|
public function testAddAttribute($attributeCode)
|
|
{
|
|
$attributeData = $this->getAttributeData();
|
|
|
|
$this->eavSetup->addAttribute(\Magento\Catalog\Model\Product::ENTITY, $attributeCode, $attributeData);
|
|
|
|
$attribute = $this->eavSetup->getAttribute(\Magento\Catalog\Model\Product::ENTITY, $attributeCode);
|
|
|
|
$this->assertEmpty(array_diff($attributeData, $attribute));
|
|
}
|
|
|
|
/**
|
|
* Data provider for testAddAttributeThrowException().
|
|
*
|
|
* @return array
|
|
*/
|
|
public function addAttributeDataProvider()
|
|
{
|
|
return [
|
|
['eav_setup_test'],
|
|
['characters_59_characters_59_characters_59_characters_59_59_'],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Verify that add attribute throw exception if attribute_code is not valid.
|
|
*
|
|
* @param string|null $attributeCode
|
|
*
|
|
* @dataProvider addAttributeThrowExceptionDataProvider
|
|
*/
|
|
public function testAddAttributeThrowException($attributeCode)
|
|
{
|
|
$this->expectException(\Magento\Framework\Exception\LocalizedException::class);
|
|
$this->expectExceptionMessage('An attribute code must not be less than 1 and more than 60 characters.');
|
|
|
|
$attributeData = $this->getAttributeData();
|
|
|
|
$this->eavSetup->addAttribute(\Magento\Catalog\Model\Product::ENTITY, $attributeCode, $attributeData);
|
|
}
|
|
|
|
/**
|
|
* Data provider for testAddAttributeThrowException().
|
|
*
|
|
* @return array
|
|
*/
|
|
public function addAttributeThrowExceptionDataProvider()
|
|
{
|
|
return [
|
|
[null],
|
|
[''],
|
|
[' '],
|
|
['more_than_60_characters_more_than_more_than_60_characters_more'],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Verify that add attribute throw exception if attribute_code is not valid.
|
|
*
|
|
* @param string|null $attributeCode
|
|
*
|
|
* @dataProvider addInvalidAttributeThrowExceptionDataProvider
|
|
*/
|
|
public function testAddInvalidAttributeThrowException($attributeCode)
|
|
{
|
|
$this->expectException(\Magento\Framework\Exception\LocalizedException::class);
|
|
$this->expectExceptionMessage('Please use only letters (a-z or A-Z), numbers (0-9) or underscore (_) in this field,');
|
|
|
|
$attributeData = $this->getAttributeData();
|
|
$this->eavSetup->addAttribute(\Magento\Catalog\Model\Product::ENTITY, $attributeCode, $attributeData);
|
|
}
|
|
/**
|
|
* Data provider for testAddInvalidAttributeThrowException().
|
|
*
|
|
* @return array
|
|
*/
|
|
public function addInvalidAttributeThrowExceptionDataProvider()
|
|
{
|
|
return [
|
|
['1first_character_is_not_letter'],
|
|
['attribute.with.dots'],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Get simple attribute data.
|
|
*/
|
|
private function getAttributeData()
|
|
{
|
|
$attributeData = [
|
|
'type' => 'varchar',
|
|
'backend' => '',
|
|
'frontend' => '',
|
|
'label' => 'Eav Setup Test',
|
|
'input' => 'text',
|
|
'class' => '',
|
|
'source' => '',
|
|
'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
|
|
'visible' => 0,
|
|
'required' => 0,
|
|
'user_defined' => 1,
|
|
'default' => 'none',
|
|
'searchable' => 0,
|
|
'filterable' => 0,
|
|
'comparable' => 0,
|
|
'visible_on_front' => 0,
|
|
'unique' => 0,
|
|
'apply_to' => 'category',
|
|
];
|
|
|
|
return $attributeData;
|
|
}
|
|
|
|
/**
|
|
* @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);
|
|
}
|
|
}
|
|
}
|
|
}
|