![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/dev/tests/integration/testsuite/Magento/Customer/Api/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Customer\Api; use Magento\Framework\Exception\InputException; use Magento\Framework\Exception\NoSuchEntityException; /** * Integration test for service layer \Magento\Customer\Model\ResourceModel\AddressRepository * * @SuppressWarnings(PHPMD.TooManyMethods) * @SuppressWarnings(PHPMD.ExcessivePublicCount) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class AddressRepositoryTest extends \PHPUnit\Framework\TestCase { /** @var AddressRepositoryInterface */ private $repository; /** @var \Magento\Framework\ObjectManagerInterface */ private $_objectManager; /** @var \Magento\Customer\Model\Data\Address[] */ private $_expectedAddresses; /** @var \Magento\Customer\Api\Data\AddressInterfaceFactory */ private $_addressFactory; /** @var \Magento\Framework\Api\DataObjectHelper */ protected $dataObjectHelper; protected function setUp(): void { $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $this->repository = $this->_objectManager->create(\Magento\Customer\Api\AddressRepositoryInterface::class); $this->_addressFactory = $this->_objectManager->create( \Magento\Customer\Api\Data\AddressInterfaceFactory::class ); $this->dataObjectHelper = $this->_objectManager->create(\Magento\Framework\Api\DataObjectHelper::class); $regionFactory = $this->_objectManager->create(\Magento\Customer\Api\Data\RegionInterfaceFactory::class); $region = $regionFactory->create(); $region->setRegionCode('AL') ->setRegion('Alabama') ->setRegionId(1); $address = $this->_addressFactory->create() ->setId('1') ->setCountryId('US') ->setCustomerId(1) ->setPostcode('75477') ->setRegion($region) ->setStreet(['Green str, 67']) ->setTelephone('3468676') ->setCity('CityM') ->setFirstname('John') ->setLastname('Smith') ->setCompany('CompanyName') ->setRegionId(1); /* XXX: would it be better to have a clear method for this? */ $address2 = $this->_addressFactory->create() ->setId('2') ->setCountryId('US') ->setCustomerId(1) ->setPostcode('47676') ->setRegion($region) ->setStreet(['Black str, 48']) ->setCity('CityX') ->setTelephone('3234676') ->setFirstname('John') ->setLastname('Smith') ->setRegionId(1); $this->_expectedAddresses = [$address, $address2]; } protected function tearDown(): void { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); /** @var \Magento\Customer\Model\CustomerRegistry $customerRegistry */ $customerRegistry = $objectManager->get(\Magento\Customer\Model\CustomerRegistry::class); $customerRegistry->remove(1); } /** * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoDataFixture Magento/Customer/_files/customer_address.php * @magentoDataFixture Magento/Customer/_files/customer_two_addresses.php * @magentoAppIsolation enabled */ public function testSaveAddressChanges() { $address = $this->repository->getById(2); $address->setRegion($address->getRegion()); // change phone # $address->setTelephone('555' . $address->getTelephone()); $address = $this->repository->save($address); $this->assertEquals(2, $address->getId()); $savedAddress = $this->repository->getById(2); $this->assertNotEquals($this->_expectedAddresses[1]->getTelephone(), $savedAddress->getTelephone()); } /** * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoDataFixture Magento/Customer/_files/customer_address.php * @magentoDataFixture Magento/Customer/_files/customer_two_addresses.php * @magentoAppIsolation enabled */ public function testSaveAddressesIdSetButNotAlreadyExisting() { $this->expectException(\Magento\Framework\Exception\NoSuchEntityException::class); $this->expectExceptionMessage('No such entity with addressId = 4200'); $proposedAddress = $this->_createSecondAddress()->setId(4200); $this->repository->save($proposedAddress); } /** * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoDataFixture Magento/Customer/_files/customer_address.php * @magentoDataFixture Magento/Customer/_files/customer_two_addresses.php * @magentoAppIsolation enabled */ public function testGetAddressById() { $addressId = 2; $address = $this->repository->getById($addressId); $this->assertEquals($this->_expectedAddresses[1], $address); } /** * @magentoDataFixture Magento/Customer/_files/customer.php */ public function testGetAddressByIdBadAddressId() { $this->expectException(\Magento\Framework\Exception\NoSuchEntityException::class); $this->expectExceptionMessage('No such entity with addressId = 12345'); $this->repository->getById(12345); } /** * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoDataFixture Magento/Customer/_files/customer_address.php * @magentoAppIsolation enabled */ public function testSaveNewAddress() { $proposedAddress = $this->_createSecondAddress()->setCustomerId(1); $returnedAddress = $this->repository->save($proposedAddress); $this->assertNotNull($returnedAddress->getId()); $savedAddress = $this->repository->getById($returnedAddress->getId()); $expectedNewAddress = $this->_expectedAddresses[1]; $expectedNewAddress->setId($savedAddress->getId()); $expectedNewAddress->setRegion($this->_expectedAddresses[1]->getRegion()); $this->assertEquals($expectedNewAddress->getExtensionAttributes(), $savedAddress->getExtensionAttributes()); $this->assertEquals( $expectedNewAddress->getRegion()->getExtensionAttributes(), $savedAddress->getRegion()->getExtensionAttributes() ); $this->assertEquals($expectedNewAddress, $savedAddress); } /** * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoDataFixture Magento/Customer/_files/customer_address.php * @magentoAppIsolation enabled */ public function testSaveNewAddressWithAttributes() { $proposedAddress = $this->_createFirstAddress() ->setCustomAttribute('firstname', 'Jane') ->setCustomAttribute('id', 4200) ->setCustomAttribute('weird', 'something_strange_with_hair') ->setId(null) ->setCustomerId(1); $returnedAddress = $this->repository->save($proposedAddress); $savedAddress = $this->repository->getById($returnedAddress->getId()); $this->assertNotEquals($proposedAddress, $savedAddress); $this->assertArrayNotHasKey( 'weird', $savedAddress->getCustomAttributes(), 'Only valid attributes should be available.' ); } /** * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoDataFixture Magento/Customer/_files/customer_address.php * @magentoAppIsolation enabled */ public function testSaveNewInvalidAddress() { $address = $this->_createFirstAddress() ->setCustomAttribute('firstname', null) ->setId(null) ->setFirstname(null) ->setLastname(null) ->setCustomerId(1) ->setRegionId($invalidRegion = 10354); try { $this->repository->save($address); } catch (InputException $exception) { $this->assertEquals('One or more input exceptions have occurred.', $exception->getMessage()); $errors = $exception->getErrors(); $this->assertCount(3, $errors); $this->assertEquals('"firstname" is required. Enter and try again.', $errors[0]->getLogMessage()); $this->assertEquals('"lastname" is required. Enter and try again.', $errors[1]->getLogMessage()); $this->assertEquals( __( 'Invalid value of "%value" provided for the %fieldName field.', ['fieldName' => 'regionId', 'value' => $invalidRegion] ), $errors[2]->getLogMessage() ); } $address->setCountryId($invalidCountry = 'invalid_id'); try { $this->repository->save($address); } catch (InputException $exception) { $this->assertEquals( 'One or more input exceptions have occurred.', $exception->getMessage() ); $errors = $exception->getErrors(); $this->assertCount(3, $errors); $this->assertEquals( '"firstname" is required. Enter and try again.', $errors[0]->getLogMessage() ); $this->assertEquals( '"lastname" is required. Enter and try again.', $errors[1]->getLogMessage() ); $this->assertEquals( __( 'Invalid value of "%value" provided for the %fieldName field.', ['fieldName' => 'countryId', 'value' => $invalidCountry] ), $errors[2]->getLogMessage() ); } } public function testSaveAddressesCustomerIdNotExist() { $proposedAddress = $this->_createSecondAddress()->setCustomerId(4200); try { $this->repository->save($proposedAddress); $this->fail('Expected exception not thrown'); } catch (NoSuchEntityException $nsee) { $this->assertEquals('No such entity with customerId = 4200', $nsee->getMessage()); } } public function testSaveAddressesCustomerIdInvalid() { $proposedAddress = $this->_createSecondAddress()->setCustomerId('this_is_not_a_valid_id'); try { $this->repository->save($proposedAddress); $this->fail('Expected exception not thrown'); } catch (NoSuchEntityException $nsee) { $this->assertEquals('No such entity with customerId = this_is_not_a_valid_id', $nsee->getMessage()); } } /** * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoDataFixture Magento/Customer/_files/customer_address.php */ public function testDeleteAddress() { $addressId = 1; // See that customer already has an address with expected addressId $addressDataObject = $this->repository->getById($addressId); $this->assertEquals($addressDataObject->getId(), $addressId); // Delete the address from the customer $this->repository->delete($addressDataObject); // See that address is deleted try { $addressDataObject = $this->repository->getById($addressId); $this->fail("Expected NoSuchEntityException not caught"); } catch (NoSuchEntityException $exception) { $this->assertEquals('No such entity with addressId = 1', $exception->getMessage()); } } /** * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoDataFixture Magento/Customer/_files/customer_address.php */ public function testDeleteAddressById() { $addressId = 1; // See that customer already has an address with expected addressId $addressDataObject = $this->repository->getById($addressId); $this->assertEquals($addressDataObject->getId(), $addressId); // Delete the address from the customer $this->repository->deleteById($addressId); // See that address is deleted try { $addressDataObject = $this->repository->getById($addressId); $this->fail("Expected NoSuchEntityException not caught"); } catch (NoSuchEntityException $exception) { $this->assertEquals('No such entity with addressId = 1', $exception->getMessage()); } } /** * @magentoDataFixture Magento/Customer/_files/customer.php */ public function testDeleteAddressFromCustomerBadAddressId() { try { $this->repository->deleteById(12345); $this->fail("Expected NoSuchEntityException not caught"); } catch (NoSuchEntityException $exception) { $this->assertEquals('No such entity with addressId = 12345', $exception->getMessage()); } } /** * @param \Magento\Framework\Api\Filter[] $filters * @param \Magento\Framework\Api\Filter[] $filterGroup * @param array $expectedResult array of expected results indexed by ID * * @dataProvider searchAddressDataProvider * * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoDataFixture Magento/Customer/_files/customer_two_addresses.php * @magentoAppIsolation enabled */ public function testSearchAddresses($filters, $filterGroup, $expectedResult) { /** @var \Magento\Framework\Api\SearchCriteriaBuilder $searchBuilder */ $searchBuilder = $this->_objectManager->create(\Magento\Framework\Api\SearchCriteriaBuilder::class); foreach ($filters as $filter) { $searchBuilder->addFilters([$filter]); } if ($filterGroup !== null) { $searchBuilder->addFilters($filterGroup); } $searchResults = $this->repository->getList($searchBuilder->create()); $this->assertEquals(count($expectedResult), $searchResults->getTotalCount()); /** @var \Magento\Customer\Api\Data\AddressInterface $item */ foreach ($searchResults->getItems() as $item) { $this->assertEquals( $expectedResult[$item->getId()]['city'], $item->getCity() ); $this->assertEquals( $expectedResult[$item->getId()]['postcode'], $item->getPostcode() ); $this->assertEquals( $expectedResult[$item->getId()]['firstname'], $item->getFirstname() ); unset($expectedResult[$item->getId()]); } } public function searchAddressDataProvider() { /** * @var \Magento\Framework\Api\FilterBuilder $filterBuilder */ $filterBuilder = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create(\Magento\Framework\Api\FilterBuilder::class); return [ 'Address with postcode 75477' => [ [$filterBuilder->setField('postcode')->setValue('75477')->create()], null, [1 => ['city' => 'CityM', 'postcode' => 75477, 'firstname' => 'John']], ], 'Address with city CityM' => [ [$filterBuilder->setField('city')->setValue('CityM')->create()], null, [1 => ['city' => 'CityM', 'postcode' => 75477, 'firstname' => 'John']], ], 'Addresses with firstname John' => [ [$filterBuilder->setField('firstname')->setValue('John')->create()], null, [ 1 => ['city' => 'CityM', 'postcode' => 75477, 'firstname' => 'John'], 2 => ['city' => 'CityX', 'postcode' => 47676, 'firstname' => 'John'] ], ], 'Addresses with postcode of either 75477 or 47676' => [ [], [ $filterBuilder->setField('postcode')->setValue('75477')->create(), $filterBuilder->setField('postcode')->setValue('47676')->create() ], [ 1 => ['city' => 'CityM', 'postcode' => 75477, 'firstname' => 'John'], 2 => ['city' => 'CityX', 'postcode' => 47676, 'firstname' => 'John'] ], ], 'Addresses with postcode greater than 0' => [ [$filterBuilder->setField('postcode')->setValue('0')->setConditionType('gt')->create()], null, [ 1 => ['city' => 'CityM', 'postcode' => 75477, 'firstname' => 'John'], 2 => ['city' => 'CityX', 'postcode' => 47676, 'firstname' => 'John'] ], ] ]; } /** * Helper function that returns an Address Data Object that matches the data from customer_address fixture * * @return \Magento\Customer\Api\Data\AddressInterface */ private function _createFirstAddress() { $address = $this->_addressFactory->create(); $this->dataObjectHelper->mergeDataObjects( \Magento\Customer\Api\Data\AddressInterface::class, $address, $this->_expectedAddresses[0] ); $address->setId(null); $address->setRegion($this->_expectedAddresses[0]->getRegion()); return $address; } /** * Helper function that returns an Address Data Object that matches the data from customer_two_address fixture * * @return \Magento\Customer\Api\Data\AddressInterface */ private function _createSecondAddress() { $address = $this->_addressFactory->create(); $this->dataObjectHelper->mergeDataObjects( \Magento\Customer\Api\Data\AddressInterface::class, $address, $this->_expectedAddresses[1] ); $address->setId(null); $address->setRegion($this->_expectedAddresses[1]->getRegion()); return $address; } }