magento2-docker/dev/tests/api-functional/testsuite/Magento/Customer/Api/GroupManagementTest.php

230 lines
7.3 KiB
PHP
Executable File

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Customer\Api;
use Magento\Customer\Model\Data\Group as CustomerGroup;
use Magento\Customer\Model\GroupRegistry;
use Magento\Customer\Model\ResourceModel\GroupRepository;
use Magento\TestFramework\Helper\Bootstrap;
use Magento\TestFramework\TestCase\WebapiAbstract;
/**
* Customer Group Management API test
*/
class GroupManagementTest extends WebapiAbstract
{
const SERVICE_NAME = "customerGroupManagementV1";
const SERVICE_VERSION = "V1";
const RESOURCE_PATH = "/V1/customerGroups";
/**
* @var GroupRegistry
*/
private $groupRegistry;
/**
* @var GroupRepository
*/
private $groupRepository;
/**
* 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);
}
/**
* Verify the retrieval of the default group for storeId equal to 1.
*
* @param int $storeId The store Id
* @param array $defaultGroupData The default group data for the store with the specified Id.
*
* @dataProvider getDefaultGroupDataProvider
*/
public function testGetDefaultGroup($storeId, $defaultGroupData)
{
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . "/default/$storeId",
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => 'customerGroupManagementV1GetDefaultGroup',
],
];
$requestData = ['storeId' => $storeId];
$groupData = $this->_webApiCall($serviceInfo, $requestData);
$this->assertEquals($defaultGroupData, $groupData, "The default group does not match.");
}
/**
* The testGetDefaultGroup data provider.
*
* @return array
*/
public function getDefaultGroupDataProvider()
{
return [
'admin' => [
0,
[
CustomerGroup::ID => 1,
CustomerGroup::CODE => 'General',
CustomerGroup::TAX_CLASS_ID => 3,
CustomerGroup::TAX_CLASS_NAME => 'Retail Customer'
],
],
'base' => [
1,
[
CustomerGroup::ID => 1,
CustomerGroup::CODE => 'General',
CustomerGroup::TAX_CLASS_ID => 3,
CustomerGroup::TAX_CLASS_NAME => 'Retail Customer'
],
]
];
}
/**
* Verify the retrieval of a non-existent storeId will return an expected fault.
*/
public function testGetDefaultGroupNonExistentStore()
{
/* Store id should not exist */
$nonExistentStoreId = 9876;
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . "/default/$nonExistentStoreId",
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => 'customerGroupManagementV1GetDefaultGroup',
],
];
$requestData = ['storeId' => $nonExistentStoreId];
$expectedMessage = 'No such entity with %fieldName = %fieldValue';
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->assertStringContainsString((string)$nonExistentStoreId, $e->getMessage());
}
}
/**
* Verify that the group with the specified Id can or cannot be deleted.
*
* @param int $groupId The group Id
* @param bool $isDeleteable Whether the group can or cannot be deleted.
*
* @dataProvider isReadonlyDataProvider
*/
public function testIsReadonly($groupId, $isDeleteable)
{
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . "/$groupId/permissions",
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => 'customerGroupManagementV1IsReadonly',
],
];
$requestData = [CustomerGroup::ID => $groupId];
$isReadonly = $this->_webApiCall($serviceInfo, $requestData);
$failureMessage = $isDeleteable
? 'The group should be deleteable.' : 'The group should not be deleteable.';
$this->assertEquals($isDeleteable, !$isReadonly, $failureMessage);
}
/**
* The testIsReadonly data provider.
*
* @return array
*/
public function isReadonlyDataProvider()
{
return [
'NOT LOGGED IN' => [0, false],
'General' => [1, false],
'Wholesale' => [2, true],
'Retailer' => [3, true]
];
}
/**
* Verify that the group with the specified Id can or cannot be deleted.
*/
public function testIsReadonlyNoSuchGroup()
{
/* This group ID should not exist in the store. */
$groupId = 9999;
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . "/$groupId/permissions",
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => 'customerGroupManagementV1IsReadonly',
],
];
$requestData = [CustomerGroup::ID => $groupId];
$expectedMessage = 'No such entity with %fieldName = %fieldValue';
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->assertStringContainsString((string)$groupId, $e->getMessage());
}
}
}