123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Customer\Test\Unit\Model\ResourceModel;
- use Magento\Customer\Api\CustomerMetadataInterface;
- use Magento\Customer\Model\Customer\NotificationStorage;
- use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- * @SuppressWarnings(PHPMD.TooManyFields)
- */
- class CustomerRepositoryTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \Magento\Customer\Model\CustomerFactory|\PHPUnit_Framework_MockObject_MockObject
- */
- private $customerFactory;
- /**
- * @var \Magento\Customer\Model\Data\CustomerSecureFactory|\PHPUnit_Framework_MockObject_MockObject
- */
- private $customerSecureFactory;
- /**
- * @var \Magento\Customer\Model\CustomerRegistry|\PHPUnit_Framework_MockObject_MockObject
- */
- private $customerRegistry;
- /**
- * @var \Magento\Customer\Model\ResourceModel\AddressRepository|\PHPUnit_Framework_MockObject_MockObject
- */
- private $addressRepository;
- /**
- * @var \Magento\Customer\Model\ResourceModel\Customer|\PHPUnit_Framework_MockObject_MockObject
- */
- private $customerResourceModel;
- /**
- * @var \Magento\Customer\Api\CustomerMetadataInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $customerMetadata;
- /**
- * @var \Magento\Customer\Api\Data\CustomerSearchResultsInterfaceFactory|\PHPUnit_Framework_MockObject_MockObject
- */
- private $searchResultsFactory;
- /**
- * @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $eventManager;
- /**
- * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $storeManager;
- /**
- * @var \Magento\Framework\Api\ExtensibleDataObjectConverter|\PHPUnit_Framework_MockObject_MockObject
- */
- private $extensibleDataObjectConverter;
- /**
- * @var \Magento\Framework\Api\DataObjectHelper|\PHPUnit_Framework_MockObject_MockObject
- */
- private $dataObjectHelper;
- /**
- * @var \Magento\Framework\Api\ImageProcessorInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $imageProcessor;
- /**
- * @var \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $extensionAttributesJoinProcessor;
- /**
- * @var \Magento\Customer\Api\Data\CustomerInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $customer;
- /**
- * @var CollectionProcessorInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $collectionProcessorMock;
- /**
- * @var NotificationStorage|\PHPUnit_Framework_MockObject_MockObject
- */
- private $notificationStorage;
- /**
- * @var \Magento\Customer\Model\ResourceModel\CustomerRepository
- */
- private $model;
- protected function setUp()
- {
- $this->customerResourceModel =
- $this->createMock(\Magento\Customer\Model\ResourceModel\Customer::class);
- $this->customerRegistry = $this->createMock(\Magento\Customer\Model\CustomerRegistry::class);
- $this->dataObjectHelper = $this->createMock(\Magento\Framework\Api\DataObjectHelper::class);
- $this->customerFactory =
- $this->createPartialMock(\Magento\Customer\Model\CustomerFactory::class, ['create']);
- $this->customerSecureFactory = $this->createPartialMock(
- \Magento\Customer\Model\Data\CustomerSecureFactory::class,
- ['create']
- );
- $this->addressRepository = $this->createMock(\Magento\Customer\Model\ResourceModel\AddressRepository::class);
- $this->customerMetadata = $this->getMockForAbstractClass(
- \Magento\Customer\Api\CustomerMetadataInterface::class,
- [],
- '',
- false
- );
- $this->searchResultsFactory = $this->createPartialMock(
- \Magento\Customer\Api\Data\CustomerSearchResultsInterfaceFactory::class,
- ['create']
- );
- $this->eventManager = $this->getMockForAbstractClass(
- \Magento\Framework\Event\ManagerInterface::class,
- [],
- '',
- false
- );
- $this->storeManager = $this->getMockForAbstractClass(
- \Magento\Store\Model\StoreManagerInterface::class,
- [],
- '',
- false
- );
- $this->extensibleDataObjectConverter = $this->createMock(
- \Magento\Framework\Api\ExtensibleDataObjectConverter::class
- );
- $this->imageProcessor = $this->getMockForAbstractClass(
- \Magento\Framework\Api\ImageProcessorInterface::class,
- [],
- '',
- false
- );
- $this->extensionAttributesJoinProcessor = $this->getMockForAbstractClass(
- \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface::class,
- [],
- '',
- false
- );
- $this->customer = $this->getMockForAbstractClass(
- \Magento\Customer\Api\Data\CustomerInterface::class,
- [],
- '',
- true,
- true,
- true,
- [
- '__toArray'
- ]
- );
- $this->collectionProcessorMock = $this->getMockBuilder(CollectionProcessorInterface::class)
- ->getMock();
- $this->notificationStorage = $this->getMockBuilder(NotificationStorage::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->model = new \Magento\Customer\Model\ResourceModel\CustomerRepository(
- $this->customerFactory,
- $this->customerSecureFactory,
- $this->customerRegistry,
- $this->addressRepository,
- $this->customerResourceModel,
- $this->customerMetadata,
- $this->searchResultsFactory,
- $this->eventManager,
- $this->storeManager,
- $this->extensibleDataObjectConverter,
- $this->dataObjectHelper,
- $this->imageProcessor,
- $this->extensionAttributesJoinProcessor,
- $this->collectionProcessorMock,
- $this->notificationStorage
- );
- }
- /**
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function testSave()
- {
- $customerId = 1;
- $storeId = 2;
- $customerModel = $this->createPartialMock(\Magento\Customer\Model\Customer::class, [
- 'getId',
- 'setId',
- 'setStoreId',
- 'getStoreId',
- 'getAttributeSetId',
- 'setAttributeSetId',
- 'setRpToken',
- 'setRpTokenCreatedAt',
- 'getDataModel',
- 'setPasswordHash',
- 'setFailuresNum',
- 'setFirstFailure',
- 'setLockExpires',
- 'save',
- ]);
- $origCustomer = $this->customer;
- $customerAttributesMetaData = $this->getMockForAbstractClass(
- \Magento\Framework\Api\CustomAttributesDataInterface::class,
- [],
- '',
- false,
- false,
- true,
- [
- 'getId',
- 'getEmail',
- 'getWebsiteId',
- 'getAddresses',
- 'setAddresses'
- ]
- );
- $customerSecureData = $this->createPartialMock(\Magento\Customer\Model\Data\CustomerSecure::class, [
- 'getRpToken',
- 'getRpTokenCreatedAt',
- 'getPasswordHash',
- 'getFailuresNum',
- 'getFirstFailure',
- 'getLockExpires',
- ]);
- $this->customer->expects($this->atLeastOnce())
- ->method('getId')
- ->willReturn($customerId);
- $this->customer->expects($this->atLeastOnce())
- ->method('__toArray')
- ->willReturn([]);
- $this->customerRegistry->expects($this->atLeastOnce())
- ->method('retrieve')
- ->with($customerId)
- ->willReturn($customerModel);
- $customerModel->expects($this->atLeastOnce())
- ->method('getDataModel')
- ->willReturn($this->customer);
- $this->imageProcessor->expects($this->once())
- ->method('save')
- ->with($this->customer, CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER, $this->customer)
- ->willReturn($customerAttributesMetaData);
- $this->customerRegistry->expects($this->atLeastOnce())
- ->method("remove")
- ->with($customerId);
- $this->extensibleDataObjectConverter->expects($this->once())
- ->method('toNestedArray')
- ->with($customerAttributesMetaData, [], \Magento\Customer\Api\Data\CustomerInterface::class)
- ->willReturn(['customerData']);
- $this->customerFactory->expects($this->once())
- ->method('create')
- ->with(['data' => ['customerData']])
- ->willReturn($customerModel);
- $customerModel->expects($this->once())
- ->method('getStoreId')
- ->willReturn(null);
- $store = $this->createMock(\Magento\Store\Model\Store::class);
- $store->expects($this->once())
- ->method('getId')
- ->willReturn($storeId);
- $this->storeManager
- ->expects($this->once())
- ->method('getStore')
- ->willReturn($store);
- $customerModel->expects($this->once())
- ->method('setStoreId')
- ->with($storeId);
- $customerModel->expects($this->once())
- ->method('setId')
- ->with($customerId);
- $customerAttributesMetaData->expects($this->atLeastOnce())
- ->method('getId')
- ->willReturn($customerId);
- $this->customerRegistry->expects($this->once())
- ->method('retrieveSecureData')
- ->with($customerId)
- ->willReturn($customerSecureData);
- $customerSecureData->expects($this->once())
- ->method('getRpToken')
- ->willReturn('rpToken');
- $customerSecureData->expects($this->once())
- ->method('getRpTokenCreatedAt')
- ->willReturn('rpTokenCreatedAt');
- $customerSecureData->expects($this->once())
- ->method('getPasswordHash')
- ->willReturn('passwordHash');
- $customerSecureData->expects($this->once())
- ->method('getFailuresNum')
- ->willReturn('failuresNum');
- $customerSecureData->expects($this->once())
- ->method('getFirstFailure')
- ->willReturn('firstFailure');
- $customerSecureData->expects($this->once())
- ->method('getLockExpires')
- ->willReturn('lockExpires');
- $customerModel->expects($this->once())
- ->method('setRpToken')
- ->willReturnMap([
- ['rpToken', $customerModel],
- [null, $customerModel],
- ]);
- $customerModel->expects($this->once())
- ->method('setRpTokenCreatedAt')
- ->willReturnMap([
- ['rpTokenCreatedAt', $customerModel],
- [null, $customerModel],
- ]);
- $customerModel->expects($this->once())
- ->method('setPasswordHash')
- ->with('passwordHash');
- $customerModel->expects($this->once())
- ->method('setFailuresNum')
- ->with('failuresNum');
- $customerModel->expects($this->once())
- ->method('setFirstFailure')
- ->with('firstFailure');
- $customerModel->expects($this->once())
- ->method('setLockExpires')
- ->with('lockExpires');
- $customerModel->expects($this->atLeastOnce())
- ->method('getId')
- ->willReturn($customerId);
- $customerModel->expects($this->once())
- ->method('save');
- $this->customerRegistry->expects($this->once())
- ->method('push')
- ->with($customerModel);
- $customerAttributesMetaData->expects($this->once())
- ->method('getEmail')
- ->willReturn('example@example.com');
- $customerAttributesMetaData->expects($this->once())
- ->method('getWebsiteId')
- ->willReturn(2);
- $this->customerRegistry->expects($this->once())
- ->method('retrieveByEmail')
- ->with('example@example.com', 2)
- ->willReturn($customerModel);
- $this->eventManager->expects($this->once())
- ->method('dispatch')
- ->with(
- 'customer_save_after_data_object',
- [
- 'customer_data_object' => $this->customer,
- 'orig_customer_data_object' => $origCustomer,
- 'delegate_data' => [],
- ]
- );
- $this->model->save($this->customer);
- }
- /**
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function testSaveWithPasswordHash()
- {
- $customerId = 1;
- $storeId = 2;
- $passwordHash = 'ukfa4sdfa56s5df02asdf4rt';
- $customerSecureData = $this->createPartialMock(\Magento\Customer\Model\Data\CustomerSecure::class, [
- 'getRpToken',
- 'getRpTokenCreatedAt',
- 'getPasswordHash',
- 'getFailuresNum',
- 'getFirstFailure',
- 'getLockExpires',
- ]);
- $origCustomer = $this->customer;
- $customerModel = $this->createPartialMock(\Magento\Customer\Model\Customer::class, [
- 'getId',
- 'setId',
- 'setStoreId',
- 'getStoreId',
- 'getAttributeSetId',
- 'setAttributeSetId',
- 'setRpToken',
- 'setRpTokenCreatedAt',
- 'getDataModel',
- 'setPasswordHash',
- 'save',
- ]);
- $customerAttributesMetaData = $this->getMockForAbstractClass(
- \Magento\Framework\Api\CustomAttributesDataInterface::class,
- [],
- '',
- false,
- false,
- true,
- [
- 'getId',
- 'getEmail',
- 'getWebsiteId',
- 'getAddresses',
- 'setAddresses'
- ]
- );
- $customerModel->expects($this->atLeastOnce())
- ->method('setRpToken')
- ->with(null);
- $customerModel->expects($this->atLeastOnce())
- ->method('setRpTokenCreatedAt')
- ->with(null);
- $customerModel->expects($this->atLeastOnce())
- ->method('setPasswordHash')
- ->with($passwordHash);
- $this->customerRegistry->expects($this->atLeastOnce())
- ->method('remove')
- ->with($customerId);
- $this->customerRegistry->expects($this->once())
- ->method('retrieveSecureData')
- ->with($customerId)
- ->willReturn($customerSecureData);
- $customerSecureData->expects($this->never())
- ->method('getRpToken')
- ->willReturn('rpToken');
- $customerSecureData->expects($this->never())
- ->method('getRpTokenCreatedAt')
- ->willReturn('rpTokenCreatedAt');
- $customerSecureData->expects($this->never())
- ->method('getPasswordHash')
- ->willReturn('passwordHash');
- $customerSecureData->expects($this->once())
- ->method('getFailuresNum')
- ->willReturn('failuresNum');
- $customerSecureData->expects($this->once())
- ->method('getFirstFailure')
- ->willReturn('firstFailure');
- $customerSecureData->expects($this->once())
- ->method('getLockExpires')
- ->willReturn('lockExpires');
- $this->customer->expects($this->atLeastOnce())
- ->method('getId')
- ->willReturn($customerId);
- $this->customer->expects($this->atLeastOnce())
- ->method('__toArray')
- ->willReturn([]);
- $this->customerRegistry->expects($this->atLeastOnce())
- ->method('retrieve')
- ->with($customerId)
- ->willReturn($customerModel);
- $customerModel->expects($this->atLeastOnce())
- ->method('getDataModel')
- ->willReturn($this->customer);
- $this->imageProcessor->expects($this->once())
- ->method('save')
- ->with($this->customer, CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER, $this->customer)
- ->willReturn($customerAttributesMetaData);
- $customerAttributesMetaData
- ->expects($this->atLeastOnce())
- ->method('getId')
- ->willReturn($customerId);
- $this->extensibleDataObjectConverter->expects($this->once())
- ->method('toNestedArray')
- ->with($customerAttributesMetaData, [], \Magento\Customer\Api\Data\CustomerInterface::class)
- ->willReturn(['customerData']);
- $this->customerFactory->expects($this->once())
- ->method('create')
- ->with(['data' => ['customerData']])
- ->willReturn($customerModel);
- $customerModel->expects($this->once())
- ->method('getStoreId')
- ->willReturn(null);
- $store = $this->createMock(\Magento\Store\Model\Store::class);
- $store->expects($this->once())
- ->method('getId')
- ->willReturn($storeId);
- $this->storeManager
- ->expects($this->once())
- ->method('getStore')
- ->willReturn($store);
- $customerModel->expects($this->once())
- ->method('setStoreId')
- ->with($storeId);
- $customerModel->expects($this->once())
- ->method('setId')
- ->with($customerId);
- $customerModel->expects($this->atLeastOnce())
- ->method('getId')
- ->willReturn($customerId);
- $customerModel->expects($this->once())
- ->method('save');
- $this->customerRegistry->expects($this->once())
- ->method('push')
- ->with($customerModel);
- $customerAttributesMetaData->expects($this->once())
- ->method('getEmail')
- ->willReturn('example@example.com');
- $customerAttributesMetaData->expects($this->once())
- ->method('getWebsiteId')
- ->willReturn(2);
- $this->customerRegistry->expects($this->once())
- ->method('retrieveByEmail')
- ->with('example@example.com', 2)
- ->willReturn($customerModel);
- $this->eventManager->expects($this->once())
- ->method('dispatch')
- ->with(
- 'customer_save_after_data_object',
- [
- 'customer_data_object' => $this->customer,
- 'orig_customer_data_object' => $origCustomer,
- 'delegate_data' => [],
- ]
- );
- $this->model->save($this->customer, $passwordHash);
- }
- /**
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function testGetList()
- {
- $collection = $this->createMock(\Magento\Customer\Model\ResourceModel\Customer\Collection::class);
- $searchResults = $this->getMockForAbstractClass(
- \Magento\Customer\Api\Data\AddressSearchResultsInterface::class,
- [],
- '',
- false
- );
- $searchCriteria = $this->getMockForAbstractClass(
- \Magento\Framework\Api\SearchCriteriaInterface::class,
- [],
- '',
- false
- );
- $customerModel = $this->getMockBuilder(\Magento\Customer\Model\Customer::class)
- ->setMethods(
- [
- 'getId',
- 'setId',
- 'setStoreId',
- 'getStoreId',
- 'getAttributeSetId',
- 'setAttributeSetId',
- 'setRpToken',
- 'setRpTokenCreatedAt',
- 'getDataModel',
- 'setPasswordHash',
- 'getCollection'
- ]
- )
- ->setMockClassName('customerModel')
- ->disableOriginalConstructor()
- ->getMock();
- $metadata = $this->getMockForAbstractClass(
- \Magento\Customer\Api\Data\AttributeMetadataInterface::class,
- [],
- '',
- false
- );
- $this->searchResultsFactory->expects($this->once())
- ->method('create')
- ->willReturn($searchResults);
- $searchResults->expects($this->once())
- ->method('setSearchCriteria')
- ->with($searchCriteria);
- $this->customerFactory->expects($this->once())
- ->method('create')
- ->willReturn($customerModel);
- $customerModel->expects($this->once())
- ->method('getCollection')
- ->willReturn($collection);
- $this->extensionAttributesJoinProcessor->expects($this->once())
- ->method('process')
- ->with($collection, \Magento\Customer\Api\Data\CustomerInterface::class);
- $this->customerMetadata->expects($this->once())
- ->method('getAllAttributesMetadata')
- ->willReturn([$metadata]);
- $metadata->expects($this->once())
- ->method('getAttributeCode')
- ->willReturn('attribute-code');
- $collection->expects($this->once())
- ->method('addAttributeToSelect')
- ->with('attribute-code');
- $collection->expects($this->once())
- ->method('addNameToSelect');
- $collection->expects($this->at(2))
- ->method('joinAttribute')
- ->with('billing_postcode', 'customer_address/postcode', 'default_billing', null, 'left')
- ->willReturnSelf();
- $collection->expects($this->at(3))
- ->method('joinAttribute')
- ->with('billing_city', 'customer_address/city', 'default_billing', null, 'left')
- ->willReturnSelf();
- $collection->expects($this->at(4))
- ->method('joinAttribute')
- ->with('billing_telephone', 'customer_address/telephone', 'default_billing', null, 'left')
- ->willReturnSelf();
- $collection->expects($this->at(5))
- ->method('joinAttribute')
- ->with('billing_region', 'customer_address/region', 'default_billing', null, 'left')
- ->willReturnSelf();
- $collection->expects($this->at(6))
- ->method('joinAttribute')
- ->with('billing_country_id', 'customer_address/country_id', 'default_billing', null, 'left')
- ->willReturnSelf();
- $collection->expects($this->at(7))
- ->method('joinAttribute')
- ->with('billing_company', 'customer_address/company', 'default_billing', null, 'left')
- ->willReturnSelf();
- $this->collectionProcessorMock->expects($this->once())
- ->method('process')
- ->with($searchCriteria, $collection);
- $collection->expects($this->once())
- ->method('getSize')
- ->willReturn(23);
- $searchResults->expects($this->once())
- ->method('setTotalCount')
- ->with(23);
- $collection->expects($this->once())
- ->method('getIterator')
- ->willReturn(new \ArrayIterator([$customerModel]));
- $customerModel->expects($this->atLeastOnce())
- ->method('getDataModel')
- ->willReturn($this->customer);
- $searchResults->expects($this->once())
- ->method('setItems')
- ->with([$this->customer]);
- $this->assertSame($searchResults, $this->model->getList($searchCriteria));
- }
- public function testDeleteById()
- {
- $customerId = 14;
- $customerModel = $this->createPartialMock(\Magento\Customer\Model\Customer::class, ['delete']);
- $this->customerRegistry
- ->expects($this->once())
- ->method('retrieve')
- ->with($customerId)
- ->willReturn($customerModel);
- $customerModel->expects($this->once())
- ->method('delete');
- $this->customerRegistry->expects($this->atLeastOnce())
- ->method('remove')
- ->with($customerId);
- $this->assertTrue($this->model->deleteById($customerId));
- }
- public function testDelete()
- {
- $customerId = 14;
- $customerModel = $this->createPartialMock(\Magento\Customer\Model\Customer::class, ['delete']);
- $this->customer->expects($this->once())
- ->method('getId')
- ->willReturn($customerId);
- $this->customerRegistry
- ->expects($this->once())
- ->method('retrieve')
- ->with($customerId)
- ->willReturn($customerModel);
- $customerModel->expects($this->once())
- ->method('delete');
- $this->customerRegistry->expects($this->atLeastOnce())
- ->method('remove')
- ->with($customerId);
- $this->notificationStorage->expects($this->atLeastOnce())
- ->method('remove')
- ->with(NotificationStorage::UPDATE_CUSTOMER_SESSION, $customerId);
- $this->assertTrue($this->model->delete($this->customer));
- }
- }
|