123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802 |
- <?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\Api\Data\AddressInterface as Address;
- use Magento\Framework\Api\SortOrder;
- use Magento\Framework\Exception\InputException;
- use Magento\TestFramework\Helper\Bootstrap;
- use Magento\TestFramework\Helper\Customer as CustomerHelper;
- use Magento\TestFramework\TestCase\WebapiAbstract;
- use Magento\Framework\Webapi\Exception as HTTPExceptionCodes;
- use Magento\Framework\Exception\NoSuchEntityException;
- /**
- * Test class for Magento\Customer\Api\CustomerRepositoryInterface
- *
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class CustomerRepositoryTest extends WebapiAbstract
- {
- const SERVICE_VERSION = 'V1';
- const SERVICE_NAME = 'customerCustomerRepositoryV1';
- const RESOURCE_PATH = '/V1/customers';
- const RESOURCE_PATH_CUSTOMER_TOKEN = "/V1/integration/customer/token";
- /**
- * Sample values for testing
- */
- const ATTRIBUTE_CODE = 'attribute_code';
- const ATTRIBUTE_VALUE = 'attribute_value';
- /**
- * @var CustomerRepositoryInterface
- */
- private $customerRepository;
- /**
- * @var \Magento\Framework\Api\DataObjectHelper
- */
- private $dataObjectHelper;
- /**
- * @var \Magento\Customer\Api\Data\CustomerInterfaceFactory
- */
- private $customerDataFactory;
- /**
- * @var \Magento\Framework\Api\SearchCriteriaBuilder
- */
- private $searchCriteriaBuilder;
- /**
- * @var \Magento\Framework\Api\SortOrderBuilder
- */
- private $sortOrderBuilder;
- /**
- * @var \Magento\Framework\Api\Search\FilterGroupBuilder
- */
- private $filterGroupBuilder;
- /**
- * @var \Magento\Customer\Model\CustomerRegistry
- */
- private $customerRegistry;
- /**
- * @var CustomerHelper
- */
- private $customerHelper;
- /**
- * @var array
- */
- private $currentCustomerId;
- /**
- * @var \Magento\Framework\Reflection\DataObjectProcessor
- */
- private $dataObjectProcessor;
- /**
- * Execute per test initialization.
- */
- public function setUp()
- {
- $this->customerRegistry = Bootstrap::getObjectManager()->get(
- \Magento\Customer\Model\CustomerRegistry::class
- );
- $this->customerRepository = Bootstrap::getObjectManager()->get(
- \Magento\Customer\Api\CustomerRepositoryInterface::class,
- ['customerRegistry' => $this->customerRegistry]
- );
- $this->dataObjectHelper = Bootstrap::getObjectManager()->create(
- \Magento\Framework\Api\DataObjectHelper::class
- );
- $this->customerDataFactory = Bootstrap::getObjectManager()->create(
- \Magento\Customer\Api\Data\CustomerInterfaceFactory::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
- );
- }
- public function tearDown()
- {
- 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' => self::SERVICE_NAME,
- 'serviceVersion' => self::SERVICE_VERSION,
- 'operation' => self::SERVICE_NAME . 'DeleteById',
- ],
- ];
- $response = $this->_webApiCall($serviceInfo, ['customerId' => $customerId]);
- $this->assertTrue($response);
- }
- }
- $this->customerRepository = null;
- }
- /**
- * Validate update by invalid customer.
- *
- * @expectedException \Exception
- * @expectedExceptionMessage The consumer isn't authorized to access %resources.
- */
- public function testInvalidCustomerUpdate()
- {
- $this->_markTestAsRestOnly();
- //Create first customer and retrieve customer token.
- $firstCustomerData = $this->_createCustomer();
- // get customer ID token
- /** @var \Magento\Integration\Api\CustomerTokenServiceInterface $customerTokenService */
- //$customerTokenService = $this->objectManager->create(CustomerTokenServiceInterface::class);
- $customerTokenService = Bootstrap::getObjectManager()->create(
- \Magento\Integration\Api\CustomerTokenServiceInterface::class
- );
- $token = $customerTokenService->createCustomerAccessToken($firstCustomerData[Customer::EMAIL], 'test@123');
- //Create second customer and update lastname.
- $customerData = $this->_createCustomer();
- $existingCustomerDataObject = $this->_getCustomerData($customerData[Customer::ID]);
- $lastName = $existingCustomerDataObject->getLastname();
- $customerData[Customer::LASTNAME] = $lastName . 'Updated';
- $newCustomerDataObject = $this->customerDataFactory->create();
- $this->dataObjectHelper->populateWithArray(
- $newCustomerDataObject,
- $customerData,
- \Magento\Customer\Api\Data\CustomerInterface::class
- );
- $serviceInfo = [
- 'rest' => [
- 'resourcePath' => self::RESOURCE_PATH . "/{$customerData[Customer::ID]}",
- 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
- 'token' => $token,
- ]
- ];
- $newCustomerDataObject = $this->dataObjectProcessor->buildOutputDataArray(
- $newCustomerDataObject,
- \Magento\Customer\Api\Data\CustomerInterface::class
- );
- $requestData = ['customer' => $newCustomerDataObject];
- $this->_webApiCall($serviceInfo, $requestData);
- }
- public function testDeleteCustomer()
- {
- $customerData = $this->_createCustomer();
- $this->currentCustomerId = [];
- $serviceInfo = [
- 'rest' => [
- 'resourcePath' => self::RESOURCE_PATH . '/' . $customerData[Customer::ID],
- 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
- ],
- 'soap' => [
- 'service' => self::SERVICE_NAME,
- 'serviceVersion' => self::SERVICE_VERSION,
- 'operation' => self::SERVICE_NAME . 'DeleteById',
- ],
- ];
- if (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) {
- $response = $this->_webApiCall($serviceInfo, ['customerId' => $customerData['id']]);
- } else {
- $response = $this->_webApiCall($serviceInfo);
- }
- $this->assertTrue($response);
- //Verify if the customer is deleted
- $this->expectException(\Magento\Framework\Exception\NoSuchEntityException::class);
- $this->expectExceptionMessage(sprintf("No such entity with customerId = %s", $customerData[Customer::ID]));
- $this->_getCustomerData($customerData[Customer::ID]);
- }
- public function testDeleteCustomerInvalidCustomerId()
- {
- $invalidId = -1;
- $serviceInfo = [
- 'rest' => [
- 'resourcePath' => self::RESOURCE_PATH . '/' . $invalidId,
- 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
- ],
- 'soap' => [
- 'service' => self::SERVICE_NAME,
- 'serviceVersion' => self::SERVICE_VERSION,
- 'operation' => self::SERVICE_NAME . 'DeleteById',
- ],
- ];
- $expectedMessage = 'No such entity with %fieldName = %fieldValue';
- try {
- $this->_webApiCall($serviceInfo, ['customerId' => $invalidId]);
- $this->fail("Expected exception");
- } catch (\SoapFault $e) {
- $this->assertContains(
- $expectedMessage,
- $e->getMessage(),
- "SoapFault does not contain expected message."
- );
- } catch (\Exception $e) {
- $errorObj = $this->processRestExceptionResult($e);
- $this->assertEquals($expectedMessage, $errorObj['message']);
- $this->assertEquals(['fieldName' => 'customerId', 'fieldValue' => $invalidId], $errorObj['parameters']);
- $this->assertEquals(HTTPExceptionCodes::HTTP_NOT_FOUND, $e->getCode());
- }
- }
- public function testUpdateCustomer()
- {
- $customerData = $this->_createCustomer();
- $existingCustomerDataObject = $this->_getCustomerData($customerData[Customer::ID]);
- $lastName = $existingCustomerDataObject->getLastname();
- $customerData[Customer::LASTNAME] = $lastName . 'Updated';
- $newCustomerDataObject = $this->customerDataFactory->create();
- $this->dataObjectHelper->populateWithArray(
- $newCustomerDataObject,
- $customerData,
- \Magento\Customer\Api\Data\CustomerInterface::class
- );
- $serviceInfo = [
- 'rest' => [
- 'resourcePath' => self::RESOURCE_PATH . "/{$customerData[Customer::ID]}",
- 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
- ],
- 'soap' => [
- 'service' => self::SERVICE_NAME,
- 'serviceVersion' => self::SERVICE_VERSION,
- 'operation' => self::SERVICE_NAME . 'Save',
- ],
- ];
- $newCustomerDataObject = $this->dataObjectProcessor->buildOutputDataArray(
- $newCustomerDataObject,
- \Magento\Customer\Api\Data\CustomerInterface::class
- );
- $requestData = ['customer' => $newCustomerDataObject];
- $response = $this->_webApiCall($serviceInfo, $requestData);
- $this->assertTrue($response !== null);
- //Verify if the customer is updated
- $existingCustomerDataObject = $this->_getCustomerData($customerData[Customer::ID]);
- $this->assertEquals($lastName . "Updated", $existingCustomerDataObject->getLastname());
- }
- /**
- * Verify expected behavior when the website id is not set
- */
- public function testUpdateCustomerNoWebsiteId()
- {
- $customerData = $this->customerHelper->createSampleCustomer();
- $existingCustomerDataObject = $this->_getCustomerData($customerData[Customer::ID]);
- $lastName = $existingCustomerDataObject->getLastname();
- $customerData[Customer::LASTNAME] = $lastName . 'Updated';
- $newCustomerDataObject = $this->customerDataFactory->create();
- $this->dataObjectHelper->populateWithArray(
- $newCustomerDataObject,
- $customerData,
- \Magento\Customer\Api\Data\CustomerInterface::class
- );
- $serviceInfo = [
- 'rest' => [
- 'resourcePath' => self::RESOURCE_PATH . "/{$customerData[Customer::ID]}",
- 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
- ],
- 'soap' => [
- 'service' => self::SERVICE_NAME,
- 'serviceVersion' => self::SERVICE_VERSION,
- 'operation' => self::SERVICE_NAME . 'Save',
- ],
- ];
- $newCustomerDataObject = $this->dataObjectProcessor->buildOutputDataArray(
- $newCustomerDataObject,
- \Magento\Customer\Api\Data\CustomerInterface::class
- );
- unset($newCustomerDataObject['website_id']);
- $requestData = ['customer' => $newCustomerDataObject];
- $expectedMessage = '"Associate to Website" is a required value.';
- try {
- $this->_webApiCall($serviceInfo, $requestData);
- $this->fail("Expected exception.");
- } catch (\SoapFault $e) {
- $this->assertContains(
- $expectedMessage,
- $e->getMessage(),
- "SoapFault does not contain expected message."
- );
- } catch (\Exception $e) {
- $errorObj = $this->customerHelper->processRestExceptionResult($e);
- $this->assertEquals($expectedMessage, $errorObj['message'], 'Invalid message: "' . $e->getMessage() . '"');
- $this->assertEquals(HTTPExceptionCodes::HTTP_BAD_REQUEST, $e->getCode());
- }
- }
- public function testUpdateCustomerException()
- {
- $customerData = $this->_createCustomer();
- $existingCustomerDataObject = $this->_getCustomerData($customerData[Customer::ID]);
- $lastName = $existingCustomerDataObject->getLastname();
- //Set non-existent id = -1
- $customerData[Customer::LASTNAME] = $lastName . 'Updated';
- $customerData[Customer::ID] = -1;
- $newCustomerDataObject = $this->customerDataFactory->create();
- $this->dataObjectHelper->populateWithArray(
- $newCustomerDataObject,
- $customerData,
- \Magento\Customer\Api\Data\CustomerInterface::class
- );
- $serviceInfo = [
- 'rest' => [
- 'resourcePath' => self::RESOURCE_PATH . "/-1",
- 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
- ],
- 'soap' => [
- 'service' => self::SERVICE_NAME,
- 'serviceVersion' => self::SERVICE_VERSION,
- 'operation' => self::SERVICE_NAME . 'Save',
- ],
- ];
- $newCustomerDataObject = $this->dataObjectProcessor->buildOutputDataArray(
- $newCustomerDataObject,
- \Magento\Customer\Api\Data\CustomerInterface::class
- );
- $requestData = ['customer' => $newCustomerDataObject];
- $expectedMessage = 'No such entity with %fieldName = %fieldValue';
- try {
- $this->_webApiCall($serviceInfo, $requestData);
- $this->fail("Expected exception.");
- } catch (\SoapFault $e) {
- $this->assertContains(
- $expectedMessage,
- $e->getMessage(),
- "SoapFault does not contain expected message."
- );
- } catch (\Exception $e) {
- $errorObj = $this->processRestExceptionResult($e);
- $this->assertEquals($expectedMessage, $errorObj['message']);
- $this->assertEquals(['fieldName' => 'customerId', 'fieldValue' => -1], $errorObj['parameters']);
- $this->assertEquals(HTTPExceptionCodes::HTTP_NOT_FOUND, $e->getCode());
- }
- }
- /**
- * Test creating a customer with absent required address fields
- */
- public function testCreateCustomerWithoutAddressRequiresException()
- {
- $customerDataArray = $this->dataObjectProcessor->buildOutputDataArray(
- $this->customerHelper->createSampleCustomerDataObject(),
- \Magento\Customer\Api\Data\CustomerInterface::class
- );
- foreach ($customerDataArray[Customer::KEY_ADDRESSES] as & $address) {
- $address[Address::FIRSTNAME] = null;
- }
- $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 . 'Save',
- ],
- ];
- $requestData = ['customer' => $customerDataArray];
- 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(
- __(
- '"%fieldName" is required. Enter and try again.',
- ['fieldName' => Address::FIRSTNAME]
- )
- );
- $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' => '"%fieldName" is required. Enter and try again.',
- 'parameters' => ['fieldName' => Address::FIRSTNAME],
- ];
- $this->assertEquals($expectedExceptionData, $exceptionData);
- }
- }
- try {
- $this->customerRegistry->retrieveByEmail(
- $customerDataArray[Customer::EMAIL],
- $customerDataArray[Customer::WEBSITE_ID]
- );
- $this->fail('An expected NoSuchEntityException was not thrown.');
- } catch (NoSuchEntityException $e) {
- $exception = NoSuchEntityException::doubleField(
- 'email',
- $customerDataArray[Customer::EMAIL],
- 'websiteId',
- $customerDataArray[Customer::WEBSITE_ID]
- );
- $this->assertEquals(
- $exception->getMessage(),
- $e->getMessage(),
- 'Exception message does not match expected message.'
- );
- }
- }
- /**
- * Test with a single filter
- */
- public function testSearchCustomers()
- {
- $builder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
- $customerData = $this->_createCustomer();
- $filter = $builder
- ->setField(Customer::EMAIL)
- ->setValue($customerData[Customer::EMAIL])
- ->create();
- $this->searchCriteriaBuilder->addFilters([$filter]);
- $searchData = $this->dataObjectProcessor->buildOutputDataArray(
- $this->searchCriteriaBuilder->create(),
- \Magento\Framework\Api\SearchCriteriaInterface::class
- );
- $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' => self::SERVICE_NAME . 'getList',
- ],
- ];
- $searchResults = $this->_webApiCall($serviceInfo, $requestData);
- $this->assertEquals(1, $searchResults['total_count']);
- $this->assertEquals($customerData[Customer::ID], $searchResults['items'][0][Customer::ID]);
- }
- /**
- * Test with a single filter using GET
- */
- public function testSearchCustomersUsingGET()
- {
- $this->_markTestAsRestOnly('SOAP test is covered in testSearchCustomers');
- $builder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
- $customerData = $this->_createCustomer();
- $filter = $builder
- ->setField(Customer::EMAIL)
- ->setValue($customerData[Customer::EMAIL])
- ->create();
- $this->searchCriteriaBuilder->addFilters([$filter]);
- $searchData = $this->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,
- ],
- ];
- $searchResults = $this->_webApiCall($serviceInfo);
- $this->assertEquals(1, $searchResults['total_count']);
- $this->assertEquals($customerData[Customer::ID], $searchResults['items'][0][Customer::ID]);
- }
- /**
- * Test with empty GET based filter
- */
- public function testSearchCustomersUsingGETEmptyFilter()
- {
- $this->_markTestAsRestOnly('Soap clients explicitly check for required fields based on WSDL.');
- $serviceInfo = [
- 'rest' => [
- 'resourcePath' => self::RESOURCE_PATH . '/search',
- 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
- ],
- ];
- try {
- $this->_webApiCall($serviceInfo);
- } catch (\Exception $e) {
- $this->assertEquals(HTTPExceptionCodes::HTTP_BAD_REQUEST, $e->getCode());
- $exceptionData = $this->processRestExceptionResult($e);
- $expectedExceptionData = [
- 'message' => '"%fieldName" is required. Enter and try again.',
- 'parameters' => [
- 'fieldName' => 'searchCriteria'
- ],
- ];
- $this->assertEquals($expectedExceptionData, $exceptionData);
- }
- }
- /**
- * Test using multiple filters
- */
- public function testSearchCustomersMultipleFiltersWithSort()
- {
- $builder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
- $customerData1 = $this->_createCustomer();
- $customerData2 = $this->_createCustomer();
- $filter1 = $builder->setField(Customer::EMAIL)
- ->setValue($customerData1[Customer::EMAIL])
- ->create();
- $filter2 = $builder->setField(Customer::EMAIL)
- ->setValue($customerData2[Customer::EMAIL])
- ->create();
- $filter3 = $builder->setField(Customer::LASTNAME)
- ->setValue($customerData1[Customer::LASTNAME])
- ->create();
- $this->searchCriteriaBuilder->addFilters([$filter1, $filter2]);
- $this->searchCriteriaBuilder->addFilters([$filter3]);
- /**@var \Magento\Framework\Api\SortOrderBuilder $sortOrderBuilder */
- $sortOrderBuilder = Bootstrap::getObjectManager()->create(
- \Magento\Framework\Api\SortOrderBuilder::class
- );
- /** @var SortOrder $sortOrder */
- $sortOrder = $sortOrderBuilder->setField(Customer::EMAIL)->setDirection(SortOrder::SORT_ASC)->create();
- $this->searchCriteriaBuilder->setSortOrders([$sortOrder]);
- $searchCriteria = $this->searchCriteriaBuilder->create();
- $searchData = $searchCriteria->__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' => self::SERVICE_NAME . 'getList',
- ],
- ];
- $searchResults = $this->_webApiCall($serviceInfo, $requestData);
- $this->assertEquals(2, $searchResults['total_count']);
- $this->assertEquals($customerData1[Customer::ID], $searchResults['items'][0][Customer::ID]);
- $this->assertEquals($customerData2[Customer::ID], $searchResults['items'][1][Customer::ID]);
- }
- /**
- * Test using multiple filters using GET
- */
- public function testSearchCustomersMultipleFiltersWithSortUsingGET()
- {
- $this->_markTestAsRestOnly('SOAP test is covered in testSearchCustomers');
- $builder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
- $customerData1 = $this->_createCustomer();
- $customerData2 = $this->_createCustomer();
- $filter1 = $builder->setField(Customer::EMAIL)
- ->setValue($customerData1[Customer::EMAIL])
- ->create();
- $filter2 = $builder->setField(Customer::EMAIL)
- ->setValue($customerData2[Customer::EMAIL])
- ->create();
- $filter3 = $builder->setField(Customer::LASTNAME)
- ->setValue($customerData1[Customer::LASTNAME])
- ->create();
- $this->searchCriteriaBuilder->addFilters([$filter1, $filter2]);
- $this->searchCriteriaBuilder->addFilters([$filter3]);
- $this->searchCriteriaBuilder->setSortOrders([Customer::EMAIL => SortOrder::SORT_ASC]);
- $searchCriteria = $this->searchCriteriaBuilder->create();
- $searchData = $searchCriteria->__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,
- ],
- ];
- $searchResults = $this->_webApiCall($serviceInfo);
- $this->assertEquals(2, $searchResults['total_count']);
- $this->assertEquals($customerData1[Customer::ID], $searchResults['items'][0][Customer::ID]);
- $this->assertEquals($customerData2[Customer::ID], $searchResults['items'][1][Customer::ID]);
- }
- /**
- * Test and verify multiple filters using And-ed non-existent filter value
- */
- public function testSearchCustomersNonExistentMultipleFilters()
- {
- $builder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
- $customerData1 = $this->_createCustomer();
- $customerData2 = $this->_createCustomer();
- $filter1 = $filter1 = $builder->setField(Customer::EMAIL)
- ->setValue($customerData1[Customer::EMAIL])
- ->create();
- $filter2 = $builder->setField(Customer::EMAIL)
- ->setValue($customerData2[Customer::EMAIL])
- ->create();
- $filter3 = $builder->setField(Customer::LASTNAME)
- ->setValue('INVALID')
- ->create();
- $this->searchCriteriaBuilder->addFilters([$filter1, $filter2]);
- $this->searchCriteriaBuilder->addFilters([$filter3]);
- $searchCriteria = $this->searchCriteriaBuilder->create();
- $searchData = $searchCriteria->__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' => self::SERVICE_NAME . 'getList',
- ],
- ];
- $searchResults = $this->_webApiCall($serviceInfo, $requestData);
- $this->assertEquals(0, $searchResults['total_count'], 'No results expected for non-existent email.');
- }
- /**
- * Test and verify multiple filters using And-ed non-existent filter value using GET
- */
- public function testSearchCustomersNonExistentMultipleFiltersGET()
- {
- $this->_markTestAsRestOnly('SOAP test is covered in testSearchCustomers');
- $builder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
- $customerData1 = $this->_createCustomer();
- $customerData2 = $this->_createCustomer();
- $filter1 = $filter1 = $builder->setField(Customer::EMAIL)
- ->setValue($customerData1[Customer::EMAIL])
- ->create();
- $filter2 = $builder->setField(Customer::EMAIL)
- ->setValue($customerData2[Customer::EMAIL])
- ->create();
- $filter3 = $builder->setField(Customer::LASTNAME)
- ->setValue('INVALID')
- ->create();
- $this->searchCriteriaBuilder->addFilters([$filter1, $filter2]);
- $this->searchCriteriaBuilder->addFilters([$filter3]);
- $searchCriteria = $this->searchCriteriaBuilder->create();
- $searchData = $searchCriteria->__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,
- ],
- ];
- $searchResults = $this->_webApiCall($serviceInfo, $requestData);
- $this->assertEquals(0, $searchResults['total_count'], 'No results expected for non-existent email.');
- }
- /**
- * Test using multiple filters
- */
- public function testSearchCustomersMultipleFilterGroups()
- {
- $customerData1 = $this->_createCustomer();
- /** @var \Magento\Framework\Api\FilterBuilder $builder */
- $builder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
- $filter1 = $builder->setField(Customer::EMAIL)
- ->setValue($customerData1[Customer::EMAIL])
- ->create();
- $filter2 = $builder->setField(Customer::MIDDLENAME)
- ->setValue($customerData1[Customer::MIDDLENAME])
- ->create();
- $filter3 = $builder->setField(Customer::MIDDLENAME)
- ->setValue('invalid')
- ->create();
- $filter4 = $builder->setField(Customer::LASTNAME)
- ->setValue($customerData1[Customer::LASTNAME])
- ->create();
- $this->searchCriteriaBuilder->addFilters([$filter1]);
- $this->searchCriteriaBuilder->addFilters([$filter2, $filter3]);
- $this->searchCriteriaBuilder->addFilters([$filter4]);
- $searchCriteria = $this->searchCriteriaBuilder->setCurrentPage(1)->setPageSize(10)->create();
- $searchData = $searchCriteria->__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' => self::SERVICE_NAME . 'getList',
- ],
- ];
- $searchResults = $this->_webApiCall($serviceInfo, $requestData);
- $this->assertEquals(1, $searchResults['total_count']);
- $this->assertEquals($customerData1[Customer::ID], $searchResults['items'][0][Customer::ID]);
- // Add an invalid And-ed data with multiple groups to yield no result
- $filter4 = $builder->setField(Customer::LASTNAME)
- ->setValue('invalid')
- ->create();
- $this->searchCriteriaBuilder->addFilters([$filter1]);
- $this->searchCriteriaBuilder->addFilters([$filter2, $filter3]);
- $this->searchCriteriaBuilder->addFilters([$filter4]);
- $searchCriteria = $this->searchCriteriaBuilder->create();
- $searchData = $searchCriteria->__toArray();
- $requestData = ['searchCriteria' => $searchData];
- $serviceInfo['rest']['resourcePath'] = self::RESOURCE_PATH . '/search' . '?' . http_build_query($requestData);
- $searchResults = $this->_webApiCall($serviceInfo, $requestData);
- $this->assertEquals(0, $searchResults['total_count']);
- }
- /**
- * Retrieve customer data by Id
- *
- * @param int $customerId
- * @return \Magento\Customer\Api\Data\CustomerInterface
- */
- protected function _getCustomerData($customerId)
- {
- $customerData = $this->customerRepository->getById($customerId);
- $this->customerRegistry->remove($customerId);
- return $customerData;
- }
- /**
- * @return array|bool|float|int|string
- */
- protected function _createCustomer()
- {
- $customerData = $this->customerHelper->createSampleCustomer();
- $this->currentCustomerId[] = $customerData['id'];
- return $customerData;
- }
- }
|