Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CustomerRepositoryTest.php
Go to the documentation of this file.
1 <?php
7 namespace Magento\Customer\Api;
8 
14 use Magento\TestFramework\Helper\Customer as CustomerHelper;
16 use Magento\Framework\Webapi\Exception as HTTPExceptionCodes;
18 
25 {
26  const SERVICE_VERSION = 'V1';
27  const SERVICE_NAME = 'customerCustomerRepositoryV1';
28  const RESOURCE_PATH = '/V1/customers';
29  const RESOURCE_PATH_CUSTOMER_TOKEN = "/V1/integration/customer/token";
30 
34  const ATTRIBUTE_CODE = 'attribute_code';
35  const ATTRIBUTE_VALUE = 'attribute_value';
36 
40  private $customerRepository;
41 
45  private $dataObjectHelper;
46 
50  private $customerDataFactory;
51 
55  private $searchCriteriaBuilder;
56 
60  private $sortOrderBuilder;
61 
65  private $filterGroupBuilder;
66 
70  private $customerRegistry;
71 
75  private $customerHelper;
76 
80  private $currentCustomerId;
81 
85  private $dataObjectProcessor;
86 
90  public function setUp()
91  {
92  $this->customerRegistry = Bootstrap::getObjectManager()->get(
93  \Magento\Customer\Model\CustomerRegistry::class
94  );
95 
96  $this->customerRepository = Bootstrap::getObjectManager()->get(
97  \Magento\Customer\Api\CustomerRepositoryInterface::class,
98  ['customerRegistry' => $this->customerRegistry]
99  );
100  $this->dataObjectHelper = Bootstrap::getObjectManager()->create(
101  \Magento\Framework\Api\DataObjectHelper::class
102  );
103  $this->customerDataFactory = Bootstrap::getObjectManager()->create(
104  \Magento\Customer\Api\Data\CustomerInterfaceFactory::class
105  );
106  $this->searchCriteriaBuilder = Bootstrap::getObjectManager()->create(
107  \Magento\Framework\Api\SearchCriteriaBuilder::class
108  );
109  $this->sortOrderBuilder = Bootstrap::getObjectManager()->create(
110  \Magento\Framework\Api\SortOrderBuilder::class
111  );
112  $this->filterGroupBuilder = Bootstrap::getObjectManager()->create(
113  \Magento\Framework\Api\Search\FilterGroupBuilder::class
114  );
115  $this->customerHelper = new CustomerHelper();
116 
117  $this->dataObjectProcessor = Bootstrap::getObjectManager()->create(
118  \Magento\Framework\Reflection\DataObjectProcessor::class
119  );
120  }
121 
122  public function tearDown()
123  {
124  if (!empty($this->currentCustomerId)) {
125  foreach ($this->currentCustomerId as $customerId) {
126  $serviceInfo = [
127  'rest' => [
128  'resourcePath' => self::RESOURCE_PATH . '/' . $customerId,
130  ],
131  'soap' => [
132  'service' => self::SERVICE_NAME,
133  'serviceVersion' => self::SERVICE_VERSION,
134  'operation' => self::SERVICE_NAME . 'DeleteById',
135  ],
136  ];
137 
138  $response = $this->_webApiCall($serviceInfo, ['customerId' => $customerId]);
139 
140  $this->assertTrue($response);
141  }
142  }
143  $this->customerRepository = null;
144  }
145 
152  public function testInvalidCustomerUpdate()
153  {
154  $this->_markTestAsRestOnly();
155 
156  //Create first customer and retrieve customer token.
157  $firstCustomerData = $this->_createCustomer();
158 
159  // get customer ID token
161  //$customerTokenService = $this->objectManager->create(CustomerTokenServiceInterface::class);
162  $customerTokenService = Bootstrap::getObjectManager()->create(
163  \Magento\Integration\Api\CustomerTokenServiceInterface::class
164  );
165  $token = $customerTokenService->createCustomerAccessToken($firstCustomerData[Customer::EMAIL], 'test@123');
166 
167  //Create second customer and update lastname.
168  $customerData = $this->_createCustomer();
169  $existingCustomerDataObject = $this->_getCustomerData($customerData[Customer::ID]);
170  $lastName = $existingCustomerDataObject->getLastname();
171  $customerData[Customer::LASTNAME] = $lastName . 'Updated';
172  $newCustomerDataObject = $this->customerDataFactory->create();
173  $this->dataObjectHelper->populateWithArray(
174  $newCustomerDataObject,
176  \Magento\Customer\Api\Data\CustomerInterface::class
177  );
178 
179  $serviceInfo = [
180  'rest' => [
181  'resourcePath' => self::RESOURCE_PATH . "/{$customerData[Customer::ID]}",
183  'token' => $token,
184  ]
185  ];
186 
187  $newCustomerDataObject = $this->dataObjectProcessor->buildOutputDataArray(
188  $newCustomerDataObject,
189  \Magento\Customer\Api\Data\CustomerInterface::class
190  );
191  $requestData = ['customer' => $newCustomerDataObject];
192  $this->_webApiCall($serviceInfo, $requestData);
193  }
194 
195  public function testDeleteCustomer()
196  {
197  $customerData = $this->_createCustomer();
198  $this->currentCustomerId = [];
199 
200  $serviceInfo = [
201  'rest' => [
202  'resourcePath' => self::RESOURCE_PATH . '/' . $customerData[Customer::ID],
204  ],
205  'soap' => [
206  'service' => self::SERVICE_NAME,
207  'serviceVersion' => self::SERVICE_VERSION,
208  'operation' => self::SERVICE_NAME . 'DeleteById',
209  ],
210  ];
211  if (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) {
212  $response = $this->_webApiCall($serviceInfo, ['customerId' => $customerData['id']]);
213  } else {
214  $response = $this->_webApiCall($serviceInfo);
215  }
216 
217  $this->assertTrue($response);
218 
219  //Verify if the customer is deleted
220  $this->expectException(\Magento\Framework\Exception\NoSuchEntityException::class);
221  $this->expectExceptionMessage(sprintf("No such entity with customerId = %s", $customerData[Customer::ID]));
222  $this->_getCustomerData($customerData[Customer::ID]);
223  }
224 
226  {
227  $invalidId = -1;
228  $serviceInfo = [
229  'rest' => [
230  'resourcePath' => self::RESOURCE_PATH . '/' . $invalidId,
232  ],
233  'soap' => [
234  'service' => self::SERVICE_NAME,
235  'serviceVersion' => self::SERVICE_VERSION,
236  'operation' => self::SERVICE_NAME . 'DeleteById',
237  ],
238  ];
239 
240  $expectedMessage = 'No such entity with %fieldName = %fieldValue';
241 
242  try {
243  $this->_webApiCall($serviceInfo, ['customerId' => $invalidId]);
244 
245  $this->fail("Expected exception");
246  } catch (\SoapFault $e) {
247  $this->assertContains(
248  $expectedMessage,
249  $e->getMessage(),
250  "SoapFault does not contain expected message."
251  );
252  } catch (\Exception $e) {
253  $errorObj = $this->processRestExceptionResult($e);
254  $this->assertEquals($expectedMessage, $errorObj['message']);
255  $this->assertEquals(['fieldName' => 'customerId', 'fieldValue' => $invalidId], $errorObj['parameters']);
256  $this->assertEquals(HTTPExceptionCodes::HTTP_NOT_FOUND, $e->getCode());
257  }
258  }
259 
260  public function testUpdateCustomer()
261  {
262  $customerData = $this->_createCustomer();
263  $existingCustomerDataObject = $this->_getCustomerData($customerData[Customer::ID]);
264  $lastName = $existingCustomerDataObject->getLastname();
265  $customerData[Customer::LASTNAME] = $lastName . 'Updated';
266  $newCustomerDataObject = $this->customerDataFactory->create();
267  $this->dataObjectHelper->populateWithArray(
268  $newCustomerDataObject,
270  \Magento\Customer\Api\Data\CustomerInterface::class
271  );
272 
273  $serviceInfo = [
274  'rest' => [
275  'resourcePath' => self::RESOURCE_PATH . "/{$customerData[Customer::ID]}",
277  ],
278  'soap' => [
279  'service' => self::SERVICE_NAME,
280  'serviceVersion' => self::SERVICE_VERSION,
281  'operation' => self::SERVICE_NAME . 'Save',
282  ],
283  ];
284  $newCustomerDataObject = $this->dataObjectProcessor->buildOutputDataArray(
285  $newCustomerDataObject,
286  \Magento\Customer\Api\Data\CustomerInterface::class
287  );
288  $requestData = ['customer' => $newCustomerDataObject];
289  $response = $this->_webApiCall($serviceInfo, $requestData);
290  $this->assertTrue($response !== null);
291 
292  //Verify if the customer is updated
293  $existingCustomerDataObject = $this->_getCustomerData($customerData[Customer::ID]);
294  $this->assertEquals($lastName . "Updated", $existingCustomerDataObject->getLastname());
295  }
296 
301  {
302  $customerData = $this->customerHelper->createSampleCustomer();
303  $existingCustomerDataObject = $this->_getCustomerData($customerData[Customer::ID]);
304  $lastName = $existingCustomerDataObject->getLastname();
305  $customerData[Customer::LASTNAME] = $lastName . 'Updated';
306  $newCustomerDataObject = $this->customerDataFactory->create();
307  $this->dataObjectHelper->populateWithArray(
308  $newCustomerDataObject,
310  \Magento\Customer\Api\Data\CustomerInterface::class
311  );
312 
313  $serviceInfo = [
314  'rest' => [
315  'resourcePath' => self::RESOURCE_PATH . "/{$customerData[Customer::ID]}",
317  ],
318  'soap' => [
319  'service' => self::SERVICE_NAME,
320  'serviceVersion' => self::SERVICE_VERSION,
321  'operation' => self::SERVICE_NAME . 'Save',
322  ],
323  ];
324  $newCustomerDataObject = $this->dataObjectProcessor->buildOutputDataArray(
325  $newCustomerDataObject,
326  \Magento\Customer\Api\Data\CustomerInterface::class
327  );
328  unset($newCustomerDataObject['website_id']);
329  $requestData = ['customer' => $newCustomerDataObject];
330 
331  $expectedMessage = '"Associate to Website" is a required value.';
332  try {
333  $this->_webApiCall($serviceInfo, $requestData);
334  $this->fail("Expected exception.");
335  } catch (\SoapFault $e) {
336  $this->assertContains(
337  $expectedMessage,
338  $e->getMessage(),
339  "SoapFault does not contain expected message."
340  );
341  } catch (\Exception $e) {
342  $errorObj = $this->customerHelper->processRestExceptionResult($e);
343  $this->assertEquals($expectedMessage, $errorObj['message'], 'Invalid message: "' . $e->getMessage() . '"');
344  $this->assertEquals(HTTPExceptionCodes::HTTP_BAD_REQUEST, $e->getCode());
345  }
346  }
347 
348  public function testUpdateCustomerException()
349  {
350  $customerData = $this->_createCustomer();
351  $existingCustomerDataObject = $this->_getCustomerData($customerData[Customer::ID]);
352  $lastName = $existingCustomerDataObject->getLastname();
353 
354  //Set non-existent id = -1
355  $customerData[Customer::LASTNAME] = $lastName . 'Updated';
356  $customerData[Customer::ID] = -1;
357  $newCustomerDataObject = $this->customerDataFactory->create();
358  $this->dataObjectHelper->populateWithArray(
359  $newCustomerDataObject,
361  \Magento\Customer\Api\Data\CustomerInterface::class
362  );
363 
364  $serviceInfo = [
365  'rest' => [
366  'resourcePath' => self::RESOURCE_PATH . "/-1",
368  ],
369  'soap' => [
370  'service' => self::SERVICE_NAME,
371  'serviceVersion' => self::SERVICE_VERSION,
372  'operation' => self::SERVICE_NAME . 'Save',
373  ],
374  ];
375  $newCustomerDataObject = $this->dataObjectProcessor->buildOutputDataArray(
376  $newCustomerDataObject,
377  \Magento\Customer\Api\Data\CustomerInterface::class
378  );
379  $requestData = ['customer' => $newCustomerDataObject];
380 
381  $expectedMessage = 'No such entity with %fieldName = %fieldValue';
382 
383  try {
384  $this->_webApiCall($serviceInfo, $requestData);
385  $this->fail("Expected exception.");
386  } catch (\SoapFault $e) {
387  $this->assertContains(
388  $expectedMessage,
389  $e->getMessage(),
390  "SoapFault does not contain expected message."
391  );
392  } catch (\Exception $e) {
393  $errorObj = $this->processRestExceptionResult($e);
394  $this->assertEquals($expectedMessage, $errorObj['message']);
395  $this->assertEquals(['fieldName' => 'customerId', 'fieldValue' => -1], $errorObj['parameters']);
396  $this->assertEquals(HTTPExceptionCodes::HTTP_NOT_FOUND, $e->getCode());
397  }
398  }
399 
404  {
405  $customerDataArray = $this->dataObjectProcessor->buildOutputDataArray(
406  $this->customerHelper->createSampleCustomerDataObject(),
407  \Magento\Customer\Api\Data\CustomerInterface::class
408  );
409 
410  foreach ($customerDataArray[Customer::KEY_ADDRESSES] as & $address) {
411  $address[Address::FIRSTNAME] = null;
412  }
413 
414  $serviceInfo = [
415  'rest' => [
416  'resourcePath' => self::RESOURCE_PATH,
418  ],
419  'soap' => [
420  'service' => self::SERVICE_NAME,
421  'serviceVersion' => self::SERVICE_VERSION,
422  'operation' => self::SERVICE_NAME . 'Save',
423  ],
424  ];
425  $requestData = ['customer' => $customerDataArray];
426  try {
427  $this->_webApiCall($serviceInfo, $requestData);
428  $this->fail('Expected exception did not occur.');
429  } catch (\Exception $e) {
430  if (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) {
431  $expectedException = new InputException();
432  $expectedException->addError(
433  __(
434  '"%fieldName" is required. Enter and try again.',
435  ['fieldName' => Address::FIRSTNAME]
436  )
437  );
438  $this->assertInstanceOf('SoapFault', $e);
439  $this->checkSoapFault(
440  $e,
441  $expectedException->getRawMessage(),
442  'env:Sender',
443  $expectedException->getParameters() // expected error parameters
444  );
445  } else {
446  $this->assertEquals(HTTPExceptionCodes::HTTP_BAD_REQUEST, $e->getCode());
447  $exceptionData = $this->processRestExceptionResult($e);
448  $expectedExceptionData = [
449  'message' => '"%fieldName" is required. Enter and try again.',
450  'parameters' => ['fieldName' => Address::FIRSTNAME],
451  ];
452  $this->assertEquals($expectedExceptionData, $exceptionData);
453  }
454  }
455 
456  try {
457  $this->customerRegistry->retrieveByEmail(
458  $customerDataArray[Customer::EMAIL],
459  $customerDataArray[Customer::WEBSITE_ID]
460  );
461  $this->fail('An expected NoSuchEntityException was not thrown.');
462  } catch (NoSuchEntityException $e) {
464  'email',
465  $customerDataArray[Customer::EMAIL],
466  'websiteId',
467  $customerDataArray[Customer::WEBSITE_ID]
468  );
469  $this->assertEquals(
470  $exception->getMessage(),
471  $e->getMessage(),
472  'Exception message does not match expected message.'
473  );
474  }
475  }
476 
480  public function testSearchCustomers()
481  {
482  $builder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
483  $customerData = $this->_createCustomer();
484  $filter = $builder
485  ->setField(Customer::EMAIL)
486  ->setValue($customerData[Customer::EMAIL])
487  ->create();
488  $this->searchCriteriaBuilder->addFilters([$filter]);
489  $searchData = $this->dataObjectProcessor->buildOutputDataArray(
490  $this->searchCriteriaBuilder->create(),
491  \Magento\Framework\Api\SearchCriteriaInterface::class
492  );
493  $requestData = ['searchCriteria' => $searchData];
494  $serviceInfo = [
495  'rest' => [
496  'resourcePath' => self::RESOURCE_PATH . '/search' . '?' . http_build_query($requestData),
498  ],
499  'soap' => [
500  'service' => self::SERVICE_NAME,
501  'serviceVersion' => self::SERVICE_VERSION,
502  'operation' => self::SERVICE_NAME . 'getList',
503  ],
504  ];
505  $searchResults = $this->_webApiCall($serviceInfo, $requestData);
506  $this->assertEquals(1, $searchResults['total_count']);
507  $this->assertEquals($customerData[Customer::ID], $searchResults['items'][0][Customer::ID]);
508  }
509 
513  public function testSearchCustomersUsingGET()
514  {
515  $this->_markTestAsRestOnly('SOAP test is covered in testSearchCustomers');
516  $builder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
517  $customerData = $this->_createCustomer();
518  $filter = $builder
519  ->setField(Customer::EMAIL)
520  ->setValue($customerData[Customer::EMAIL])
521  ->create();
522  $this->searchCriteriaBuilder->addFilters([$filter]);
523 
524  $searchData = $this->searchCriteriaBuilder->create()->__toArray();
525  $requestData = ['searchCriteria' => $searchData];
526  $searchQueryString = http_build_query($requestData);
527  $serviceInfo = [
528  'rest' => [
529  'resourcePath' => self::RESOURCE_PATH . '/search?' . $searchQueryString,
531  ],
532  ];
533  $searchResults = $this->_webApiCall($serviceInfo);
534  $this->assertEquals(1, $searchResults['total_count']);
535  $this->assertEquals($customerData[Customer::ID], $searchResults['items'][0][Customer::ID]);
536  }
537 
542  {
543  $this->_markTestAsRestOnly('Soap clients explicitly check for required fields based on WSDL.');
544  $serviceInfo = [
545  'rest' => [
546  'resourcePath' => self::RESOURCE_PATH . '/search',
548  ],
549  ];
550  try {
551  $this->_webApiCall($serviceInfo);
552  } catch (\Exception $e) {
553  $this->assertEquals(HTTPExceptionCodes::HTTP_BAD_REQUEST, $e->getCode());
554  $exceptionData = $this->processRestExceptionResult($e);
555  $expectedExceptionData = [
556  'message' => '"%fieldName" is required. Enter and try again.',
557  'parameters' => [
558  'fieldName' => 'searchCriteria'
559  ],
560  ];
561  $this->assertEquals($expectedExceptionData, $exceptionData);
562  }
563  }
564 
568  public function testSearchCustomersMultipleFiltersWithSort()
569  {
570  $builder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
571  $customerData1 = $this->_createCustomer();
572  $customerData2 = $this->_createCustomer();
573  $filter1 = $builder->setField(Customer::EMAIL)
574  ->setValue($customerData1[Customer::EMAIL])
575  ->create();
576  $filter2 = $builder->setField(Customer::EMAIL)
577  ->setValue($customerData2[Customer::EMAIL])
578  ->create();
579  $filter3 = $builder->setField(Customer::LASTNAME)
580  ->setValue($customerData1[Customer::LASTNAME])
581  ->create();
582  $this->searchCriteriaBuilder->addFilters([$filter1, $filter2]);
583  $this->searchCriteriaBuilder->addFilters([$filter3]);
584 
586  $sortOrderBuilder = Bootstrap::getObjectManager()->create(
587  \Magento\Framework\Api\SortOrderBuilder::class
588  );
590  $sortOrder = $sortOrderBuilder->setField(Customer::EMAIL)->setDirection(SortOrder::SORT_ASC)->create();
591  $this->searchCriteriaBuilder->setSortOrders([$sortOrder]);
592 
593  $searchCriteria = $this->searchCriteriaBuilder->create();
594  $searchData = $searchCriteria->__toArray();
595  $requestData = ['searchCriteria' => $searchData];
596  $serviceInfo = [
597  'rest' => [
598  'resourcePath' => self::RESOURCE_PATH . '/search' . '?' . http_build_query($requestData),
600  ],
601  'soap' => [
602  'service' => self::SERVICE_NAME,
603  'serviceVersion' => self::SERVICE_VERSION,
604  'operation' => self::SERVICE_NAME . 'getList',
605  ],
606  ];
607  $searchResults = $this->_webApiCall($serviceInfo, $requestData);
608  $this->assertEquals(2, $searchResults['total_count']);
609  $this->assertEquals($customerData1[Customer::ID], $searchResults['items'][0][Customer::ID]);
610  $this->assertEquals($customerData2[Customer::ID], $searchResults['items'][1][Customer::ID]);
611  }
612 
617  {
618  $this->_markTestAsRestOnly('SOAP test is covered in testSearchCustomers');
619  $builder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
620  $customerData1 = $this->_createCustomer();
621  $customerData2 = $this->_createCustomer();
622  $filter1 = $builder->setField(Customer::EMAIL)
623  ->setValue($customerData1[Customer::EMAIL])
624  ->create();
625  $filter2 = $builder->setField(Customer::EMAIL)
626  ->setValue($customerData2[Customer::EMAIL])
627  ->create();
628  $filter3 = $builder->setField(Customer::LASTNAME)
629  ->setValue($customerData1[Customer::LASTNAME])
630  ->create();
631  $this->searchCriteriaBuilder->addFilters([$filter1, $filter2]);
632  $this->searchCriteriaBuilder->addFilters([$filter3]);
633  $this->searchCriteriaBuilder->setSortOrders([Customer::EMAIL => SortOrder::SORT_ASC]);
634  $searchCriteria = $this->searchCriteriaBuilder->create();
635  $searchData = $searchCriteria->__toArray();
636  $requestData = ['searchCriteria' => $searchData];
637  $searchQueryString = http_build_query($requestData);
638  $serviceInfo = [
639  'rest' => [
640  'resourcePath' => self::RESOURCE_PATH . '/search?' . $searchQueryString,
642  ],
643  ];
644  $searchResults = $this->_webApiCall($serviceInfo);
645  $this->assertEquals(2, $searchResults['total_count']);
646  $this->assertEquals($customerData1[Customer::ID], $searchResults['items'][0][Customer::ID]);
647  $this->assertEquals($customerData2[Customer::ID], $searchResults['items'][1][Customer::ID]);
648  }
649 
654  {
655  $builder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
656  $customerData1 = $this->_createCustomer();
657  $customerData2 = $this->_createCustomer();
658  $filter1 = $filter1 = $builder->setField(Customer::EMAIL)
659  ->setValue($customerData1[Customer::EMAIL])
660  ->create();
661  $filter2 = $builder->setField(Customer::EMAIL)
662  ->setValue($customerData2[Customer::EMAIL])
663  ->create();
664  $filter3 = $builder->setField(Customer::LASTNAME)
665  ->setValue('INVALID')
666  ->create();
667  $this->searchCriteriaBuilder->addFilters([$filter1, $filter2]);
668  $this->searchCriteriaBuilder->addFilters([$filter3]);
669  $searchCriteria = $this->searchCriteriaBuilder->create();
670  $searchData = $searchCriteria->__toArray();
671  $requestData = ['searchCriteria' => $searchData];
672  $serviceInfo = [
673  'rest' => [
674  'resourcePath' => self::RESOURCE_PATH . '/search' . '?' . http_build_query($requestData),
676  ],
677  'soap' => [
678  'service' => self::SERVICE_NAME,
679  'serviceVersion' => self::SERVICE_VERSION,
680  'operation' => self::SERVICE_NAME . 'getList',
681  ],
682  ];
683  $searchResults = $this->_webApiCall($serviceInfo, $requestData);
684  $this->assertEquals(0, $searchResults['total_count'], 'No results expected for non-existent email.');
685  }
686 
691  {
692  $this->_markTestAsRestOnly('SOAP test is covered in testSearchCustomers');
693  $builder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
694  $customerData1 = $this->_createCustomer();
695  $customerData2 = $this->_createCustomer();
696  $filter1 = $filter1 = $builder->setField(Customer::EMAIL)
697  ->setValue($customerData1[Customer::EMAIL])
698  ->create();
699  $filter2 = $builder->setField(Customer::EMAIL)
700  ->setValue($customerData2[Customer::EMAIL])
701  ->create();
702  $filter3 = $builder->setField(Customer::LASTNAME)
703  ->setValue('INVALID')
704  ->create();
705  $this->searchCriteriaBuilder->addFilters([$filter1, $filter2]);
706  $this->searchCriteriaBuilder->addFilters([$filter3]);
707  $searchCriteria = $this->searchCriteriaBuilder->create();
708  $searchData = $searchCriteria->__toArray();
709  $requestData = ['searchCriteria' => $searchData];
710  $searchQueryString = http_build_query($requestData);
711  $serviceInfo = [
712  'rest' => [
713  'resourcePath' => self::RESOURCE_PATH . '/search?' . $searchQueryString,
715  ],
716  ];
717  $searchResults = $this->_webApiCall($serviceInfo, $requestData);
718  $this->assertEquals(0, $searchResults['total_count'], 'No results expected for non-existent email.');
719  }
720 
724  public function testSearchCustomersMultipleFilterGroups()
725  {
726  $customerData1 = $this->_createCustomer();
727 
729  $builder = Bootstrap::getObjectManager()->create(\Magento\Framework\Api\FilterBuilder::class);
730  $filter1 = $builder->setField(Customer::EMAIL)
731  ->setValue($customerData1[Customer::EMAIL])
732  ->create();
733  $filter2 = $builder->setField(Customer::MIDDLENAME)
734  ->setValue($customerData1[Customer::MIDDLENAME])
735  ->create();
736  $filter3 = $builder->setField(Customer::MIDDLENAME)
737  ->setValue('invalid')
738  ->create();
739  $filter4 = $builder->setField(Customer::LASTNAME)
740  ->setValue($customerData1[Customer::LASTNAME])
741  ->create();
742 
743  $this->searchCriteriaBuilder->addFilters([$filter1]);
744  $this->searchCriteriaBuilder->addFilters([$filter2, $filter3]);
745  $this->searchCriteriaBuilder->addFilters([$filter4]);
746  $searchCriteria = $this->searchCriteriaBuilder->setCurrentPage(1)->setPageSize(10)->create();
747  $searchData = $searchCriteria->__toArray();
748  $requestData = ['searchCriteria' => $searchData];
749  $serviceInfo = [
750  'rest' => [
751  'resourcePath' => self::RESOURCE_PATH . '/search' . '?' . http_build_query($requestData),
753  ],
754  'soap' => [
755  'service' => self::SERVICE_NAME,
756  'serviceVersion' => self::SERVICE_VERSION,
757  'operation' => self::SERVICE_NAME . 'getList',
758  ],
759  ];
760  $searchResults = $this->_webApiCall($serviceInfo, $requestData);
761  $this->assertEquals(1, $searchResults['total_count']);
762  $this->assertEquals($customerData1[Customer::ID], $searchResults['items'][0][Customer::ID]);
763 
764  // Add an invalid And-ed data with multiple groups to yield no result
765  $filter4 = $builder->setField(Customer::LASTNAME)
766  ->setValue('invalid')
767  ->create();
768 
769  $this->searchCriteriaBuilder->addFilters([$filter1]);
770  $this->searchCriteriaBuilder->addFilters([$filter2, $filter3]);
771  $this->searchCriteriaBuilder->addFilters([$filter4]);
772  $searchCriteria = $this->searchCriteriaBuilder->create();
773  $searchData = $searchCriteria->__toArray();
774  $requestData = ['searchCriteria' => $searchData];
775  $serviceInfo['rest']['resourcePath'] = self::RESOURCE_PATH . '/search' . '?' . http_build_query($requestData);
776  $searchResults = $this->_webApiCall($serviceInfo, $requestData);
777  $this->assertEquals(0, $searchResults['total_count']);
778  }
779 
786  protected function _getCustomerData($customerId)
787  {
788  $customerData = $this->customerRepository->getById($customerId);
789  $this->customerRegistry->remove($customerId);
790  return $customerData;
791  }
792 
796  protected function _createCustomer()
797  {
798  $customerData = $this->customerHelper->createSampleCustomer();
799  $this->currentCustomerId[] = $customerData['id'];
800  return $customerData;
801  }
802 }
$response
Definition: 404.php:11
$customerData
static doubleField($fieldName, $fieldValue, $secondFieldName, $secondFieldValue)
_webApiCall( $serviceInfo, $arguments=[], $webApiAdapterCode=null, $storeCode=null, $integration=null)
__()
Definition: __.php:13
$searchCriteria
$address
Definition: customer.php:38
checkSoapFault( $soapFault, $expectedMessage, $expectedFaultCode, $expectedErrorParams=[], $expectedWrappedErrors=[], $traceString=null)