CopyTest.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\DataObject;
  7. class CopyTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \Magento\Framework\DataObject\Copy
  11. */
  12. protected $_service;
  13. protected function setUp()
  14. {
  15. $this->_service = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
  16. ->get(\Magento\Framework\DataObject\Copy::class);
  17. }
  18. public function testCopyFieldset()
  19. {
  20. $fieldset = 'sales_copy_order';
  21. $aspect = 'to_edit';
  22. $data = ['customer_email' => 'admin@example.com', 'customer_group_id' => '1'];
  23. $source = new \Magento\Framework\DataObject($data);
  24. $target = new \Magento\Framework\DataObject();
  25. $expectedTarget = new \Magento\Framework\DataObject($data);
  26. $this->assertNull($this->_service->copyFieldsetToTarget($fieldset, $aspect, 'invalid_source', []));
  27. $this->assertNull($this->_service->copyFieldsetToTarget($fieldset, $aspect, [], 'invalid_target'));
  28. $this->assertEquals(
  29. $target,
  30. $this->_service->copyFieldsetToTarget('invalid_fieldset', $aspect, $source, $target)
  31. );
  32. $this->assertSame($target, $this->_service->copyFieldsetToTarget($fieldset, $aspect, $source, $target));
  33. $this->assertEquals($expectedTarget, $target);
  34. }
  35. public function testCopyFieldsetWithExtensionAttributes()
  36. {
  37. $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  38. $fieldsetConfigMock = $this->getMockBuilder(\Magento\Framework\DataObject\Copy\Config::class)
  39. ->disableOriginalConstructor()
  40. ->setMethods(['getFieldSet'])
  41. ->getMock();
  42. $service = $objectManager->create(
  43. \Magento\Framework\DataObject\Copy::class,
  44. ['fieldsetConfig' => $fieldsetConfigMock]
  45. );
  46. $data = ['firstname' => ['name' => '*'], 'lastname' => ['name' => '*'], 'test_group_code' => ['name' => '*']];
  47. $fieldsetConfigMock
  48. ->expects($this->once())
  49. ->method('getFieldSet')
  50. ->willReturn($data);
  51. $fieldset = 'customer_account';
  52. $aspect = 'name';
  53. $groupCode = 'general';
  54. $firstName = 'First';
  55. $data = [
  56. 'email' => 'customer@example.com',
  57. 'firstname' => $firstName,
  58. 'lastname' => 'Last',
  59. // see declaration in dev/tests/integration/testsuite/Magento/Framework/Api/etc/extension_attributes.xml
  60. 'extension_attributes' => ['test_group_code' => $groupCode]
  61. ];
  62. $dataWithExtraField = array_merge($data, ['undeclared_field' => 'will be omitted']);
  63. /** @var \Magento\Framework\Api\DataObjectHelper $dataObjectHelper */
  64. $dataObjectHelper = $objectManager->get(\Magento\Framework\Api\DataObjectHelper::class);
  65. /** @var \Magento\TestModuleExtensionAttributes\Model\Data\FakeCustomerFactory $customerFactory */
  66. $customerFactory = $objectManager->get(
  67. \Magento\TestModuleExtensionAttributes\Model\Data\FakeCustomerFactory::class
  68. );
  69. /** @var \Magento\TestModuleExtensionAttributes\Api\Data\CustomerInterface $source */
  70. $source = $customerFactory->create();
  71. $dataObjectHelper->populateWithArray(
  72. $source,
  73. $dataWithExtraField,
  74. \Magento\TestModuleExtensionAttributes\Api\Data\FakeCustomerInterface::class
  75. );
  76. /** @var \Magento\TestModuleExtensionAttributes\Api\Data\CustomerInterface $target */
  77. $target = $customerFactory->create();
  78. $target = $service->copyFieldsetToTarget($fieldset, $aspect, $source, $target);
  79. $this->assertInstanceOf(\Magento\TestModuleExtensionAttributes\Api\Data\FakeCustomerInterface::class, $target);
  80. $this->assertNull(
  81. $target->getEmail(),
  82. "Email should not be set because it is not defined in the fieldset."
  83. );
  84. $this->assertEquals(
  85. $firstName,
  86. $target->getFirstname(),
  87. "First name was not copied."
  88. );
  89. $this->assertEquals(
  90. $groupCode,
  91. $target->getExtensionAttributes()->getTestGroupCode(),
  92. "Extension attribute was not copied."
  93. );
  94. }
  95. public function testCopyFieldsetWithAbstractSimpleObject()
  96. {
  97. $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  98. $fieldset = 'sales_copy_order';
  99. $aspect = 'to_edit';
  100. $fieldsetConfigMock = $this->getMockBuilder(\Magento\Framework\DataObject\Copy\Config::class)
  101. ->disableOriginalConstructor()
  102. ->setMethods(['getFieldSet'])
  103. ->getMock();
  104. $service = $objectManager->create(
  105. \Magento\Framework\DataObject\Copy::class,
  106. ['fieldsetConfig' => $fieldsetConfigMock]
  107. );
  108. $data = ['store_label' => ['to_edit' => '*'], 'frontend_label' => ['to_edit' => '*'],
  109. 'attribute_code' => ['to_edit' => '*'], 'note' => ['to_edit' => '*']];
  110. $fieldsetConfigMock
  111. ->expects($this->any())
  112. ->method('getFieldSet')
  113. ->willReturn($data);
  114. $source = $objectManager->get(\Magento\TestModuleExtensionAttributes\Model\Data\FakeAttributeMetadata::class);
  115. $source->setStoreLabel('storeLabel');
  116. $source->setFrontendLabel('frontendLabel');
  117. $source->setAttributeCode('attributeCode');
  118. $source->setNote('note');
  119. $target = $objectManager->get(\Magento\TestModuleExtensionAttributes\Model\Data\FakeAttributeMetadata::class);
  120. $expectedTarget = $source;
  121. $this->assertEquals(
  122. $target,
  123. $service->copyFieldsetToTarget('invalid_fieldset', $aspect, $source, $target)
  124. );
  125. $this->assertEquals(
  126. $expectedTarget,
  127. $service->copyFieldsetToTarget($fieldset, $aspect, $source, $target)
  128. );
  129. }
  130. public function testCopyFieldsetArrayTarget()
  131. {
  132. $fieldset = 'sales_copy_order';
  133. $aspect = 'to_edit';
  134. $data = ['customer_email' => 'admin@example.com', 'customer_group_id' => '1'];
  135. $source = new \Magento\Framework\DataObject($data);
  136. $target = [];
  137. $expectedTarget = $data;
  138. $this->assertEquals(
  139. $target,
  140. $this->_service->copyFieldsetToTarget('invalid_fieldset', $aspect, $source, $target)
  141. );
  142. $this->assertEquals(
  143. $expectedTarget,
  144. $this->_service->copyFieldsetToTarget($fieldset, $aspect, $source, $target)
  145. );
  146. }
  147. }