magento2-docker/dev/tests/api-functional/testsuite/Magento/Eav/Api/AttributeSetRepositoryTest.php

289 lines
10 KiB
PHP
Executable File

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Eav\Api;
use Magento\Framework\Api\FilterBuilder;
use Magento\Framework\Api\SearchCriteriaBuilder;
use Magento\Framework\Api\SortOrder;
use Magento\Framework\Api\SortOrderBuilder;
use Magento\TestFramework\Helper\Bootstrap;
use Magento\TestFramework\TestCase\WebapiAbstract;
class AttributeSetRepositoryTest extends WebapiAbstract
{
/**
* @magentoApiDataFixture Magento/Eav/_files/empty_attribute_set.php
*/
public function testGet()
{
$attributeSetName = 'empty_attribute_set';
$attributeSet = $this->getAttributeSetByName($attributeSetName);
$attributeSetId = $attributeSet->getId();
$serviceInfo = [
'rest' => [
'resourcePath' => '/V1/eav/attribute-sets/' . $attributeSetId,
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
],
'soap' => [
'service' => 'eavAttributeSetRepositoryV1',
'serviceVersion' => 'V1',
'operation' => 'eavAttributeSetRepositoryV1Get',
],
];
$arguments = [
'attributeSetId' => $attributeSetId,
];
$result = $this->_webApiCall($serviceInfo, $arguments);
$this->assertNotNull($result);
$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->getSortOrder(), $result['sort_order']);
}
/**
*/
public function testGetThrowsExceptionIfRequestedAttributeSetDoesNotExist()
{
$this->expectException(\Exception::class);
$attributeSetId = 9999;
$serviceInfo = [
'rest' => [
'resourcePath' => '/V1/eav/attribute-sets/' . $attributeSetId,
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
],
'soap' => [
'service' => 'eavAttributeSetRepositoryV1',
'serviceVersion' => 'V1',
'operation' => 'eavAttributeSetRepositoryV1Get',
],
];
$arguments = [
'attributeSetId' => $attributeSetId,
];
$this->_webApiCall($serviceInfo, $arguments);
}
/**
* @magentoApiDataFixture Magento/Eav/_files/empty_attribute_set.php
*/
public function testSave()
{
$attributeSetName = 'empty_attribute_set';
$attributeSet = $this->getAttributeSetByName($attributeSetName);
$serviceInfo = [
'rest' => [
'resourcePath' => '/V1/eav/attribute-sets/' . $attributeSet->getId(),
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
],
'soap' => [
'service' => 'eavAttributeSetRepositoryV1',
'serviceVersion' => 'V1',
'operation' => 'eavAttributeSetRepositoryV1Save',
],
];
$updatedSortOrder = $attributeSet->getSortOrder() + 200;
$arguments = [
'attributeSet' => [
'attribute_set_id' => $attributeSet->getId(),
// name is the same, because it is used by fixture rollback script
'attribute_set_name' => $attributeSet->getAttributeSetName(),
'entity_type_id' => $attributeSet->getEntityTypeId(),
'sort_order' => $updatedSortOrder,
],
];
$result = $this->_webApiCall($serviceInfo, $arguments);
$this->assertNotNull($result);
// Reload attribute set data
$attributeSet = $this->getAttributeSetByName($attributeSetName);
$this->assertEquals($attributeSet->getAttributeSetId(), $result['attribute_set_id']);
$this->assertEquals($attributeSet->getAttributeSetName(), $result['attribute_set_name']);
$this->assertEquals($attributeSet->getEntityTypeId(), $result['entity_type_id']);
$this->assertEquals($updatedSortOrder, $result['sort_order']);
$this->assertEquals($attributeSet->getSortOrder(), $result['sort_order']);
}
/**
* @magentoApiDataFixture Magento/Eav/_files/empty_attribute_set.php
*/
public function testDeleteById()
{
$attributeSetName = 'empty_attribute_set';
$attributeSet = $this->getAttributeSetByName($attributeSetName);
$attributeSetId = $attributeSet->getId();
$serviceInfo = [
'rest' => [
'resourcePath' => '/V1/eav/attribute-sets/' . $attributeSetId,
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
],
'soap' => [
'service' => 'eavAttributeSetRepositoryV1',
'serviceVersion' => 'V1',
'operation' => 'eavAttributeSetRepositoryV1DeleteById',
],
];
$arguments = [
'attributeSetId' => $attributeSetId,
];
$this->assertTrue($this->_webApiCall($serviceInfo, $arguments));
$this->assertNull($this->getAttributeSetByName($attributeSetName));
}
/**
*/
public function testDeleteByIdDefaultAttributeSet()
{
$this->expectException(\Exception::class);
$this->expectExceptionMessage('The default attribute set can\'t be deleted.');
$objectManager = Bootstrap::getObjectManager();
/** @var \Magento\Eav\Model\Config */
$eavConfig = $objectManager->create(\Magento\Eav\Model\Config::class);
$defaultAttributeSetId = $eavConfig
->getEntityType(\Magento\Catalog\Api\Data\ProductAttributeInterface::ENTITY_TYPE_CODE)
->getDefaultAttributeSetId();
$serviceInfo = [
'rest' => [
'resourcePath' => '/V1/eav/attribute-sets/' . $defaultAttributeSetId,
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
],
'soap' => [
'service' => 'eavAttributeSetRepositoryV1',
'serviceVersion' => 'V1',
'operation' => 'eavAttributeSetRepositoryV1DeleteById',
],
];
$arguments = [
'attributeSetId' => $defaultAttributeSetId,
];
$this->assertTrue($this->_webApiCall($serviceInfo, $arguments));
}
/**
*/
public function testDeleteByIdThrowsExceptionIfRequestedAttributeSetDoesNotExist()
{
$this->expectException(\Exception::class);
$attributeSetId = 9999;
$serviceInfo = [
'rest' => [
'resourcePath' => '/V1/eav/attribute-sets/' . $attributeSetId,
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
],
'soap' => [
'service' => 'eavAttributeSetRepositoryV1',
'serviceVersion' => 'V1',
'operation' => 'eavAttributeSetRepositoryV1DeleteById',
],
];
$arguments = [
'attributeSetId' => $attributeSetId,
];
$this->_webApiCall($serviceInfo, $arguments);
}
/**
* @magentoApiDataFixture Magento/Eav/_files/attribute_set_for_search.php
*/
public function testGetList()
{
/** @var SearchCriteriaBuilder $searchCriteriaBuilder */
$searchCriteriaBuilder = Bootstrap::getObjectManager()
->create(SearchCriteriaBuilder::class);
/** @var FilterBuilder $filterBuilder */
$filterBuilder = Bootstrap::getObjectManager()->create(FilterBuilder::class);
$filter1 = $filterBuilder
->setField('entity_type_code')
->setValue('catalog_product')
->create();
$filter2 = $filterBuilder
->setField('sort_order')
->setValue(200)
->setConditionType('gteq')
->create();
$filter3 = $filterBuilder
->setField('sort_order')
->setValue(300)
->setConditionType('lteq')
->create();
$searchCriteriaBuilder->addFilters([$filter1, $filter2]);
$searchCriteriaBuilder->addFilters([$filter3]);
/** @var SortOrderBuilder $sortOrderBuilder */
$sortOrderBuilder = Bootstrap::getObjectManager()->create(SortOrderBuilder::class);
/** @var SortOrder $sortOrder */
$sortOrder = $sortOrderBuilder->setField('sort_order')
->setDirection(SortOrder::SORT_ASC)
->create();
$searchCriteriaBuilder->setSortOrders([$sortOrder]);
$searchCriteriaBuilder->setPageSize(1);
$searchCriteriaBuilder->setCurrentPage(2);
$searchData = $searchCriteriaBuilder->create()->__toArray();
$requestData = ['searchCriteria' => $searchData];
$serviceInfo = [
'rest' => [
'resourcePath' => '/V1/eav/attribute-sets/list' . '?' . http_build_query($requestData),
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
],
'soap' => [
'service' => 'eavAttributeSetRepositoryV1',
'serviceVersion' => 'V1',
'operation' => 'eavAttributeSetRepositoryV1GetList',
],
];
$searchResult = $this->_webApiCall($serviceInfo, $requestData);
$this->assertEquals(2, $searchResult['total_count']);
$this->assertCount(1, $searchResult['items']);
$this->assertEquals(
$searchResult['items'][0]['attribute_set_name'],
'attribute_set_3_for_search'
);
}
/**
* 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;
}
}