242 lines
8.2 KiB
PHP
Executable File
242 lines
8.2 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
namespace Magento\Eav\Api;
|
|
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
use Magento\TestFramework\TestCase\WebapiAbstract;
|
|
use Magento\Framework\Webapi\Exception as HTTPExceptionCodes;
|
|
|
|
class AttributeSetManagementTest extends WebapiAbstract
|
|
{
|
|
/**
|
|
* @var array
|
|
*/
|
|
private $createServiceInfo;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$this->createServiceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => '/V1/eav/attribute-sets',
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
|
|
],
|
|
'soap' => [
|
|
'service' => 'eavAttributeSetManagementV1',
|
|
'serviceVersion' => 'V1',
|
|
'operation' => 'eavAttributeSetManagementV1Create',
|
|
],
|
|
];
|
|
}
|
|
|
|
public function testCreate()
|
|
{
|
|
$entityTypeCode = 'catalog_product';
|
|
$entityType = $this->getEntityTypeByCode($entityTypeCode);
|
|
$attributeSetName = 'new_attribute_set';
|
|
|
|
$arguments = [
|
|
'entityTypeCode' => $entityTypeCode,
|
|
'attributeSet' => [
|
|
'attribute_set_name' => $attributeSetName,
|
|
'sort_order' => 500,
|
|
],
|
|
'skeletonId' => $entityType->getDefaultAttributeSetId(),
|
|
];
|
|
$result = $this->_webApiCall($this->createServiceInfo, $arguments);
|
|
$this->assertNotNull($result);
|
|
$attributeSet = $this->getAttributeSetByName($attributeSetName);
|
|
$this->assertNotNull($attributeSet);
|
|
$this->assertEquals($attributeSet->getId(), $result['attribute_set_id']);
|
|
$this->assertEquals($attributeSet->getAttributeSetName(), $result['attribute_set_name']);
|
|
$this->assertEquals($attributeSet->getEntityTypeId(), $result['entity_type_id']);
|
|
$this->assertEquals($attributeSet->getEntityTypeId(), $entityType->getId());
|
|
$this->assertEquals($attributeSet->getSortOrder(), $result['sort_order']);
|
|
$this->assertEquals($attributeSet->getSortOrder(), 500);
|
|
|
|
// Clean up database
|
|
$attributeSet->delete();
|
|
}
|
|
|
|
/**
|
|
*/
|
|
public function testCreateThrowsExceptionIfGivenAttributeSetAlreadyHasId()
|
|
{
|
|
$this->expectException(\Exception::class);
|
|
$this->expectExceptionMessage('Invalid value');
|
|
|
|
$entityTypeCode = 'catalog_product';
|
|
$entityType = $this->getEntityTypeByCode($entityTypeCode);
|
|
$attributeSetName = 'new_attribute_set';
|
|
|
|
$arguments = [
|
|
'entityTypeCode' => $entityTypeCode,
|
|
'attributeSet' => [
|
|
'attribute_set_id' => 1,
|
|
'attribute_set_name' => $attributeSetName,
|
|
'sort_order' => 100,
|
|
],
|
|
'skeletonId' => $entityType->getDefaultAttributeSetId(),
|
|
];
|
|
$this->_webApiCall($this->createServiceInfo, $arguments);
|
|
}
|
|
|
|
/**
|
|
*/
|
|
public function testCreateThrowsExceptionIfGivenSkeletonIdIsInvalid()
|
|
{
|
|
$this->expectException(\Exception::class);
|
|
$this->expectExceptionMessage('Invalid value');
|
|
|
|
$entityTypeCode = 'catalog_product';
|
|
$attributeSetName = 'new_attribute_set';
|
|
|
|
$arguments = [
|
|
'entityTypeCode' => $entityTypeCode,
|
|
'attributeSet' => [
|
|
'attribute_set_name' => $attributeSetName,
|
|
'sort_order' => 200,
|
|
],
|
|
'skeletonId' => 0,
|
|
];
|
|
$this->_webApiCall($this->createServiceInfo, $arguments);
|
|
}
|
|
|
|
/**
|
|
*/
|
|
public function testCreateThrowsExceptionIfGivenSkeletonAttributeSetDoesNotExist()
|
|
{
|
|
$this->expectException(\Exception::class);
|
|
$this->expectExceptionMessage('No such entity');
|
|
|
|
$attributeSetName = 'new_attribute_set';
|
|
$entityTypeCode = 'catalog_product';
|
|
|
|
$arguments = [
|
|
'entityTypeCode' => $entityTypeCode,
|
|
'attributeSet' => [
|
|
'attribute_set_name' => $attributeSetName,
|
|
'sort_order' => 300,
|
|
],
|
|
'skeletonId' => 9999,
|
|
];
|
|
$this->_webApiCall($this->createServiceInfo, $arguments);
|
|
}
|
|
|
|
/**
|
|
*/
|
|
public function testCreateThrowsExceptionIfGivenEntityTypeDoesNotExist()
|
|
{
|
|
$this->expectException(\Exception::class);
|
|
$this->expectExceptionMessage('Invalid entity_type specified: invalid_entity_type');
|
|
|
|
$entityTypeCode = 'catalog_product';
|
|
$entityType = $this->getEntityTypeByCode($entityTypeCode);
|
|
$attributeSetName = 'new_attribute_set';
|
|
|
|
$arguments = [
|
|
'entityTypeCode' => 'invalid_entity_type',
|
|
'attributeSet' => [
|
|
'attribute_set_name' => $attributeSetName,
|
|
'sort_order' => 400,
|
|
],
|
|
'skeletonId' => $entityType->getDefaultAttributeSetId(),
|
|
];
|
|
$this->_webApiCall($this->createServiceInfo, $arguments);
|
|
}
|
|
|
|
/**
|
|
*/
|
|
public function testCreateThrowsExceptionIfAttributeSetNameIsEmpty()
|
|
{
|
|
$this->expectException(\Exception::class);
|
|
$this->expectExceptionMessage('The attribute set name is empty. Enter the name and try again.');
|
|
|
|
$entityTypeCode = 'catalog_product';
|
|
$entityType = $this->getEntityTypeByCode($entityTypeCode);
|
|
$attributeSetName = '';
|
|
|
|
$arguments = [
|
|
'entityTypeCode' => $entityTypeCode,
|
|
'attributeSet' => [
|
|
'attribute_set_name' => $attributeSetName,
|
|
'sort_order' => 500,
|
|
],
|
|
'skeletonId' => $entityType->getDefaultAttributeSetId(),
|
|
];
|
|
$this->_webApiCall($this->createServiceInfo, $arguments);
|
|
}
|
|
|
|
public function testCreateThrowsExceptionIfAttributeSetWithGivenNameAlreadyExists()
|
|
{
|
|
$entityTypeCode = 'catalog_product';
|
|
$entityType = $this->getEntityTypeByCode($entityTypeCode);
|
|
$attributeSetName = 'Default';
|
|
$expectedMessage = 'A "Default" attribute set name already exists. Create a new name and try again.';
|
|
|
|
$arguments = [
|
|
'entityTypeCode' => $entityTypeCode,
|
|
'attributeSet' => [
|
|
'attribute_set_name' => $attributeSetName,
|
|
'sort_order' => 550,
|
|
],
|
|
'skeletonId' => $entityType->getDefaultAttributeSetId(),
|
|
];
|
|
|
|
try {
|
|
$this->_webApiCall($this->createServiceInfo, $arguments);
|
|
$this->fail("Expected exception");
|
|
} catch (\SoapFault $e) {
|
|
$this->assertStringContainsString(
|
|
$expectedMessage,
|
|
$e->getMessage(),
|
|
"SoapFault does not contain expected message."
|
|
);
|
|
} catch (\Exception $e) {
|
|
$errorObj = $this->processRestExceptionResult($e);
|
|
$this->assertEquals(
|
|
$expectedMessage,
|
|
$errorObj['message']
|
|
);
|
|
$this->assertEquals(HTTPExceptionCodes::HTTP_BAD_REQUEST, $e->getCode());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Retrieve attribute set based on given name.
|
|
* This utility methods assumes that there is only one attribute set with given name,
|
|
*
|
|
* @param string $attributeSetName
|
|
* @return \Magento\Eav\Model\Entity\Attribute\Set|null
|
|
*/
|
|
protected function getAttributeSetByName($attributeSetName)
|
|
{
|
|
$objectManager = Bootstrap::getObjectManager();
|
|
/** @var \Magento\Eav\Model\Entity\Attribute\Set $attributeSet */
|
|
$attributeSet = $objectManager->create(\Magento\Eav\Model\Entity\Attribute\Set::class)
|
|
->load($attributeSetName, 'attribute_set_name');
|
|
if ($attributeSet->getId() === null) {
|
|
return null;
|
|
}
|
|
return $attributeSet;
|
|
}
|
|
|
|
/**
|
|
* Retrieve entity type based on given code.
|
|
*
|
|
* @param string $entityTypeCode
|
|
* @return \Magento\Eav\Model\Entity\Type|null
|
|
*/
|
|
protected function getEntityTypeByCode($entityTypeCode)
|
|
{
|
|
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
|
|
/** @var \Magento\Eav\Model\Entity\Type $entityType */
|
|
$entityType = $objectManager->create(\Magento\Eav\Model\Config::class)
|
|
->getEntityType($entityTypeCode);
|
|
return $entityType;
|
|
}
|
|
}
|