123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- <?php
- declare(strict_types=1);
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Customer\Test\Unit\Model\Address;
- use Magento\Customer\Api\CustomerRepositoryInterface;
- use Magento\Customer\Model\Address\DataProvider;
- use Magento\Customer\Model\AttributeMetadataResolver;
- use Magento\Customer\Model\FileUploaderDataResolver;
- use Magento\Customer\Model\ResourceModel\Address\CollectionFactory;
- use Magento\Customer\Model\ResourceModel\Address\Collection as AddressCollection;
- use Magento\Eav\Model\Config;
- use Magento\Eav\Model\Entity\Type;
- use Magento\Customer\Api\Data\CustomerInterface;
- use Magento\Framework\View\Element\UiComponent\ContextInterface;
- use Magento\Customer\Model\Address as AddressModel;
- use Magento\Ui\Component\Form\Element\Multiline;
- use Magento\Ui\Component\Form\Field;
- use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class DataProviderTest extends \PHPUnit\Framework\TestCase
- {
- private const ATTRIBUTE_CODE = 'street';
- /**
- * @var CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
- */
- private $addressCollectionFactory;
- /**
- * @var AddressCollection|\PHPUnit_Framework_MockObject_MockObject
- */
- private $collection;
- /**
- * @var CustomerRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $customerRepository;
- /**
- * @var CustomerInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $customer;
- /**
- * @var Config|\PHPUnit_Framework_MockObject_MockObject
- */
- private $eavConfig;
- /*
- * @var ContextInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $context;
- /**
- * @var AddressModel|\PHPUnit_Framework_MockObject_MockObject
- */
- private $address;
- /**
- * @var FileUploaderDataResolver|\PHPUnit_Framework_MockObject_MockObject
- */
- private $fileUploaderDataResolver;
- /**
- * @var AttributeMetadataResolver|\PHPUnit_Framework_MockObject_MockObject
- */
- private $attributeMetadataResolver;
- /**
- * @var DataProvider
- */
- private $model;
- protected function setUp()
- {
- $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
- $this->fileUploaderDataResolver = $this->getMockBuilder(FileUploaderDataResolver::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->attributeMetadataResolver = $this->getMockBuilder(AttributeMetadataResolver::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->addressCollectionFactory = $this->getMockBuilder(CollectionFactory::class)
- ->disableOriginalConstructor()
- ->setMethods(['create'])
- ->getMock();
- $this->collection = $this->getMockBuilder(AddressCollection::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->customerRepository = $this->getMockForAbstractClass(CustomerRepositoryInterface::class);
- $this->context = $this->getMockForAbstractClass(ContextInterface::class);
- $this->addressCollectionFactory->expects($this->once())
- ->method('create')
- ->willReturn($this->collection);
- $this->eavConfig = $this->getMockBuilder(Config::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->eavConfig->expects($this->once())
- ->method('getEntityType')
- ->with('customer_address')
- ->willReturn($this->getTypeAddressMock([]));
- $this->customer = $this->getMockForAbstractClass(CustomerInterface::class);
- $this->address = $this->getMockBuilder(AddressModel::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->attributeMetadataResolver->expects($this->at(0))
- ->method('getAttributesMeta')
- ->willReturn(
- [
- 'arguments' => [
- 'data' => [
- 'config' => [
- 'dataType' => Multiline::NAME,
- 'formElement' => 'frontend_input',
- 'options' => 'test-options',
- 'visible' => null,
- 'required' => 'is_required',
- 'label' => __('Street'),
- 'sortOrder' => 'sort_order',
- 'default' => 'default_value',
- 'size' => 'multiline_count',
- 'componentType' => Field::NAME,
- ],
- ],
- ],
- ]
- );
- $this->attributeMetadataResolver->expects($this->at(1))
- ->method('getAttributesMeta')
- ->willReturn(
- [
- 'arguments' => [
- 'data' => [
- 'config' => [
- 'dataType' => 'frontend_input',
- 'formElement' => 'frontend_input',
- 'visible' => null,
- 'required' => 'is_required',
- 'label' => __('frontend_label'),
- 'sortOrder' => 'sort_order',
- 'default' => 'default_value',
- 'size' => 'multiline_count',
- 'componentType' => Field::NAME,
- 'prefer' => 'toggle',
- 'valueMap' => [
- 'true' => 1,
- 'false' => 0,
- ],
- ],
- ],
- ],
- ]
- );
- $this->model = $objectManagerHelper->getObject(
- DataProvider::class,
- [
- 'name' => 'test-name',
- 'primaryFieldName' => 'primary-field-name',
- 'requestFieldName' => 'request-field-name',
- 'addressCollectionFactory' => $this->addressCollectionFactory,
- 'customerRepository' => $this->customerRepository,
- 'eavConfig' => $this->eavConfig,
- 'context' => $this->context,
- 'fileUploaderDataResolver' => $this->fileUploaderDataResolver,
- 'attributeMetadataResolver' => $this->attributeMetadataResolver,
- [],
- [],
- true
- ]
- );
- }
- public function testGetDefaultData(): void
- {
- $expectedData = [
- '' => [
- 'parent_id' => 1,
- 'firstname' => 'John',
- 'lastname' => 'Doe'
- ]
- ];
- $this->collection->expects($this->once())
- ->method('getItems')
- ->willReturn([]);
- $this->context->expects($this->once())
- ->method('getRequestParam')
- ->willReturn(1);
- $this->customerRepository->expects($this->once())
- ->method('getById')
- ->willReturn($this->customer);
- $this->customer->expects($this->once())
- ->method('getFirstname')
- ->willReturn('John');
- $this->customer->expects($this->once())
- ->method('getLastname')
- ->willReturn('Doe');
- $this->assertEquals($expectedData, $this->model->getData());
- }
- public function testGetData(): void
- {
- $expectedData = [
- '1' => [
- 'parent_id' => '1',
- 'default_billing' => '1',
- 'default_shipping' => '1',
- 'firstname' => 'John',
- 'lastname' => 'Doe',
- 'street' => [
- '42000 Ave W 55 Cedar City',
- 'Apt. 33'
- ]
- ]
- ];
- $this->collection->expects($this->once())
- ->method('getItems')
- ->willReturn([
- $this->address
- ]);
- $this->customerRepository->expects($this->once())
- ->method('getById')
- ->willReturn($this->customer);
- $this->customer->expects($this->once())
- ->method('getDefaultBilling')
- ->willReturn('1');
- $this->customer->expects($this->once())
- ->method('getDefaultShipping')
- ->willReturn('1');
- $this->address->expects($this->once())
- ->method('getEntityId')
- ->willReturn('1');
- $this->address->expects($this->once())
- ->method('load')
- ->with('1')
- ->willReturnSelf();
- $this->address->expects($this->once())
- ->method('getData')
- ->willReturn([
- 'parent_id' => '1',
- 'firstname' => 'John',
- 'lastname' => 'Doe',
- 'street' => "42000 Ave W 55 Cedar City\nApt. 33"
- ]);
- $this->fileUploaderDataResolver->expects($this->once())
- ->method('overrideFileUploaderData')
- ->willReturnSelf();
- $this->assertEquals($expectedData, $this->model->getData());
- }
- /**
- * Get customer address type mock
- *
- * @param array $customerAttributes
- * @return Type|\PHPUnit_Framework_MockObject_MockObject
- */
- protected function getTypeAddressMock($customerAttributes = [])
- {
- $typeAddressMock = $this->getMockBuilder(Type::class)
- ->disableOriginalConstructor()
- ->getMock();
- $attributesCollection = !empty($customerAttributes) ? $customerAttributes : $this->getAttributeMock();
- foreach ($attributesCollection as $attribute) {
- $attribute->expects($this->any())
- ->method('getEntityType')
- ->willReturn($typeAddressMock);
- }
- $typeAddressMock->expects($this->once())
- ->method('getAttributeCollection')
- ->willReturn($attributesCollection);
- return $typeAddressMock;
- }
- /**
- * Get attribute mock
- *
- * @param array $options
- * @return AbstractAttribute[]|\PHPUnit_Framework_MockObject_MockObject[]
- */
- protected function getAttributeMock($options = []): array
- {
- $attributeMock = $this->getMockBuilder(AbstractAttribute::class)
- ->setMethods(
- [
- 'getAttributeCode',
- 'getDataUsingMethod',
- 'getFrontendInput',
- 'getIsVisible',
- 'getSource',
- 'getIsUserDefined',
- 'getUsedInForms',
- 'getEntityType',
- ]
- )
- ->disableOriginalConstructor()
- ->getMockForAbstractClass();
- $attributeCode = self::ATTRIBUTE_CODE;
- if (isset($options[self::ATTRIBUTE_CODE]['specific_code_prefix'])) {
- $attributeCode .= $options[self::ATTRIBUTE_CODE]['specific_code_prefix'];
- }
- $attributeMock->expects($this->exactly(2))
- ->method('getAttributeCode')
- ->willReturn($attributeCode);
- $attributeBooleanMock = $this->getMockBuilder(AbstractAttribute::class)
- ->setMethods(
- [
- 'getAttributeCode',
- 'getDataUsingMethod',
- 'getFrontendInput',
- 'getIsVisible',
- 'getIsUserDefined',
- 'getUsedInForms',
- 'getSource',
- 'getEntityType',
- ]
- )
- ->disableOriginalConstructor()
- ->getMockForAbstractClass();
- $booleanAttributeCode = 'test-code-boolean';
- if (isset($options['test-code-boolean']['specific_code_prefix'])) {
- $booleanAttributeCode .= $options['test-code-boolean']['specific_code_prefix'];
- }
- $attributeBooleanMock->expects($this->exactly(2))
- ->method('getAttributeCode')
- ->willReturn($booleanAttributeCode);
- $mocks = [$attributeMock, $attributeBooleanMock];
- return $mocks;
- }
- }
|