![]() 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/vendor/magento/module-customer/Test/Unit/Model/ResourceModel/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Customer\Test\Unit\Model\ResourceModel; use Magento\Customer\Model\Address; use Magento\Customer\Model\CustomerFactory; use Magento\Eav\Model\Config; use Magento\Eav\Model\Entity\AbstractEntity; use Magento\Eav\Model\Entity\Attribute\AbstractAttribute; use Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend; use Magento\Eav\Model\Entity\AttributeLoaderInterface; use Magento\Eav\Model\Entity\Type; use Magento\Framework\App\ResourceConnection; use Magento\Framework\DB\Adapter\Pdo\Mysql; use Magento\Framework\DB\Select; use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite; use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; use Magento\Framework\Validator; use Magento\Framework\Validator\Factory; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class AddressTest extends TestCase { /** @var \Magento\Customer\Test\Unit\Model\ResourceModel\SubResourceModelAddress */ protected $addressResource; /** @var CustomerFactory|MockObject */ protected $customerFactory; /** @var Type */ protected $eavConfigType; /** @var Snapshot|MockObject */ protected $entitySnapshotMock; /** @var RelationComposite|MockObject */ protected $entityRelationCompositeMock; protected function setUp(): void { $this->entitySnapshotMock = $this->createMock( Snapshot::class ); $this->entityRelationCompositeMock = $this->createMock( RelationComposite::class ); $this->addressResource = (new ObjectManagerHelper($this))->getObject( \Magento\Customer\Test\Unit\Model\ResourceModel\SubResourceModelAddress::class, [ 'resource' => $this->prepareResource(), 'entitySnapshot' => $this->entitySnapshotMock, 'entityRelationComposite' => $this->entityRelationCompositeMock, 'eavConfig' => $this->prepareEavConfig(), 'validatorFactory' => $this->prepareValidatorFactory(), 'customerFactory' => $this->prepareCustomerFactory() ] ); } /** * @param $addressId * @param $isDefaultBilling * @param $isDefaultShipping * * @dataProvider getSaveDataProvider */ public function testSave($addressId, $isDefaultBilling, $isDefaultShipping) { /** @var $address \Magento\Customer\Model\Address|\PHPUnit\Framework\MockObject\MockObject */ $address = $this->getMockBuilder(Address::class) ->addMethods(['getIsDefaultBilling', 'getIsDefaultShipping']) ->onlyMethods( [ '__wakeup', 'getId', 'getEntityTypeId', 'hasDataChanges', 'validateBeforeSave', 'beforeSave', 'afterSave', 'isSaveAllowed' ] ) ->disableOriginalConstructor() ->getMock(); $this->entitySnapshotMock->expects($this->once())->method('isModified')->willReturn(true); $this->entityRelationCompositeMock->expects($this->once())->method('processRelations'); $address->expects($this->once())->method('isSaveAllowed')->willReturn(true); $address->expects($this->once())->method('validateBeforeSave'); $address->expects($this->once())->method('beforeSave'); $address->expects($this->once())->method('afterSave'); $address->expects($this->any())->method('getEntityTypeId')->willReturn('3'); $address->expects($this->any())->method('getId')->willReturn($addressId); $address->expects($this->any())->method('getIsDefaultShipping')->willReturn($isDefaultShipping); $address->expects($this->any())->method('getIsDefaultBilling')->willReturn($isDefaultBilling); $this->addressResource->setType('customer_address'); $attributeLoaderMock = $this->getMockBuilder(AttributeLoaderInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->addressResource->setAttributeLoader($attributeLoaderMock); $this->addressResource->save($address); } /** * Data provider for testSave method * * @return array */ public function getSaveDataProvider() { return [ [null, true, true], [1, true, true], [1, true, false], [1, false, true], [1, false, false], ]; } /** * Prepare resource mock object * * @return ResourceConnection|MockObject */ protected function prepareResource() { $dbSelect = $this->createMock(Select::class); $dbSelect->expects($this->any())->method('from')->willReturnSelf(); $dbSelect->expects($this->any())->method('where')->willReturnSelf(); $dbAdapter = $this->getMockBuilder(Mysql::class) ->disableOriginalConstructor() ->getMock(); $dbAdapter->expects($this->any()) ->method('describeTable') ->with('customer_address_entity') ->willReturn( [ 'entity_type_id', 'attribute_set_id', 'created_at', 'updated_at', 'parent_id', 'increment_id', 'entity_id', ] ); $dbAdapter->expects($this->any())->method('lastInsertId'); $dbAdapter->expects($this->any())->method('select')->willReturn($dbSelect); $resource = $this->getMockBuilder(ResourceConnection::class) ->disableOriginalConstructor() ->getMock(); $resource->expects($this->any())->method('getConnection')->willReturn($dbAdapter); $resource->expects($this->any())->method('getTableName')->willReturn('customer_address_entity'); return $resource; } /** * Prepare Eav config mock object * * @return Config|MockObject */ protected function prepareEavConfig() { $attributeMock = $this->createPartialMock( AbstractAttribute::class, ['getAttributeCode', 'getBackend', '__wakeup'] ); $attributeMock->expects($this->any()) ->method('getAttributeCode') ->willReturn('entity_id'); $attributeMock->expects($this->any()) ->method('getBackend') ->willReturn( $this->createMock(AbstractBackend::class) ); $this->eavConfigType = $this->createPartialMock( Type::class, ['getEntityIdField', 'getId', 'getEntityTable', '__wakeup'] ); $this->eavConfigType->expects($this->any())->method('getEntityIdField')->willReturn(false); $this->eavConfigType->expects($this->any())->method('getId')->willReturn(false); $this->eavConfigType->expects($this->any())->method('getEntityTable')->willReturn('customer_address_entity'); $eavConfig = $this->createPartialMock( Config::class, ['getEntityType', 'getEntityAttributeCodes', 'getAttribute'] ); $eavConfig->expects($this->any()) ->method('getEntityType') ->with('customer_address') ->willReturn($this->eavConfigType); $eavConfig->expects($this->any()) ->method('getEntityAttributeCodes') ->with($this->eavConfigType) ->willReturn( [ 'entity_type_id', 'attribute_set_id', 'created_at', 'updated_at', 'parent_id', 'increment_id', 'entity_id', ] ); $eavConfig->expects($this->any()) ->method('getAttribute') ->willReturnMap( [ [$this->eavConfigType, 'entity_type_id', $attributeMock], [$this->eavConfigType, 'attribute_set_id', $attributeMock], [$this->eavConfigType, 'created_at', $attributeMock], [$this->eavConfigType, 'updated_at', $attributeMock], [$this->eavConfigType, 'parent_id', $attributeMock], [$this->eavConfigType, 'increment_id', $attributeMock], [$this->eavConfigType, 'entity_id', $attributeMock], ] ); return $eavConfig; } /** * Prepare validator mock object * * @return Factory|MockObject */ protected function prepareValidatorFactory() { $validatorMock = $this->createPartialMock(Validator::class, ['isValid']); $validatorMock->expects($this->any()) ->method('isValid') ->willReturn(true); $validatorFactory = $this->createPartialMock(Factory::class, ['createValidator']); $validatorFactory->expects($this->any()) ->method('createValidator') ->with('customer_address', 'save') ->willReturn($validatorMock); return $validatorFactory; } /** * @return CustomerFactory|MockObject */ protected function prepareCustomerFactory() { $this->customerFactory = $this->createPartialMock(CustomerFactory::class, ['create']); return $this->customerFactory; } public function testGetType() { $this->assertSame($this->eavConfigType, $this->addressResource->getEntityType()); } } /** * Mock method getAttributeLoader * @codingStandardsIgnoreStart */ class SubResourceModelAddress extends \Magento\Customer\Model\ResourceModel\Address { protected $attributeLoader; /** * @param null $object * @return \Magento\Customer\Model\ResourceModel\Address|AbstractEntity */ public function loadAllAttributes($object = null) { return $this->getAttributeLoader()->loadAllAttributes($this, $object); } /** * @param $attributeLoader */ public function setAttributeLoader($attributeLoader) { $this->attributeLoader = $attributeLoader; } /** * @return AttributeLoaderInterface */ protected function getAttributeLoader() { return $this->attributeLoader; } } // @codingStandardsIgnoreEnd