22 private $accountManagement;
25 private $customerRepository;
28 private $objectManager;
31 private $customerFactory;
34 private $addressFactory;
37 private $regionFactory;
51 protected function setUp()
54 $this->customerRepository =
55 $this->objectManager->create(\
Magento\
Customer\Api\CustomerRepositoryInterface::class);
56 $this->customerFactory =
57 $this->objectManager->create(\
Magento\
Customer\Api\Data\CustomerInterfaceFactory::class);
58 $this->addressFactory = $this->objectManager->create(\
Magento\
Customer\Api\Data\AddressInterfaceFactory::class);
59 $this->regionFactory = $this->objectManager->create(\
Magento\
Customer\Api\Data\RegionInterfaceFactory::class);
60 $this->accountManagement =
61 $this->objectManager->create(\
Magento\
Customer\Api\AccountManagementInterface::class);
62 $this->converter = $this->objectManager->create(\
Magento\Framework\Api\ExtensibleDataObjectConverter::class);
63 $this->dataObjectHelper = $this->objectManager->create(\
Magento\Framework\Api\DataObjectHelper::class);
64 $this->encryptor = $this->objectManager->create(\
Magento\Framework\Encryption\EncryptorInterface::class);
65 $this->customerRegistry = $this->objectManager->create(\
Magento\
Customer\Model\CustomerRegistry::class);
69 $cache->remove(
'extension_attributes_config');
72 protected function tearDown()
88 $firstname =
'Tester';
91 $newCustomerEntity = $this->customerFactory->create()
94 ->setFirstname($firstname)
95 ->setLastname($lastname)
97 $customer = $this->customerRepository->save($newCustomerEntity);
99 $newCustomerFirstname =
'New First Name';
100 $updatedCustomer = $this->customerFactory->create();
101 $this->dataObjectHelper->mergeDataObjects(
106 $updatedCustomer->setFirstname($newCustomerFirstname);
107 $this->customerRepository->save($updatedCustomer);
110 $this->assertEquals($newCustomerFirstname,
$customer->getFirstname());
111 $this->assertEquals($lastname,
$customer->getLastname());
121 $firstname =
'Tester';
122 $lastname =
'McTest';
125 $newCustomerEntity = $this->customerFactory->create()
128 ->setFirstname($firstname)
129 ->setLastname($lastname)
131 $savedCustomer = $this->customerRepository->save($newCustomerEntity);
132 $this->assertNotNull($savedCustomer->getId());
133 $this->assertEquals(
$email, $savedCustomer->getEmail());
134 $this->assertEquals(
$storeId, $savedCustomer->getStoreId());
135 $this->assertEquals($firstname, $savedCustomer->getFirstname());
136 $this->assertEquals($lastname, $savedCustomer->getLastname());
137 $this->assertEquals(
$groupId, $savedCustomer->getGroupId());
138 $this->assertTrue(!$savedCustomer->getSuffix());
150 $existingCustomerId = 1;
152 $firstName =
'Firstsave';
153 $lastName =
'Lastsave';
154 $newPassword =
'newPassword123';
155 $newPasswordHash = $this->encryptor->getHash($newPassword,
true);
156 $customerBefore = $this->customerRepository->getById($existingCustomerId);
160 'firstname' => $firstName,
161 'lastname' => $lastName,
162 'created_in' =>
'Admin',
163 'password' =>
'notsaved',
164 'default_billing' => $defaultBilling,
165 'default_shipping' => $defaultShipping
167 $customerDetails = $this->customerFactory->create();
168 $this->dataObjectHelper->populateWithArray(
173 $this->customerRepository->save($customerDetails, $newPasswordHash);
174 $customerAfter = $this->customerRepository->getById($existingCustomerId);
175 $this->assertEquals(
$email, $customerAfter->getEmail());
176 $this->assertEquals($firstName, $customerAfter->getFirstname());
177 $this->assertEquals($lastName, $customerAfter->getLastname());
178 $this->assertEquals($defaultBilling, $customerAfter->getDefaultBilling());
179 $this->assertEquals($defaultShipping, $customerAfter->getDefaultShipping());
180 $this->expectedDefaultShippingsInCustomerModelAttributes(
185 $this->assertEquals(
'Admin', $customerAfter->getCreatedIn());
186 $this->accountManagement->authenticate($customerAfter->getEmail(), $newPassword);
187 $attributesBefore = $this->converter->toFlatArray(
192 $attributesAfter = $this->converter->toFlatArray(
198 unset($attributesBefore[
'updated_at']);
199 unset($attributesAfter[
'updated_at']);
200 $inBeforeOnly = array_diff_assoc($attributesBefore, $attributesAfter);
201 $inAfterOnly = array_diff_assoc($attributesAfter, $attributesBefore);
202 $expectedInBefore = [
207 foreach ($expectedInBefore as $key) {
208 $this->assertContains($key, array_keys($inBeforeOnly));
210 $this->assertContains(
'created_in', array_keys($inAfterOnly));
211 $this->assertContains(
'firstname', array_keys($inAfterOnly));
212 $this->assertContains(
'lastname', array_keys($inAfterOnly));
213 $this->assertContains(
'email', array_keys($inAfterOnly));
214 $this->assertNotContains(
'password_hash', array_keys($inAfterOnly));
228 $customerDetails =
$customer->__toArray();
231 $newAddress = array_merge(
$addresses[0]->__toArray(), [
'city' => $city]);
232 $newAddressDataObject = $this->addressFactory->create();
233 $this->dataObjectHelper->populateWithArray(
234 $newAddressDataObject,
238 $newAddressDataObject->setRegion(
$addresses[0]->getRegion());
239 $newCustomerEntity = $this->customerFactory->create();
240 $this->dataObjectHelper->populateWithArray(
246 ->setAddresses([$newAddressDataObject,
$addresses[1]]);
247 $this->customerRepository->save($newCustomerEntity);
248 $newCustomer = $this->customerRepository->get(
$email);
249 $this->assertEquals(2, count($newCustomer->getAddresses()));
251 foreach ($newCustomer->getAddresses() as $newAddress) {
252 if ($newAddress->getId() == $addressId) {
253 $this->assertEquals($city, $newAddress->getCity());
267 $customerDetails =
$customer->__toArray();
268 $newCustomerEntity = $this->customerFactory->create();
269 $this->dataObjectHelper->populateWithArray(
274 $newCustomerEntity->setId(
$customer->getId())
275 ->setAddresses(
null);
276 $this->customerRepository->save($newCustomerEntity);
278 $newCustomerDetails = $this->customerRepository->getById(
$customerId);
280 $this->assertEquals(2, count($newCustomerDetails->getAddresses()));
292 $customerDetails =
$customer->__toArray();
293 $newCustomerEntity = $this->customerFactory->create();
294 $this->dataObjectHelper->populateWithArray(
299 $newCustomerEntity->setId(
$customer->getId())
301 $this->customerRepository->save($newCustomerEntity);
303 $newCustomerDetails = $this->customerRepository->getById(
$customerId);
305 $this->assertEquals(0, count($newCustomerDetails->getAddresses()));
318 public function testSearchCustomers(
$filters, $filterGroup, $expectedResult)
322 ->create(\
Magento\Framework\Api\SearchCriteriaBuilder::class);
324 $searchBuilder->addFilters([$filter]);
326 if ($filterGroup !==
null) {
327 $searchBuilder->addFilters($filterGroup);
330 $searchResults = $this->customerRepository->getList($searchBuilder->create());
332 $this->assertEquals(count($expectedResult), $searchResults->getTotalCount());
334 foreach ($searchResults->getItems() as
$item) {
335 $this->assertEquals($expectedResult[
$item->getId()][
'email'],
$item->getEmail());
336 $this->assertEquals($expectedResult[
$item->getId()][
'firstname'],
$item->getFirstname());
337 unset($expectedResult[
$item->getId()]);
347 public function testSearchCustomersOrder()
351 $searchBuilder = $objectManager->create(\
Magento\Framework\Api\SearchCriteriaBuilder::class);
354 $filterBuilder = $objectManager->create(\
Magento\Framework\Api\FilterBuilder::class);
355 $firstnameFilter = $filterBuilder->setField(
'firstname')
356 ->setConditionType(
'like')
359 $searchBuilder->addFilters([$firstnameFilter]);
361 $sortOrderBuilder = $objectManager->create(\
Magento\Framework\Api\SortOrderBuilder::class);
362 $sortOrder = $sortOrderBuilder
363 ->setField(
'lastname')
366 $searchBuilder->addSortOrder($sortOrder);
367 $searchResults = $this->customerRepository->getList($searchBuilder->create());
368 $this->assertEquals(3, $searchResults->getTotalCount());
369 $this->assertEquals(
'Lastname', $searchResults->getItems()[0]->getLastname());
370 $this->assertEquals(
'Lastname2', $searchResults->getItems()[1]->getLastname());
371 $this->assertEquals(
'Lastname3', $searchResults->getItems()[2]->getLastname());
374 $sortOrder = $sortOrderBuilder
375 ->setField(
'lastname')
378 $searchBuilder->addSortOrder($sortOrder);
379 $searchResults = $this->customerRepository->getList($searchBuilder->create());
380 $this->assertEquals(
'Lastname3', $searchResults->getItems()[0]->getLastname());
381 $this->assertEquals(
'Lastname2', $searchResults->getItems()[1]->getLastname());
382 $this->assertEquals(
'Lastname', $searchResults->getItems()[2]->getLastname());
393 $customer = $this->customerRepository->get($fixtureCustomerEmail);
394 $this->customerRepository->delete(
$customer);
396 $this->expectException(\
Magento\Framework\Exception\NoSuchEntityException::class);
397 $this->expectExceptionMessage(
'No such entity with email = [email protected], websiteId = 1');
398 $this->customerRepository->get($fixtureCustomerEmail);
409 $fixtureCustomerId = 1;
410 $this->customerRepository->deleteById($fixtureCustomerId);
412 $this->expectException(\
Magento\Framework\Exception\NoSuchEntityException::class);
413 $this->expectExceptionMessage(
'No such entity with email = [email protected], websiteId = 1');
414 $this->customerRepository->get($fixtureCustomerEmail);
425 'Customer remove default shipping and billing' => [
429 'Customer update default shipping and billing' => [
440 'Customer with specific email' => [
445 'Customer with specific first name' => [
446 [$builder->setField(
'firstname')->setValue(
'Firstname2')->create()],
450 'Customers with either email' => [
453 $builder->setField(
'firstname')->setValue(
'Firstname')->create(),
454 $builder->setField(
'firstname')->setValue(
'Firstname2')->create()
461 'Customers created since' => [
463 $builder->setField(
'created_at')->setValue(
'2011-02-28 15:52:26')
464 ->setConditionType(
'gt')->create(),
482 protected function expectedDefaultShippingsInCustomerModelAttributes(
496 'default_billing customer attribute did not updated' 501 'default_shipping customer attribute did not updated' 516 "firstname" =>
"1111",
517 "lastname" =>
"Boss",
518 "middlename" =>
null,
522 $customerEntity = $this->customerFactory->create([
'data' =>
$customerData]);
525 $oldDefaultBilling =
$customer->getDefaultBilling();
526 $oldDefaultShipping =
$customer->getDefaultShipping();
528 $savedCustomer = $this->customerRepository->save($customerEntity);
531 $savedCustomer->getDefaultBilling(),
533 'Default billing shoud not be overridden' 537 $savedCustomer->getDefaultShipping(),
539 'Default shipping shoud not be overridden'
searchCustomersDataProvider()
testUpdateDefaultShippingAndDefaultBillingTest()
testUpdateCustomerDeleteAllAddressesWithEmptyArray()
updateCustomerDataProvider()
testUpdateCustomerPreserveAllAddresses()
testUpdateCustomerAddress()
testUpdateCustomer($defaultBilling, $defaultShipping)
testCreateCustomerNewThenUpdateFirstName()
static getObjectManager()