123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\DataObject;
- class CopyTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \Magento\Framework\DataObject\Copy
- */
- protected $_service;
- protected function setUp()
- {
- $this->_service = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
- ->get(\Magento\Framework\DataObject\Copy::class);
- }
- public function testCopyFieldset()
- {
- $fieldset = 'sales_copy_order';
- $aspect = 'to_edit';
- $data = ['customer_email' => 'admin@example.com', 'customer_group_id' => '1'];
- $source = new \Magento\Framework\DataObject($data);
- $target = new \Magento\Framework\DataObject();
- $expectedTarget = new \Magento\Framework\DataObject($data);
- $this->assertNull($this->_service->copyFieldsetToTarget($fieldset, $aspect, 'invalid_source', []));
- $this->assertNull($this->_service->copyFieldsetToTarget($fieldset, $aspect, [], 'invalid_target'));
- $this->assertEquals(
- $target,
- $this->_service->copyFieldsetToTarget('invalid_fieldset', $aspect, $source, $target)
- );
- $this->assertSame($target, $this->_service->copyFieldsetToTarget($fieldset, $aspect, $source, $target));
- $this->assertEquals($expectedTarget, $target);
- }
- public function testCopyFieldsetWithExtensionAttributes()
- {
- $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
- $fieldsetConfigMock = $this->getMockBuilder(\Magento\Framework\DataObject\Copy\Config::class)
- ->disableOriginalConstructor()
- ->setMethods(['getFieldSet'])
- ->getMock();
- $service = $objectManager->create(
- \Magento\Framework\DataObject\Copy::class,
- ['fieldsetConfig' => $fieldsetConfigMock]
- );
- $data = ['firstname' => ['name' => '*'], 'lastname' => ['name' => '*'], 'test_group_code' => ['name' => '*']];
- $fieldsetConfigMock
- ->expects($this->once())
- ->method('getFieldSet')
- ->willReturn($data);
- $fieldset = 'customer_account';
- $aspect = 'name';
- $groupCode = 'general';
- $firstName = 'First';
- $data = [
- 'email' => 'customer@example.com',
- 'firstname' => $firstName,
- 'lastname' => 'Last',
- // see declaration in dev/tests/integration/testsuite/Magento/Framework/Api/etc/extension_attributes.xml
- 'extension_attributes' => ['test_group_code' => $groupCode]
- ];
- $dataWithExtraField = array_merge($data, ['undeclared_field' => 'will be omitted']);
- /** @var \Magento\Framework\Api\DataObjectHelper $dataObjectHelper */
- $dataObjectHelper = $objectManager->get(\Magento\Framework\Api\DataObjectHelper::class);
- /** @var \Magento\TestModuleExtensionAttributes\Model\Data\FakeCustomerFactory $customerFactory */
- $customerFactory = $objectManager->get(
- \Magento\TestModuleExtensionAttributes\Model\Data\FakeCustomerFactory::class
- );
- /** @var \Magento\TestModuleExtensionAttributes\Api\Data\CustomerInterface $source */
- $source = $customerFactory->create();
- $dataObjectHelper->populateWithArray(
- $source,
- $dataWithExtraField,
- \Magento\TestModuleExtensionAttributes\Api\Data\FakeCustomerInterface::class
- );
- /** @var \Magento\TestModuleExtensionAttributes\Api\Data\CustomerInterface $target */
- $target = $customerFactory->create();
- $target = $service->copyFieldsetToTarget($fieldset, $aspect, $source, $target);
- $this->assertInstanceOf(\Magento\TestModuleExtensionAttributes\Api\Data\FakeCustomerInterface::class, $target);
- $this->assertNull(
- $target->getEmail(),
- "Email should not be set because it is not defined in the fieldset."
- );
- $this->assertEquals(
- $firstName,
- $target->getFirstname(),
- "First name was not copied."
- );
- $this->assertEquals(
- $groupCode,
- $target->getExtensionAttributes()->getTestGroupCode(),
- "Extension attribute was not copied."
- );
- }
- public function testCopyFieldsetWithAbstractSimpleObject()
- {
- $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
- $fieldset = 'sales_copy_order';
- $aspect = 'to_edit';
- $fieldsetConfigMock = $this->getMockBuilder(\Magento\Framework\DataObject\Copy\Config::class)
- ->disableOriginalConstructor()
- ->setMethods(['getFieldSet'])
- ->getMock();
- $service = $objectManager->create(
- \Magento\Framework\DataObject\Copy::class,
- ['fieldsetConfig' => $fieldsetConfigMock]
- );
- $data = ['store_label' => ['to_edit' => '*'], 'frontend_label' => ['to_edit' => '*'],
- 'attribute_code' => ['to_edit' => '*'], 'note' => ['to_edit' => '*']];
- $fieldsetConfigMock
- ->expects($this->any())
- ->method('getFieldSet')
- ->willReturn($data);
- $source = $objectManager->get(\Magento\TestModuleExtensionAttributes\Model\Data\FakeAttributeMetadata::class);
- $source->setStoreLabel('storeLabel');
- $source->setFrontendLabel('frontendLabel');
- $source->setAttributeCode('attributeCode');
- $source->setNote('note');
- $target = $objectManager->get(\Magento\TestModuleExtensionAttributes\Model\Data\FakeAttributeMetadata::class);
- $expectedTarget = $source;
- $this->assertEquals(
- $target,
- $service->copyFieldsetToTarget('invalid_fieldset', $aspect, $source, $target)
- );
- $this->assertEquals(
- $expectedTarget,
- $service->copyFieldsetToTarget($fieldset, $aspect, $source, $target)
- );
- }
- public function testCopyFieldsetArrayTarget()
- {
- $fieldset = 'sales_copy_order';
- $aspect = 'to_edit';
- $data = ['customer_email' => 'admin@example.com', 'customer_group_id' => '1'];
- $source = new \Magento\Framework\DataObject($data);
- $target = [];
- $expectedTarget = $data;
- $this->assertEquals(
- $target,
- $this->_service->copyFieldsetToTarget('invalid_fieldset', $aspect, $source, $target)
- );
- $this->assertEquals(
- $expectedTarget,
- $this->_service->copyFieldsetToTarget($fieldset, $aspect, $source, $target)
- );
- }
- }
|