1317 lines
45 KiB
PHP
Executable File
1317 lines
45 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
namespace Magento\Customer\Api;
|
|
|
|
use Magento\Customer\Api\Data\GroupInterface;
|
|
use Magento\Customer\Model\Data\Group as CustomerGroup;
|
|
use Magento\Customer\Model\GroupRegistry;
|
|
use Magento\Customer\Model\ResourceModel\GroupRepository;
|
|
use Magento\Framework\Api\FilterBuilder;
|
|
use Magento\Framework\Api\SearchCriteriaBuilder;
|
|
use Magento\Framework\Api\SortOrder;
|
|
use Magento\Framework\Api\SortOrderBuilder;
|
|
use Magento\Framework\Exception\LocalizedException;
|
|
use Magento\Framework\Exception\NoSuchEntityException;
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
use Magento\TestFramework\TestCase\WebapiAbstract;
|
|
|
|
/**
|
|
* Customer Group Repository API test
|
|
*
|
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
|
*/
|
|
class GroupRepositoryTest extends WebapiAbstract
|
|
{
|
|
const SERVICE_NAME = "customerGroupRepositoryV1";
|
|
const SERVICE_VERSION = "V1";
|
|
const RESOURCE_PATH = "/V1/customerGroups";
|
|
|
|
/**
|
|
* @var GroupRegistry
|
|
*/
|
|
private $groupRegistry;
|
|
|
|
/**
|
|
* @var GroupRepository
|
|
*/
|
|
private $groupRepository;
|
|
|
|
/**
|
|
* @var \Magento\Customer\Api\Data\GroupInterfaceFactory
|
|
*/
|
|
private $customerGroupFactory;
|
|
|
|
/**
|
|
* @var \Magento\Customer\Api\Data\GroupExtensionInterfaceFactory
|
|
*/
|
|
private $groupExtensionInterfaceFactory;
|
|
|
|
/**
|
|
* Execute per test initialization.
|
|
*/
|
|
protected function setUp(): void
|
|
{
|
|
$objectManager = Bootstrap::getObjectManager();
|
|
$this->groupRegistry = $objectManager->get(\Magento\Customer\Model\GroupRegistry::class);
|
|
$this->groupRepository = $objectManager->get(\Magento\Customer\Model\ResourceModel\GroupRepository::class);
|
|
$this->customerGroupFactory = $objectManager->create(\Magento\Customer\Api\Data\GroupInterfaceFactory::class);
|
|
$this->groupExtensionInterfaceFactory = $objectManager->create(
|
|
\Magento\Customer\Api\Data\GroupExtensionInterfaceFactory::class
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Verify the retrieval of a customer group by Id.
|
|
*
|
|
* @param array $testGroup The group data for the group being retrieved.
|
|
*
|
|
* @dataProvider getGroupDataProvider
|
|
*/
|
|
public function testGetGroupById($testGroup)
|
|
{
|
|
$groupId = $testGroup[CustomerGroup::ID];
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . "/$groupId",
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
|
|
],
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1GetById',
|
|
],
|
|
];
|
|
$requestData = [CustomerGroup::ID => $groupId];
|
|
$groupData = $this->_webApiCall($serviceInfo, $requestData);
|
|
|
|
$this->assertEquals($testGroup, $groupData, "The group data does not match.");
|
|
}
|
|
|
|
/**
|
|
* The testGetGroup data provider.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getGroupDataProvider()
|
|
{
|
|
return [
|
|
'NOT LOGGED IN' => [
|
|
[
|
|
CustomerGroup::ID => 0,
|
|
CustomerGroup::CODE => 'NOT LOGGED IN',
|
|
CustomerGroup::TAX_CLASS_ID => 3,
|
|
CustomerGroup::TAX_CLASS_NAME => 'Retail Customer',
|
|
],
|
|
],
|
|
'General' => [
|
|
[
|
|
CustomerGroup::ID => 1,
|
|
CustomerGroup::CODE => 'General',
|
|
CustomerGroup::TAX_CLASS_ID => 3,
|
|
CustomerGroup::TAX_CLASS_NAME => 'Retail Customer',
|
|
],
|
|
],
|
|
'Wholesale' => [
|
|
[
|
|
CustomerGroup::ID => 2,
|
|
CustomerGroup::CODE => 'Wholesale',
|
|
CustomerGroup::TAX_CLASS_ID => 3,
|
|
CustomerGroup::TAX_CLASS_NAME => 'Retail Customer',
|
|
],
|
|
],
|
|
'Retailer' => [
|
|
[
|
|
CustomerGroup::ID => 3,
|
|
CustomerGroup::CODE => 'Retailer',
|
|
CustomerGroup::TAX_CLASS_ID => 3,
|
|
CustomerGroup::TAX_CLASS_NAME => 'Retail Customer',
|
|
],
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Verify that creating a new group works via REST.
|
|
*/
|
|
public function testCreateGroupRest()
|
|
{
|
|
$this->_markTestAsRestOnly();
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => null,
|
|
CustomerGroup::CODE => 'Create Group REST',
|
|
CustomerGroup::TAX_CLASS_ID => 3,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
$groupId = $this->_webApiCall($serviceInfo, $requestData)[CustomerGroup::ID];
|
|
$this->assertNotNull($groupId);
|
|
|
|
$newGroup = $this->groupRepository->getById($groupId);
|
|
$this->assertEquals($groupId, $newGroup->getId(), 'The group id does not match.');
|
|
$this->assertEquals($groupData[CustomerGroup::CODE], $newGroup->getCode(), 'The group code does not match.');
|
|
$this->assertEquals(
|
|
$groupData[CustomerGroup::TAX_CLASS_ID],
|
|
$newGroup->getTaxClassId(),
|
|
'The group tax class id does not match.'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Verify that creating a new group with excluded website as extension attributes works via REST.
|
|
*
|
|
* @dataProvider testExcludedWebsitesRestDataProvider
|
|
* @param string $code
|
|
* @param null|array $excludeWebsitesIds
|
|
* @param null|array $result
|
|
* @throws NoSuchEntityException
|
|
* @throws LocalizedException
|
|
*/
|
|
public function testCreateGroupWithExcludedWebsiteRest(
|
|
string $code,
|
|
array $excludeWebsitesIds,
|
|
?array $result
|
|
): void {
|
|
$this->_markTestAsRestOnly();
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => null,
|
|
CustomerGroup::CODE => $code,
|
|
CustomerGroup::TAX_CLASS_ID => 3,
|
|
'extension_attributes' => ['exclude_website_ids' => $excludeWebsitesIds]
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
$groupId = $this->_webApiCall($serviceInfo, $requestData)[CustomerGroup::ID];
|
|
self::assertNotNull($groupId);
|
|
|
|
$newGroup = $this->groupRepository->getById($groupId);
|
|
self::assertEquals($groupId, $newGroup->getId(), 'The group id does not match.');
|
|
self::assertEquals($groupData[CustomerGroup::CODE], $newGroup->getCode(), 'The group code does not match.');
|
|
self::assertEquals(
|
|
$groupData[CustomerGroup::TAX_CLASS_ID],
|
|
$newGroup->getTaxClassId(),
|
|
'The group tax class id does not match.'
|
|
);
|
|
self::assertEquals(
|
|
$result,
|
|
$newGroup->getExtensionAttributes()->getExcludeWebsiteIds(),
|
|
'The group extension attributes do not match.'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Data provider for excluded websites from customer group with REST.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function testExcludedWebsitesRestDataProvider(): array
|
|
{
|
|
return [
|
|
['Create Group No Excludes REST', [], null],
|
|
['Create Group With Excludes REST', ['1'], ['1']]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Verify that creating a new group with a duplicate group name fails with an error via REST.
|
|
*/
|
|
public function testCreateGroupDuplicateGroupRest()
|
|
{
|
|
$this->_markTestAsRestOnly();
|
|
|
|
$duplicateGroupCode = 'Duplicate Group Code REST';
|
|
|
|
$group = $this->customerGroupFactory->create();
|
|
$group->setId(null);
|
|
$group->setCode($duplicateGroupCode);
|
|
$group->setTaxClassId(3);
|
|
$this->createGroup($group);
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => null,
|
|
CustomerGroup::CODE => $duplicateGroupCode,
|
|
CustomerGroup::TAX_CLASS_ID => 3,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
try {
|
|
$this->_webApiCall($serviceInfo, $requestData);
|
|
$this->fail("Expected exception");
|
|
} catch (\Exception $e) {
|
|
$errorData = json_decode($e->getMessage(), true);
|
|
|
|
$this->assertEquals(
|
|
'Customer Group already exists.',
|
|
$errorData['message']
|
|
);
|
|
$this->assertEquals(400, $e->getCode(), 'Invalid HTTP code');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify that creating a new group works via REST if tax class id is empty, defaults 3.
|
|
*/
|
|
public function testCreateGroupDefaultTaxClassIdRest()
|
|
{
|
|
$this->_markTestAsRestOnly();
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => null,
|
|
CustomerGroup::CODE => 'Default Class Tax ID REST',
|
|
CustomerGroup::TAX_CLASS_ID => null,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
$groupId = $this->_webApiCall($serviceInfo, $requestData)[CustomerGroup::ID];
|
|
$this->assertNotNull($groupId);
|
|
|
|
$newGroup = $this->groupRepository->getById($groupId);
|
|
$this->assertEquals($groupId, $newGroup->getId(), 'The group id does not match.');
|
|
$this->assertEquals($groupData[CustomerGroup::CODE], $newGroup->getCode(), 'The group code does not match.');
|
|
$this->assertEquals(
|
|
GroupRepository::DEFAULT_TAX_CLASS_ID,
|
|
$newGroup->getTaxClassId(),
|
|
'The group tax class id does not match.'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Verify that creating a new group without a code fails with an error.
|
|
*/
|
|
public function testCreateGroupNoCodeExpectExceptionRest()
|
|
{
|
|
$this->_markTestAsRestOnly();
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => null,
|
|
CustomerGroup::CODE => null,
|
|
CustomerGroup::TAX_CLASS_ID => null,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
try {
|
|
$this->_webApiCall($serviceInfo, $requestData);
|
|
$this->fail("Expected exception");
|
|
} catch (\Exception $e) {
|
|
// @codingStandardsIgnoreStart
|
|
$this->assertStringContainsString(
|
|
'\"%fieldName\" is required. Enter and try again.","parameters":{"fieldName":"code"}',
|
|
$e->getMessage(),
|
|
"Exception does not contain expected message."
|
|
);
|
|
// @codingStandardsIgnoreEnd
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify that creating a new group with an invalid tax class id fails with an error.
|
|
*/
|
|
public function testCreateGroupInvalidTaxClassIdRest()
|
|
{
|
|
$this->_markTestAsRestOnly();
|
|
|
|
$invalidTaxClassId = 9999;
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => null,
|
|
CustomerGroup::CODE => 'Invalid Tax Class Id Code',
|
|
CustomerGroup::TAX_CLASS_ID => $invalidTaxClassId,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
try {
|
|
$this->_webApiCall($serviceInfo, $requestData);
|
|
$this->fail("Expected exception");
|
|
} catch (\Exception $e) {
|
|
// @codingStandardsIgnoreStart
|
|
$this->assertStringContainsString(
|
|
'{"message":"Invalid value of \"%value\" provided for the %fieldName field.","parameters":{"fieldName":"taxClassId","value":9999}',
|
|
$e->getMessage(),
|
|
"Exception does not contain expected message."
|
|
);
|
|
// codingStandardsIgnoreEnd
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify that an attempt to update via POST is not allowed.
|
|
*/
|
|
public function testCreateGroupWithIdRest()
|
|
{
|
|
$this->_markTestAsRestOnly();
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => 88,
|
|
CustomerGroup::CODE => 'Create Group With Id REST',
|
|
CustomerGroup::TAX_CLASS_ID => 3,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
try {
|
|
$this->_webApiCall($serviceInfo, $requestData);
|
|
$this->fail('Expected exception');
|
|
} catch (\Exception $e) {
|
|
$this->assertStringContainsString(
|
|
'{"message":"No such entity with %fieldName = %fieldValue","parameters":{"fieldName":"id","fieldValue":88}',
|
|
$e->getMessage(),
|
|
"Exception does not contain expected message."
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify that creating a new group fails via SOAP if there is an Id specified.
|
|
*/
|
|
public function testCreateGroupWithIdSoap()
|
|
{
|
|
$this->_markTestAsSoapOnly();
|
|
|
|
$serviceInfo = [
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1Save',
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => 88,
|
|
CustomerGroup::CODE => 'Create Group with Id SOAP',
|
|
CustomerGroup::TAX_CLASS_ID => 3,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
try {
|
|
$this->_webApiCall($serviceInfo, $requestData);
|
|
$this->fail("Expected exception");
|
|
} catch (\SoapFault $e) {
|
|
$this->assertStringContainsString(
|
|
'No such entity with %fieldName = %fieldValue',
|
|
$e->getMessage(),
|
|
"SoapFault does not contain expected message."
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify that updating an existing group works via REST.
|
|
*/
|
|
public function testUpdateGroupRest()
|
|
{
|
|
$this->_markTestAsRestOnly();
|
|
$group = $this->customerGroupFactory->create();
|
|
$group->setId(null);
|
|
$group->setCode('New Group REST');
|
|
$group->setTaxClassId(3);
|
|
$groupId = $this->createGroup($group);
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . "/$groupId",
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => $groupId,
|
|
CustomerGroup::CODE => 'Updated Group REST',
|
|
CustomerGroup::TAX_CLASS_ID => 3,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
$this->assertEquals($groupId, $this->_webApiCall($serviceInfo, $requestData)[CustomerGroup::ID]);
|
|
|
|
$group = $this->groupRepository->getById($groupId);
|
|
$this->assertEquals($groupData[CustomerGroup::CODE], $group->getCode(), 'The group code did not change.');
|
|
$this->assertEquals(
|
|
$groupData[CustomerGroup::TAX_CLASS_ID],
|
|
$group->getTaxClassId(),
|
|
'The group tax class id did not change'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Verify that updating an existing group with excluded website works via REST.
|
|
*/
|
|
public function testUpdateGroupWithExcludedWebsiteRest(): void
|
|
{
|
|
$this->_markTestAsRestOnly();
|
|
$group = $this->customerGroupFactory->create();
|
|
$group->setId(null);
|
|
$group->setCode('New Group with Exclude REST');
|
|
$group->setTaxClassId(3);
|
|
$groupId = $this->createGroup($group);
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . "/$groupId",
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => $groupId,
|
|
CustomerGroup::CODE => 'Updated Group with Exclude REST',
|
|
CustomerGroup::TAX_CLASS_ID => 3,
|
|
'extension_attributes' => ['exclude_website_ids' => ['1']]
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
self::assertEquals($groupId, $this->_webApiCall($serviceInfo, $requestData)[CustomerGroup::ID]);
|
|
|
|
$group = $this->groupRepository->getById($groupId);
|
|
self::assertEquals($groupData[CustomerGroup::CODE], $group->getCode(), 'The group code did not change.');
|
|
self::assertEquals(
|
|
$groupData[CustomerGroup::TAX_CLASS_ID],
|
|
$group->getTaxClassId(),
|
|
'The group tax class id did not change'
|
|
);
|
|
self::assertEquals(
|
|
['1'],
|
|
$group->getExtensionAttributes()->getExcludeWebsiteIds(),
|
|
'The group excluded websites do not match.'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Verify that updating a non-existing group throws an exception.
|
|
*/
|
|
public function testUpdateGroupNotExistingGroupRest()
|
|
{
|
|
$this->_markTestAsRestOnly();
|
|
|
|
$nonExistentGroupId = '9999';
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . "/$nonExistentGroupId",
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => $nonExistentGroupId,
|
|
CustomerGroup::CODE => 'Updated Group REST Does Not Exist',
|
|
CustomerGroup::TAX_CLASS_ID => 3,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
try {
|
|
$this->_webApiCall($serviceInfo, $requestData);
|
|
$this->fail('Expected exception');
|
|
} catch (\Exception $e) {
|
|
$expectedMessage = '{"message":"No such entity with %fieldName = %fieldValue",'
|
|
. '"parameters":{"fieldName":"id","fieldValue":9999}';
|
|
$this->assertStringContainsString(
|
|
$expectedMessage,
|
|
$e->getMessage(),
|
|
"Exception does not contain expected message."
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify that creating a new group works via SOAP.
|
|
*/
|
|
public function testCreateGroupSoap()
|
|
{
|
|
$this->_markTestAsSoapOnly();
|
|
|
|
$serviceInfo = [
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1Save',
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => null,
|
|
CustomerGroup::CODE => 'Create Group SOAP',
|
|
'taxClassId' => 3,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
$groupId = $this->_webApiCall($serviceInfo, $requestData)[CustomerGroup::ID];
|
|
$this->assertNotNull($groupId);
|
|
|
|
$newGroup = $this->groupRepository->getById($groupId);
|
|
$this->assertEquals($groupId, $newGroup->getId(), "The group id does not match.");
|
|
$this->assertEquals($groupData[CustomerGroup::CODE], $newGroup->getCode(), "The group code does not match.");
|
|
$this->assertEquals(
|
|
$groupData['taxClassId'],
|
|
$newGroup->getTaxClassId(),
|
|
"The group tax class id does not match."
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Verify that creating a new group with excluded website as extension attributes works via SOAP.
|
|
*
|
|
* @dataProvider testExcludedWebsitesSoapDataProvider
|
|
* @param string $code
|
|
* @param array $excludeWebsitesIds
|
|
* @param array|null $result
|
|
* @throws LocalizedException
|
|
* @throws NoSuchEntityException
|
|
*/
|
|
public function testCreateGroupWithExcludedWebsiteSoap(
|
|
string $code,
|
|
array $excludeWebsitesIds,
|
|
?array $result
|
|
): void {
|
|
$this->_markTestAsSoapOnly();
|
|
|
|
$serviceInfo = [
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1Save',
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => null,
|
|
CustomerGroup::CODE => $code,
|
|
'taxClassId' => 3,
|
|
'extension_attributes' => ['exclude_website_ids' => $excludeWebsitesIds]
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
$groupId = $this->_webApiCall($serviceInfo, $requestData)[CustomerGroup::ID];
|
|
self::assertNotNull($groupId);
|
|
|
|
$newGroup = $this->groupRepository->getById($groupId);
|
|
self::assertEquals($groupId, $newGroup->getId(), "The group id does not match.");
|
|
self::assertEquals($groupData[CustomerGroup::CODE], $newGroup->getCode(), "The group code does not match.");
|
|
self::assertEquals(
|
|
$groupData['taxClassId'],
|
|
$newGroup->getTaxClassId(),
|
|
"The group tax class id does not match."
|
|
);
|
|
self::assertEquals(
|
|
$result,
|
|
$newGroup->getExtensionAttributes()->getExcludeWebsiteIds(),
|
|
'The group extension attributes do not match.'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Data provider for excluded websites from customer group with SOAP.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function testExcludedWebsitesSoapDataProvider(): array
|
|
{
|
|
return [
|
|
['Create Group No Excludes SOAP', [], null],
|
|
['Create Group With Excludes SOAP', ['1'], ['1']]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Verify that creating a new group with a duplicate code fails with an error via SOAP.
|
|
*/
|
|
public function testCreateGroupDuplicateGroupSoap()
|
|
{
|
|
$this->_markTestAsSoapOnly();
|
|
$group = $this->customerGroupFactory->create();
|
|
$duplicateGroupCode = 'Duplicate Group Code SOAP';
|
|
|
|
$group->setId(null);
|
|
$group->setCode($duplicateGroupCode);
|
|
$group->setTaxClassId(3);
|
|
$this->createGroup($group);
|
|
|
|
$serviceInfo = [
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1Save',
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => null,
|
|
CustomerGroup::CODE => $duplicateGroupCode,
|
|
'taxClassId' => 3,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
$expectedMessage = 'Customer Group already exists.';
|
|
|
|
try {
|
|
$this->_webApiCall($serviceInfo, $requestData);
|
|
$this->fail("Expected exception");
|
|
} catch (\SoapFault $e) {
|
|
$this->assertStringContainsString(
|
|
$expectedMessage,
|
|
$e->getMessage(),
|
|
"Exception does not contain expected message."
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify that creating a new group works via SOAP if tax class id is empty, defaults 3.
|
|
*/
|
|
public function testCreateGroupDefaultTaxClassIdSoap()
|
|
{
|
|
$this->_markTestAsSoapOnly();
|
|
|
|
$serviceInfo = [
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1Save',
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => null,
|
|
CustomerGroup::CODE => 'Default Class Tax ID SOAP',
|
|
'taxClassId' => null,
|
|
'taxClassName' => null,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
$groupResponseData = $this->_webApiCall($serviceInfo, $requestData);
|
|
$groupId = $groupResponseData[CustomerGroup::ID];
|
|
$this->assertNotNull($groupId);
|
|
|
|
$newGroup = $this->groupRepository->getById($groupId);
|
|
$this->assertEquals($groupId, $newGroup->getId(), "The group id does not match.");
|
|
$this->assertEquals($groupData[CustomerGroup::CODE], $newGroup->getCode(), "The group code does not match.");
|
|
$this->assertEquals(
|
|
GroupRepository::DEFAULT_TAX_CLASS_ID,
|
|
$newGroup->getTaxClassId(),
|
|
"The group tax class id does not match."
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Verify that creating a new group without a code fails with an error.
|
|
*/
|
|
public function testCreateGroupNoCodeExpectExceptionSoap()
|
|
{
|
|
$this->_markTestAsSoapOnly();
|
|
|
|
$serviceInfo = [
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1Save',
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => null,
|
|
CustomerGroup::CODE => null,
|
|
'taxClassId' => null,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
try {
|
|
$this->_webApiCall($serviceInfo, $requestData);
|
|
$this->fail("Expected exception");
|
|
} catch (\SoapFault $e) {
|
|
$this->assertStringContainsString(
|
|
'"%fieldName" is required. Enter and try again.',
|
|
$e->getMessage(),
|
|
"SoapFault does not contain expected message."
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify that creating a new group fails via SOAP if tax class id is invalid.
|
|
*/
|
|
public function testCreateGroupInvalidTaxClassIdSoap()
|
|
{
|
|
$this->_markTestAsSoapOnly();
|
|
|
|
$invalidTaxClassId = 9999;
|
|
|
|
$serviceInfo = [
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1Save',
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => null,
|
|
CustomerGroup::CODE => 'Invalid Class Tax ID SOAP',
|
|
'taxClassId' => $invalidTaxClassId,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
$expectedMessage = 'Invalid value of "%value" provided for the %fieldName field.';
|
|
|
|
try {
|
|
$this->_webApiCall($serviceInfo, $requestData);
|
|
$this->fail("Expected exception");
|
|
} catch (\SoapFault $e) {
|
|
$this->assertStringContainsString(
|
|
$expectedMessage,
|
|
$e->getMessage(),
|
|
"SoapFault does not contain expected message."
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify that updating an existing group works via SOAP.
|
|
*/
|
|
public function testUpdateGroupSoap()
|
|
{
|
|
$this->_markTestAsSoapOnly();
|
|
$group = $this->customerGroupFactory->create();
|
|
$group->setId(null);
|
|
$group->setCode('New Group SOAP');
|
|
$group->setTaxClassId(3);
|
|
$groupId = $this->createGroup($group);
|
|
|
|
$serviceInfo = [
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1Save',
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => $groupId,
|
|
CustomerGroup::CODE => 'Updated Group SOAP',
|
|
'taxClassId' => 3,
|
|
];
|
|
$this->_webApiCall($serviceInfo, ['group' => $groupData]);
|
|
|
|
$group = $this->groupRepository->getById($groupId);
|
|
$this->assertEquals($groupData[CustomerGroup::CODE], $group->getCode(), 'The group code did not change.');
|
|
$this->assertEquals(
|
|
$groupData['taxClassId'],
|
|
$group->getTaxClassId(),
|
|
'The group tax class id did not change'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Verify that updating an existing group with excluded website works via SOAP.
|
|
*/
|
|
public function testUpdateGroupWithExcludedWebsiteSoap(): void
|
|
{
|
|
$this->_markTestAsSoapOnly();
|
|
$group = $this->customerGroupFactory->create();
|
|
$group->setId(null);
|
|
$group->setCode('New Group with Exclude SOAP');
|
|
$group->setTaxClassId(3);
|
|
$groupId = $this->createGroup($group);
|
|
|
|
$serviceInfo = [
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1Save',
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => $groupId,
|
|
CustomerGroup::CODE => 'Updated Group with Exclude SOAP',
|
|
'taxClassId' => 3,
|
|
'extension_attributes' => ['exclude_website_ids' => ['1']]
|
|
];
|
|
$this->_webApiCall($serviceInfo, ['group' => $groupData]);
|
|
|
|
$group = $this->groupRepository->getById($groupId);
|
|
self::assertEquals($groupData[CustomerGroup::CODE], $group->getCode(), 'The group code did not change.');
|
|
self::assertEquals(
|
|
$groupData['taxClassId'],
|
|
$group->getTaxClassId(),
|
|
'The group tax class id did not change'
|
|
);
|
|
self::assertEquals(
|
|
['1'],
|
|
$group->getExtensionAttributes()->getExcludeWebsiteIds(),
|
|
'The group excluded websites do not match.'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Verify that updating a non-existing group throws an exception via SOAP.
|
|
*/
|
|
public function testUpdateGroupNotExistingGroupSoap()
|
|
{
|
|
$this->_markTestAsSoapOnly();
|
|
|
|
$nonExistentGroupId = '9999';
|
|
|
|
$serviceInfo = [
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1Save',
|
|
],
|
|
];
|
|
|
|
$groupData = [
|
|
CustomerGroup::ID => $nonExistentGroupId,
|
|
CustomerGroup::CODE => 'Updated Non-Existent Group SOAP',
|
|
'taxClassId' => 3,
|
|
];
|
|
$requestData = ['group' => $groupData];
|
|
|
|
try {
|
|
$this->_webApiCall($serviceInfo, $requestData);
|
|
} catch (\Exception $e) {
|
|
$expectedMessage = 'No such entity with %fieldName = %fieldValue';
|
|
|
|
$this->assertStringContainsString(
|
|
$expectedMessage,
|
|
$e->getMessage(),
|
|
"Exception does not contain expected message."
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify that deleting an existing group works.
|
|
*/
|
|
public function testDeleteGroupExists()
|
|
{
|
|
$group = $this->customerGroupFactory->create();
|
|
$group->setId(null);
|
|
$group->setCode('Delete Group');
|
|
$group->setTaxClassId(3);
|
|
$groupId = $this->createGroup($group);
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . "/$groupId",
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
|
|
],
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1DeleteById',
|
|
],
|
|
];
|
|
|
|
$requestData = [CustomerGroup::ID => $groupId];
|
|
$response = $this->_webApiCall($serviceInfo, $requestData);
|
|
$this->assertTrue($response, 'Expected response should be true.');
|
|
|
|
try {
|
|
$this->groupRepository->getById($groupId);
|
|
$this->fail('An expected NoSuchEntityException was not thrown.');
|
|
} catch (NoSuchEntityException $e) {
|
|
$exception = NoSuchEntityException::singleField(CustomerGroup::ID, $groupId);
|
|
$this->assertEquals(
|
|
$exception->getMessage(),
|
|
$e->getMessage(),
|
|
'Exception message does not match expected message.'
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify that deleting an existing group with excluded website works.
|
|
*/
|
|
public function testDeleteGroupExistsWithExcludedWebsite(): void
|
|
{
|
|
$group = $this->customerGroupFactory->create();
|
|
$group->setId(null);
|
|
$group->setCode('Delete Group with Excludes');
|
|
$group->setTaxClassId(3);
|
|
// set excluded website as an extension attribute
|
|
$customerGroupExtensionAttributes = $this->groupExtensionInterfaceFactory->create();
|
|
$customerGroupExtensionAttributes->setExcludeWebsiteIds(['1']);
|
|
$group->setExtensionAttributes($customerGroupExtensionAttributes);
|
|
|
|
$groupId = $this->createGroup($group);
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . "/$groupId",
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
|
|
],
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1DeleteById',
|
|
],
|
|
];
|
|
|
|
$requestData = [CustomerGroup::ID => $groupId];
|
|
$response = $this->_webApiCall($serviceInfo, $requestData);
|
|
self::assertTrue($response, 'Expected response should be true.');
|
|
|
|
try {
|
|
$this->groupRepository->getById($groupId);
|
|
self::fail('An expected NoSuchEntityException was not thrown.');
|
|
} catch (NoSuchEntityException $e) {
|
|
$exception = NoSuchEntityException::singleField(CustomerGroup::ID, $groupId);
|
|
self::assertEquals(
|
|
$exception->getMessage(),
|
|
$e->getMessage(),
|
|
'Exception message does not match expected message.'
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify that deleting an non-existing group works.
|
|
*/
|
|
public function testDeleteGroupNotExists()
|
|
{
|
|
$groupId = 4200;
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . "/$groupId",
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
|
|
],
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1DeleteById',
|
|
],
|
|
];
|
|
|
|
$requestData = [CustomerGroup::ID => $groupId];
|
|
$expectedMessage = 'No such entity with %fieldName = %fieldValue';
|
|
$expectedParameters = ['fieldName' => CustomerGroup::ID, 'fieldValue' => $groupId];
|
|
|
|
try {
|
|
$this->_webApiCall($serviceInfo, $requestData);
|
|
} 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($expectedParameters, $errorObj['parameters']);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify that the group with the specified Id cannot be deleted because it is the default group and a proper
|
|
* fault is returned.
|
|
*/
|
|
public function testDeleteGroupCannotDelete()
|
|
{
|
|
$groupIdAssignedDefault = 1;
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . "/$groupIdAssignedDefault",
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
|
|
],
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1DeleteById',
|
|
],
|
|
];
|
|
|
|
$requestData = [CustomerGroup::ID => $groupIdAssignedDefault];
|
|
$expectedMessage = "Cannot delete group.";
|
|
|
|
try {
|
|
$this->_webApiCall($serviceInfo, $requestData);
|
|
$this->fail("Expected exception");
|
|
} catch (\SoapFault $e) {
|
|
$this->assertStringContainsString(
|
|
$expectedMessage,
|
|
$e->getMessage(),
|
|
"SoapFault does not contain expected message."
|
|
);
|
|
} catch (\Exception $e) {
|
|
$this->assertStringContainsString(
|
|
$expectedMessage,
|
|
$e->getMessage(),
|
|
"Exception does not contain expected message."
|
|
);
|
|
}
|
|
|
|
$this->assertNotNull($this->groupRepository->getById($groupIdAssignedDefault));
|
|
}
|
|
|
|
/**
|
|
* Create a test group.
|
|
*
|
|
* @param CustomerGroup $group The group to create and save.
|
|
* @return int The group Id of the group that was created.
|
|
*/
|
|
private function createGroup($group)
|
|
{
|
|
$groupId = $this->groupRepository->save($group)->getId();
|
|
$this->assertNotNull($groupId);
|
|
|
|
$newGroup = $this->groupRepository->getById($groupId);
|
|
$this->assertEquals($groupId, $newGroup->getId(), 'The group id does not match.');
|
|
$this->assertEquals($group->getCode(), $newGroup->getCode(), 'The group code does not match.');
|
|
$this->assertEquals(
|
|
$group->getTaxClassId(),
|
|
$newGroup->getTaxClassId(),
|
|
'The group tax class id does not match.'
|
|
);
|
|
|
|
$this->groupRegistry->remove($groupId);
|
|
|
|
return $groupId;
|
|
}
|
|
|
|
/**
|
|
* Data provider for testSearchGroups
|
|
*/
|
|
public function testSearchGroupsDataProvider()
|
|
{
|
|
return [
|
|
['tax_class_id', 3, []],
|
|
['tax_class_id', 0, null],
|
|
['code', hash("sha256", random_int(0, 10000000000) . time()), null],
|
|
[
|
|
'id',
|
|
0,
|
|
[
|
|
'id' => 0,
|
|
'code' => 'NOT LOGGED IN',
|
|
'tax_class_id' => 3,
|
|
'tax_class_name' => 'Retail Customer'
|
|
]
|
|
],
|
|
[
|
|
'code',
|
|
'General',
|
|
[
|
|
'id' => 1,
|
|
'code' => 'General',
|
|
'tax_class_id' => 3,
|
|
'tax_class_name' => 'Retail Customer'
|
|
]
|
|
],
|
|
[
|
|
'id',
|
|
2,
|
|
[
|
|
'id' => 2,
|
|
'code' => 'Wholesale',
|
|
'tax_class_id' => 3,
|
|
'tax_class_name' => 'Retail Customer'
|
|
]
|
|
],
|
|
[
|
|
'code',
|
|
'Retailer',
|
|
[
|
|
'id' => 3,
|
|
'code' => 'Retailer',
|
|
'tax_class_id' => 3,
|
|
'tax_class_name' => 'Retail Customer'
|
|
]
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Test search customer group
|
|
*
|
|
* @param string $filterField Customer Group field to filter by
|
|
* @param string $filterValue Value of the field to be filtered by
|
|
* @param array $expectedResult Expected search result
|
|
*
|
|
* @dataProvider testSearchGroupsDataProvider
|
|
*/
|
|
public function testSearchGroups($filterField, $filterValue, $expectedResult)
|
|
{
|
|
$filterBuilder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
|
|
/** @var SearchCriteriaBuilder $searchCriteriaBuilder */
|
|
$searchCriteriaBuilder = Bootstrap::getObjectManager()
|
|
->create(\Magento\Framework\Api\SearchCriteriaBuilder::class);
|
|
$filter = $filterBuilder
|
|
->setField($filterField)
|
|
->setValue($filterValue)
|
|
->create();
|
|
$searchCriteriaBuilder->addFilters([$filter]);
|
|
|
|
$searchData = $searchCriteriaBuilder->create()->__toArray();
|
|
$requestData = ['searchCriteria' => $searchData];
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . "/search" . '?' . http_build_query($requestData),
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
|
|
],
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1GetList',
|
|
],
|
|
];
|
|
|
|
$searchResult = $this->_webApiCall($serviceInfo, $requestData);
|
|
|
|
if (is_null($expectedResult)) {
|
|
$this->assertEquals(0, $searchResult['total_count']);
|
|
} elseif (is_array($expectedResult)) {
|
|
$this->assertGreaterThan(0, $searchResult['total_count']);
|
|
if (!empty($expectedResult)) {
|
|
$this->assertEquals($expectedResult, $searchResult['items'][0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function testSearchGroupsWithMultipleFilterGroupsAndSorting()
|
|
{
|
|
/** @var FilterBuilder $filterBuilder */
|
|
$filterBuilder = Bootstrap::getObjectManager()->create(FilterBuilder::class);
|
|
|
|
$filter1 = $filterBuilder->setField(GroupInterface::CODE)
|
|
->setValue('General')
|
|
->create();
|
|
$filter2 = $filterBuilder->setField(GroupInterface::CODE)
|
|
->setValue('Retailer')
|
|
->create();
|
|
$filter3 = $filterBuilder->setField(GroupInterface::CODE)
|
|
->setValue('Wholesale')
|
|
->create();
|
|
$filter4 = $filterBuilder->setField(GroupInterface::ID)
|
|
->setValue(1)
|
|
->setConditionType('gt')
|
|
->create();
|
|
|
|
/**@var SortOrderBuilder $sortOrderBuilder */
|
|
$sortOrderBuilder = Bootstrap::getObjectManager()->create(SortOrderBuilder::class);
|
|
|
|
/** @var SortOrder $sortOrder */
|
|
$sortOrder = $sortOrderBuilder->setField(GroupInterface::CODE)->setDirection(SortOrder::SORT_ASC)->create();
|
|
|
|
/** @var SearchCriteriaBuilder $searchCriteriaBuilder */
|
|
$searchCriteriaBuilder = Bootstrap::getObjectManager()->create(SearchCriteriaBuilder::class);
|
|
|
|
$searchCriteriaBuilder->addFilters([$filter1, $filter2, $filter3]);
|
|
$searchCriteriaBuilder->addFilters([$filter4]);
|
|
$searchCriteriaBuilder->setSortOrders([$sortOrder]);
|
|
|
|
$searchData = $searchCriteriaBuilder->create()->__toArray();
|
|
$requestData = ['searchCriteria' => $searchData];
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . "/search" . '?' . http_build_query($requestData),
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
|
|
],
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => 'customerGroupRepositoryV1GetList',
|
|
],
|
|
];
|
|
|
|
$searchResult = $this->_webApiCall($serviceInfo, $requestData);
|
|
|
|
$this->assertEquals(2, $searchResult['total_count']);
|
|
$this->assertEquals(3, $searchResult['items'][0][GroupInterface::ID]);
|
|
$this->assertEquals(2, $searchResult['items'][1][GroupInterface::ID]);
|
|
}
|
|
|
|
/**
|
|
* Test search customer group using GET
|
|
*
|
|
* @param string $filterField Customer Group field to filter by
|
|
* @param string $filterValue Value of the field to be filtered by
|
|
* @param array $expectedResult Expected search result
|
|
*
|
|
* @dataProvider testSearchGroupsDataProvider
|
|
*/
|
|
public function testSearchGroupsWithGET($filterField, $filterValue, $expectedResult)
|
|
{
|
|
$this->_markTestAsRestOnly('SOAP is covered in ');
|
|
$filterBuilder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
|
|
/** @var SearchCriteriaBuilder $searchCriteriaBuilder */
|
|
$searchCriteriaBuilder = Bootstrap::getObjectManager()
|
|
->create(\Magento\Framework\Api\SearchCriteriaBuilder::class);
|
|
$filter = $filterBuilder
|
|
->setField($filterField)
|
|
->setValue($filterValue)
|
|
->create();
|
|
$searchCriteriaBuilder->addFilters([$filter]);
|
|
$searchData = $searchCriteriaBuilder->create()->__toArray();
|
|
$requestData = ['searchCriteria' => $searchData];
|
|
$searchQueryString = http_build_query($requestData);
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . '/search?' . $searchQueryString,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
|
|
],
|
|
];
|
|
$searchResult = $this->_webApiCall($serviceInfo);
|
|
|
|
if (is_null($expectedResult)) {
|
|
$this->assertEquals(0, $searchResult['total_count']);
|
|
} elseif (is_array($expectedResult)) {
|
|
$this->assertGreaterThan(0, $searchResult['total_count']);
|
|
if (!empty($expectedResult)) {
|
|
$this->assertEquals($expectedResult, $searchResult['items'][0]);
|
|
}
|
|
}
|
|
}
|
|
}
|