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

901 lines
33 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\CustomerInterface as Customer;
use Magento\Customer\Model\AccountManagement;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\Exception\InputException;
use Magento\Framework\Webapi\Exception as HTTPExceptionCodes;
use Magento\Newsletter\Model\Subscriber;
use Magento\Security\Model\Config;
use Magento\Store\Model\ScopeInterface;
use Magento\TestFramework\Helper\Bootstrap;
use Magento\TestFramework\Helper\Customer as CustomerHelper;
use Magento\TestFramework\TestCase\WebapiAbstract;
/**
* Test class for Magento\Customer\Api\AccountManagementInterface
*
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class AccountManagementTest extends WebapiAbstract
{
public const SERVICE_VERSION = 'V1';
public const SERVICE_NAME = 'customerAccountManagementV1';
public const RESOURCE_PATH = '/V1/customers';
/**
* Sample values for testing
*/
public const ATTRIBUTE_CODE = 'attribute_code';
public const ATTRIBUTE_VALUE = 'attribute_value';
/**
* @var ObjectManager
*/
private $objectManager;
/**
* @var AccountManagementInterface
*/
private $accountManagement;
/**
* @var \Magento\Framework\Api\SearchCriteriaBuilder
*/
private $searchCriteriaBuilder;
/**
* @var \Magento\Framework\Api\SortOrderBuilder
*/
private $sortOrderBuilder;
/**
* @var \Magento\Framework\Api\Search\FilterGroupBuilder
*/
private $filterGroupBuilder;
/**
* @var CustomerHelper
*/
private $customerHelper;
/**
* @var array
*/
private $currentCustomerId;
/** @var Subscriber */
private $subscriber;
/**
* @var \Magento\Framework\Reflection\DataObjectProcessor
*/
private $dataObjectProcessor;
/**
* @var \Magento\Config\Model\Config
*/
private $config;
/**
* @var int
*/
private $configValue;
/**
* Execute per test initialization.
*/
protected function setUp(): void
{
$this->objectManager = Bootstrap::getObjectManager();
$this->accountManagement = Bootstrap::getObjectManager()->get(
\Magento\Customer\Api\AccountManagementInterface::class
);
$this->searchCriteriaBuilder = Bootstrap::getObjectManager()->create(
\Magento\Framework\Api\SearchCriteriaBuilder::class
);
$this->sortOrderBuilder = Bootstrap::getObjectManager()->create(
\Magento\Framework\Api\SortOrderBuilder::class
);
$this->filterGroupBuilder = Bootstrap::getObjectManager()->create(
\Magento\Framework\Api\Search\FilterGroupBuilder::class
);
$this->customerHelper = new CustomerHelper();
$this->dataObjectProcessor = Bootstrap::getObjectManager()->create(
\Magento\Framework\Reflection\DataObjectProcessor::class
);
$this->config = Bootstrap::getObjectManager()->create(
\Magento\Config\Model\Config::class
);
$this->initSubscriber();
if ($this->config->getConfigDataValue(
Config::XML_PATH_FRONTEND_AREA .
Config::XML_PATH_PASSWORD_RESET_PROTECTION_TYPE
) != 0) {
$this->configValue = $this->config
->getConfigDataValue(
Config::XML_PATH_FRONTEND_AREA .
Config::XML_PATH_PASSWORD_RESET_PROTECTION_TYPE
);
$this->config->setDataByPath(
Config::XML_PATH_FRONTEND_AREA . Config::XML_PATH_PASSWORD_RESET_PROTECTION_TYPE,
0
);
$this->config->save();
}
}
protected function tearDown(): void
{
if (!empty($this->currentCustomerId)) {
foreach ($this->currentCustomerId as $customerId) {
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/' . $customerId,
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
],
'soap' => [
'service' => CustomerRepositoryTest::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => CustomerRepositoryTest::SERVICE_NAME . 'DeleteById',
],
];
$response = $this->_webApiCall($serviceInfo, ['customerId' => $customerId]);
$this->assertTrue($response);
}
}
$this->config->setDataByPath(
Config::XML_PATH_FRONTEND_AREA . Config::XML_PATH_PASSWORD_RESET_PROTECTION_TYPE,
$this->configValue
);
$this->config->save();
$this->accountManagement = null;
$this->subscriber = null;
}
private function initSubscriber()
{
$this->subscriber = Bootstrap::getObjectManager()->create(
\Magento\Newsletter\Model\Subscriber::class
);
}
public function testCreateCustomer()
{
$customerData = $this->_createCustomer();
$this->assertNotNull($customerData['id']);
}
public function testCreateCustomerWithErrors()
{
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH,
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST, ],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'CreateAccount',
],
];
$customerDataArray = $this->dataObjectProcessor->buildOutputDataArray(
$this->customerHelper->createSampleCustomerDataObject(),
\Magento\Customer\Api\Data\CustomerInterface::class
);
$invalidEmail = 'invalid';
$customerDataArray['email'] = $invalidEmail;
$requestData = ['customer' => $customerDataArray, 'password' => CustomerHelper::PASSWORD];
try {
$this->_webApiCall($serviceInfo, $requestData);
$this->fail('Expected exception did not occur.');
} catch (\Exception $e) {
if (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) {
$expectedException = new InputException();
$expectedException->addError(__('"Email" is not a valid email address.'));
$this->assertInstanceOf('SoapFault', $e);
$this->checkSoapFault(
$e,
$expectedException->getRawMessage(),
'env:Sender',
$expectedException->getParameters() // expected error parameters
);
} else {
$this->assertEquals(HTTPExceptionCodes::HTTP_BAD_REQUEST, $e->getCode());
$exceptionData = $this->processRestExceptionResult($e);
$expectedExceptionData = [
'message' => '"Email" is not a valid email address.',
];
$this->assertEquals($expectedExceptionData, $exceptionData);
}
}
}
public function testCreateCustomerWithoutOptionalFields()
{
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH,
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST, ],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'CreateAccount',
],
];
$customerDataArray = $this->dataObjectProcessor->buildOutputDataArray(
$this->customerHelper->createSampleCustomerDataObject(),
\Magento\Customer\Api\Data\CustomerInterface::class
);
unset($customerDataArray['store_id']);
unset($customerDataArray['website_id']);
$requestData = ['customer' => $customerDataArray, 'password' => CustomerHelper::PASSWORD];
try {
$customerData = $this->_webApiCall($serviceInfo, $requestData, null, 'all');
$this->assertNotNull($customerData['id']);
} catch (\Exception $e) {
$this->fail('Customer should be created without optional fields.');
}
}
/**
* Test customer activation when it is required
*
* @magentoConfigFixture default_store customer/create_account/confirm 0
*/
public function testActivateCustomer()
{
$customerData = $this->_createCustomer();
// Update the customer's confirmation key to a known value
$customerData = $this->customerHelper->updateSampleCustomer(
$customerData[Customer::ID],
[
'id' => $customerData[Customer::ID],
'confirmation' => CustomerHelper::CONFIRMATION
]
);
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/' . $customerData[Customer::EMAIL] . '/activate',
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'Activate',
],
];
$requestData = [
'email' => $customerData[Customer::EMAIL],
'confirmationKey' => CustomerHelper::CONFIRMATION
];
try {
$result = $this->_webApiCall($serviceInfo, $requestData);
$this->assertEquals($customerData[Customer::ID], $result[Customer::ID], 'Wrong customer!');
} catch (\Exception $e) {
$this->fail('Customer is not activated.');
}
}
public function testGetCustomerActivateCustomer()
{
$customerData = $this->_createCustomer();
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/' . $customerData[Customer::EMAIL] . '/activate',
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'Activate',
],
];
$requestData = [
'email' => $customerData[Customer::EMAIL],
'confirmationKey' => CustomerHelper::CONFIRMATION
];
try {
$customerResponseData = $this->_webApiCall($serviceInfo, $requestData);
$this->assertEquals($customerData[Customer::ID], $customerResponseData[Customer::ID]);
} catch (\Exception $e) {
$this->fail('Customer is not activated.');
}
}
public function testValidateResetPasswordLinkToken()
{
$customerData = $this->_createCustomer();
/** @var \Magento\Customer\Model\Customer $customerModel */
$customerModel = Bootstrap::getObjectManager()->create(\Magento\Customer\Model\CustomerFactory::class)
->create();
$customerModel->load($customerData[Customer::ID]);
$rpToken = 'lsdj579slkj5987slkj595lkj';
$customerModel->setRpToken('lsdj579slkj5987slkj595lkj');
$customerModel->setRpTokenCreatedAt(date('Y-m-d H:i:s'));
$customerModel->save();
$path = self::RESOURCE_PATH . '/' . $customerData[Customer::ID] . '/password/resetLinkToken/' . $rpToken;
$serviceInfo = [
'rest' => [
'resourcePath' => $path,
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'ValidateResetPasswordLinkToken',
],
];
$this->_webApiCall(
$serviceInfo,
['customerId' => $customerData['id'], 'resetPasswordLinkToken' => $rpToken]
);
}
public function testValidateResetPasswordLinkTokenInvalidToken()
{
$customerData = $this->_createCustomer();
$invalidToken = 'fjjkafjie';
$path = self::RESOURCE_PATH . '/' . $customerData[Customer::ID] . '/password/resetLinkToken/' . $invalidToken;
$serviceInfo = [
'rest' => [
'resourcePath' => $path,
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'ValidateResetPasswordLinkToken',
],
];
$expectedMessage = 'The password token is mismatched. Reset and try again.';
try {
if (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) {
$this->_webApiCall(
$serviceInfo,
['customerId' => $customerData['id'], 'resetPasswordLinkToken' => 'invalid']
);
} else {
$this->_webApiCall($serviceInfo);
}
$this->fail("Expected exception to be thrown.");
} catch (\SoapFault $e) {
$this->assertStringContainsString(
$expectedMessage,
$e->getMessage(),
"Exception message does not match"
);
} catch (\Exception $e) {
$errorObj = $this->processRestExceptionResult($e);
$this->assertEquals($expectedMessage, $errorObj['message']);
$this->assertEquals(HTTPExceptionCodes::HTTP_BAD_REQUEST, $e->getCode());
}
}
public function testInitiatePasswordMissingRequiredFields()
{
$this->_markTestAsRestOnly('Soap clients explicitly check for required fields based on WSDL.');
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/password',
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
]
];
try {
$this->_webApiCall($serviceInfo);
} catch (\Exception $e) {
$this->assertEquals(\Magento\Framework\Webapi\Exception::HTTP_BAD_REQUEST, $e->getCode());
$exceptionData = $this->processRestExceptionResult($e);
$expectedExceptionData = [
'message' => 'One or more input exceptions have occurred.',
'errors' => [
[
'message' => '"%fieldName" is required. Enter and try again.',
'parameters' => [
'fieldName' => 'email',
],
],
[
'message' => '"%fieldName" is required. Enter and try again.',
'parameters' => [
'fieldName' => 'template',
]
],
],
];
$this->assertEquals($expectedExceptionData, $exceptionData);
}
}
public function testInitiatePasswordReset()
{
$customerData = $this->_createCustomer();
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/password',
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'InitiatePasswordReset',
],
];
$requestData = [
'email' => $customerData[Customer::EMAIL],
'template' => AccountManagement::EMAIL_RESET,
'websiteId' => $customerData[Customer::WEBSITE_ID],
];
// This api doesn't return any response.
// No exception or response means the request was processed successfully.
// The webapi framework does not return the header information as yet. A check for HTTP 200 would be ideal here
$this->_webApiCall($serviceInfo, $requestData);
}
public function testSendPasswordResetLinkBadEmailOrWebsite()
{
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/password',
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'InitiatePasswordReset',
],
];
$requestData = [
'email' => 'dummy@example.com',
'template' => AccountManagement::EMAIL_RESET,
'websiteId' => 0,
];
try {
$this->_webApiCall($serviceInfo, $requestData);
} catch (\Exception $e) {
$expectedErrorParameters =
[
'fieldName' => 'email',
'fieldValue' => 'dummy@example.com',
'field2Name' => 'websiteId',
'field2Value' => 0,
];
if (TESTS_WEB_API_ADAPTER == self::ADAPTER_REST) {
$errorObj = $this->processRestExceptionResult($e);
$this->assertEquals(
'No such entity with %fieldName = %fieldValue, %field2Name = %field2Value',
$errorObj['message']
);
$this->assertEquals($expectedErrorParameters, $errorObj['parameters']);
$this->assertEquals(HTTPExceptionCodes::HTTP_NOT_FOUND, $e->getCode());
} else {
$this->assertInstanceOf('SoapFault', $e);
$this->checkSoapFault(
$e,
'No such entity with %fieldName = %fieldValue, %field2Name = %field2Value',
'env:Sender',
$expectedErrorParameters
);
}
}
}
public function testGetConfirmationStatus()
{
$customerData = $this->_createCustomer();
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/' . $customerData[Customer::ID] . '/confirm',
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'GetConfirmationStatus',
],
];
$confirmationResponse = $this->_webApiCall($serviceInfo, ['customerId' => $customerData['id']]);
$this->assertEquals(AccountManagement::ACCOUNT_CONFIRMATION_NOT_REQUIRED, $confirmationResponse);
}
public function testResendConfirmation()
{
$customerData = $this->_createCustomer();
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/confirm',
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'ResendConfirmation',
],
];
$requestData = [
'email' => $customerData[Customer::EMAIL],
'websiteId' => $customerData[Customer::WEBSITE_ID],
];
// This api doesn't return any response.
// No exception or response means the request was processed successfully.
// The webapi framework does not return the header information as yet. A check for HTTP 200 would be ideal here
$this->_webApiCall($serviceInfo, $requestData);
}
public function testResendConfirmationBadEmailOrWebsite()
{
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/confirm',
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'ResendConfirmation',
],
];
$requestData = [
'email' => 'dummy@example.com',
'websiteId' => 0,
];
try {
$this->_webApiCall($serviceInfo, $requestData);
} catch (\Exception $e) {
$expectedErrorParameters =
[
'fieldName' => 'email',
'fieldValue' => 'dummy@example.com',
'field2Name' => 'websiteId',
'field2Value' => 0,
];
if (TESTS_WEB_API_ADAPTER == self::ADAPTER_REST) {
$errorObj = $this->processRestExceptionResult($e);
$this->assertEquals(
'No such entity with %fieldName = %fieldValue, %field2Name = %field2Value',
$errorObj['message']
);
$this->assertEquals($expectedErrorParameters, $errorObj['parameters']);
$this->assertEquals(HTTPExceptionCodes::HTTP_NOT_FOUND, $e->getCode());
} else {
$this->assertInstanceOf('SoapFault', $e);
$this->checkSoapFault(
$e,
'No such entity with %fieldName = %fieldValue, %field2Name = %field2Value',
'env:Sender',
$expectedErrorParameters
);
}
}
}
public function testValidateCustomerData()
{
$customerData = $this->customerHelper->createSampleCustomerDataObject();
$customerData->setFirstname(null);
$customerData->setLastname(null);
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/validate',
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'Validate',
],
];
$customerData = $this->dataObjectProcessor->buildOutputDataArray(
$customerData,
\Magento\Customer\Api\Data\CustomerInterface::class
);
$requestData = ['customer' => $customerData];
$validationResponse = $this->_webApiCall($serviceInfo, $requestData);
$this->assertFalse($validationResponse['valid']);
$this->assertEquals(
'The "First Name" attribute value is empty. Set the attribute and try again.',
$validationResponse['messages'][0]
);
$this->assertEquals(
'The "Last Name" attribute value is empty. Set the attribute and try again.',
$validationResponse['messages'][1]
);
}
public function testIsReadonly()
{
$customerData = $this->_createCustomer();
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/' . $customerData[Customer::ID] . '/permissions/readonly',
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'IsReadonly',
],
];
$response = $this->_webApiCall($serviceInfo, ['customerId' => $customerData['id']]);
$this->assertFalse($response);
}
public function testEmailAvailable()
{
$config = $this->objectManager->get(ScopeConfigInterface::class);
$customerData = $this->_createCustomer();
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/isEmailAvailable',
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'IsEmailAvailable',
],
];
$requestData = [
'customerEmail' => $customerData[Customer::EMAIL],
'websiteId' => $customerData[Customer::WEBSITE_ID],
];
$emailSetting = $config->getValue(
AccountManagement::GUEST_CHECKOUT_LOGIN_OPTION_SYS_CONFIG,
ScopeInterface::SCOPE_WEBSITE,
$customerData[Customer::WEBSITE_ID]
);
if (!$emailSetting) {
$this->assertTrue($this->_webApiCall($serviceInfo, $requestData));
} else {
$this->assertFalse($this->_webApiCall($serviceInfo, $requestData));
}
}
public function testEmailAvailableInvalidEmail()
{
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/isEmailAvailable',
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'IsEmailAvailable',
],
];
$requestData = [
'customerEmail' => 'invalid',
'websiteId' => 0,
];
$this->assertTrue($this->_webApiCall($serviceInfo, $requestData));
}
/**
* @magentoApiDataFixture Magento/Customer/_files/attribute_user_defined_address.php
* @magentoApiDataFixture Magento/Customer/_files/attribute_user_defined_customer.php
*/
public function testCustomAttributes()
{
//Sample customer data comes with the disable_auto_group_change custom attribute
$customerData = $this->customerHelper->createSampleCustomerDataObject();
//address attribute code from fixture
$fixtureAddressAttributeCode = 'address_user_attribute';
//customer attribute code from fixture
$fixtureCustomerAttributeCode = 'user_attribute';
//Custom Attribute Values
$address1CustomAttributeValue = 'value1';
$address2CustomAttributeValue = 'value2';
$customerCustomAttributeValue = 'value3';
$addresses = $customerData->getAddresses();
$addresses[0]->setCustomAttribute($fixtureAddressAttributeCode, $address1CustomAttributeValue);
$addresses[1]->setCustomAttribute($fixtureAddressAttributeCode, $address2CustomAttributeValue);
$customerData->setAddresses($addresses);
$customerData->setCustomAttribute($fixtureCustomerAttributeCode, $customerCustomAttributeValue);
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH,
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'CreateAccount',
],
];
$customerDataArray = $this->dataObjectProcessor->buildOutputDataArray(
$customerData,
\Magento\Customer\Api\Data\CustomerInterface::class
);
$requestData = ['customer' => $customerDataArray, 'password' => CustomerHelper::PASSWORD];
$customerData = $this->_webApiCall($serviceInfo, $requestData);
$customerId = $customerData['id'];
//TODO: Fix assertions to verify custom attributes
$this->assertNotNull($customerData);
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/' . $customerId ,
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
],
'soap' => [
'service' => CustomerRepositoryTest::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => CustomerRepositoryTest::SERVICE_NAME . 'DeleteById',
],
];
$response = $this->_webApiCall($serviceInfo, ['customerId' => $customerId]);
$this->assertTrue($response);
}
/**
* @magentoApiDataFixture Magento/Customer/_files/customer.php
* @magentoApiDataFixture Magento/Customer/_files/customer_two_addresses.php
*/
public function testGetDefaultBillingAddress()
{
$fixtureCustomerId = 1;
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . "/$fixtureCustomerId/billingAddress",
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'GetDefaultBillingAddress',
],
];
$requestData = ['customerId' => $fixtureCustomerId];
$addressData = $this->_webApiCall($serviceInfo, $requestData);
$this->assertEquals(
$this->getFirstFixtureAddressData(),
$addressData,
"Default billing address data is invalid."
);
}
/**
* @magentoApiDataFixture Magento/Customer/_files/customer.php
* @magentoApiDataFixture Magento/Customer/_files/customer_two_addresses.php
*/
public function testGetDefaultShippingAddress()
{
$fixtureCustomerId = 1;
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . "/$fixtureCustomerId/shippingAddress",
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
],
'soap' => [
'service' => self::SERVICE_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_NAME . 'GetDefaultShippingAddress',
],
];
$requestData = ['customerId' => $fixtureCustomerId];
$addressData = $this->_webApiCall($serviceInfo, $requestData);
$this->assertEquals(
$this->getFirstFixtureAddressData(),
$addressData,
"Default shipping address data is invalid."
);
}
/**
* @return array|bool|float|int|string
*/
protected function _createCustomer()
{
$customerData = $this->customerHelper->createSampleCustomer();
$this->currentCustomerId[] = $customerData['id'];
return $customerData;
}
/**
* Retrieve data of the first fixture address.
*
* @return array
*/
protected function getFirstFixtureAddressData()
{
return [
'firstname' => 'John',
'lastname' => 'Smith',
'city' => 'CityM',
'country_id' => 'US',
'company' => 'CompanyName',
'postcode' => '75477',
'telephone' => '3468676',
'street' => ['Green str, 67'],
'id' => 1,
'default_billing' => true,
'default_shipping' => true,
'customer_id' => '1',
'region' => ['region' => 'Alabama', 'region_id' => 1, 'region_code' => 'AL'],
'region_id' => 1,
];
}
public function testCreateCustomerWithSubscription()
{
$customerData = $this->customerHelper->createSampleCustomer(
["extension_attributes" => ["is_subscribed" => true]]
);
$this->assertNotNull($customerData['id']);
$this->subscriber->loadByCustomerId($customerData['id']);
$this->assertNotNull($this->subscriber->getId());
$this->assertEquals($customerData['id'], $this->subscriber->getCustomerId());
}
public function testUnsubscribeCustomer()
{
//Creating customer and subscribe
$customerData = $this->customerHelper->createSampleCustomer(
["extension_attributes" => ["is_subscribed" => true]]
);
$this->assertNotNull($customerData['id']);
$this->subscriber->loadByCustomerId($customerData['id']);
$subscriptionId = $this->subscriber->getId();
$this->assertNotNull($subscriptionId);
$this->assertEquals($customerData['id'], $this->subscriber->getCustomerId());
//Manage customer in order to unsubscribe
$this->customerHelper->updateSampleCustomer(
$customerData["id"],
array_merge(
$customerData,
["extension_attributes" => ["is_subscribed" => false]]
)
);
$this->initSubscriber();
$this->subscriber->loadByCustomerId($customerData['id']);
$this->assertEquals(Subscriber::STATUS_UNSUBSCRIBED, $this->subscriber->getStatus());
}
}