![]() 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-import-export/Test/Unit/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\ImportExport\Test\Unit\Model; use Magento\Eav\Model\Entity\Attribute\AbstractAttribute; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\Exception\AlreadyExistsException; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Filesystem; use Magento\Framework\Filesystem\Directory\WriteInterface; use Magento\Framework\Filesystem\DriverInterface; use Magento\Framework\HTTP\Adapter\FileTransferFactory; use Magento\Framework\Indexer\IndexerInterface; use Magento\Framework\Indexer\IndexerRegistry; use Magento\Framework\Phrase; use Magento\Framework\Stdlib\DateTime\DateTime; use Magento\ImportExport\Helper\Data; use Magento\ImportExport\Model\Export\Adapter\CsvFactory; use Magento\ImportExport\Model\History; use Magento\ImportExport\Model\Import; use Magento\ImportExport\Model\Import\Config; use Magento\ImportExport\Model\Import\ConfigInterface; use Magento\ImportExport\Model\Import\Entity\AbstractEntity; use Magento\ImportExport\Model\Import\Entity\Factory; use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface; use Magento\ImportExport\Model\Import\Source\Csv; use Magento\ImportExport\Model\Source\Upload; use Magento\ImportExport\Test\Unit\Model\Import\AbstractImportTestCase; use Magento\MediaStorage\Model\File\UploaderFactory; use PHPUnit\Framework\MockObject\MockObject; use Psr\Log\LoggerInterface; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.TooManyFields) */ class ImportTest extends AbstractImportTestCase { /** * @var AbstractEntity|MockObject */ protected $_entityAdapter; /** * @var Data|MockObject */ protected $_importExportData = null; /** * @var ConfigInterface|MockObject */ protected $_importConfig; /** * @var Factory|MockObject */ protected $_entityFactory; /** * @var \Magento\ImportExport\Model\ResourceModel\Import\Data|MockObject */ protected $_importData; /** * @var CsvFactory|MockObject */ protected $_csvFactory; /** * @var FileTransferFactory|MockObject */ protected $_httpFactory; /** * @var UploaderFactory|MockObject */ protected $_uploaderFactory; /** * @var IndexerRegistry|MockObject */ protected $indexerRegistry; /** * @var \Magento\ImportExport\Model\Source\Import\Behavior\Factory|MockObject */ protected $_behaviorFactory; /** * @var Filesystem|MockObject */ protected $_filesystem; /** * @var ScopeConfigInterface|MockObject */ protected $_coreConfig; /** * @var \Magento\ImportExport\Model\Import|MockObject */ protected $import; /** * @var History|MockObject */ protected $historyModel; /** * @var DateTime|MockObject */ protected $dateTime; /** * @var WriteInterface|MockObject */ protected $_varDirectory; /** * @var DriverInterface|MockObject */ protected $_driver; /** * @var ProcessingErrorAggregatorInterface|MockObject */ private $errorAggregatorMock; /** * @var Upload */ private $upload; /** * Set up * * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ protected function setUp(): void { parent::setUp(); $logger = $this->getMockBuilder(LoggerInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->_filesystem = $this->getMockBuilder(Filesystem::class) ->disableOriginalConstructor() ->getMock(); $this->_importExportData = $this->getMockBuilder(Data::class) ->disableOriginalConstructor() ->getMock(); $this->_coreConfig = $this->getMockBuilder(ScopeConfigInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->_importConfig = $this->getMockBuilder(Config::class) ->disableOriginalConstructor() ->setMethods(['getEntityTypeCode', 'getBehavior', 'getEntities', 'getRelatedIndexers']) ->getMockForAbstractClass(); $this->_entityFactory = $this->getMockBuilder(Factory::class) ->disableOriginalConstructor() ->getMock(); $this->errorAggregatorMock = $this->getErrorAggregatorObject( [ 'initValidationStrategy', 'getErrorsCount', ] ); $this->_entityAdapter = $this->getMockBuilder(AbstractEntity::class) ->disableOriginalConstructor() ->setMethods( [ 'importData', '_saveValidatedBunches', 'getErrorAggregator', 'setSource', 'validateData', ] ) ->getMockForAbstractClass(); $this->_entityAdapter->method('getErrorAggregator') ->willReturn($this->errorAggregatorMock); $this->_entityFactory->method('create')->willReturn($this->_entityAdapter); $this->_importData = $this->getMockBuilder(\Magento\ImportExport\Model\ResourceModel\Import\Data::class) ->disableOriginalConstructor() ->getMock(); $this->_csvFactory = $this->getMockBuilder(CsvFactory::class) ->disableOriginalConstructor() ->getMock(); $this->_httpFactory = $this->getMockBuilder(FileTransferFactory::class) ->disableOriginalConstructor() ->getMock(); $this->_uploaderFactory = $this->getMockBuilder(UploaderFactory::class) ->disableOriginalConstructor() ->getMock(); $this->_behaviorFactory = $this->getMockBuilder( \Magento\ImportExport\Model\Source\Import\Behavior\Factory::class )->disableOriginalConstructor() ->getMock(); $this->indexerRegistry = $this->getMockBuilder(IndexerRegistry::class) ->disableOriginalConstructor() ->getMock(); $this->historyModel = $this->getMockBuilder(History::class) ->disableOriginalConstructor() ->setMethods(['updateReport', 'invalidateReport', 'addReport']) ->getMock(); $this->historyModel->expects($this->any())->method('updateReport')->willReturnSelf(); $this->dateTime = $this->getMockBuilder(DateTime::class) ->disableOriginalConstructor() ->getMock(); $this->_varDirectory = $this->getMockBuilder(WriteInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->_driver = $this->getMockBuilder(DriverInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->_driver ->expects($this->any()) ->method('fileGetContents') ->willReturn(''); $this->_varDirectory ->expects($this->any()) ->method('getDriver') ->willReturn($this->_driver); $this->upload = $this->createMock(Upload::class); $this->import = $this->getMockBuilder(Import::class) ->setConstructorArgs( [ $logger, $this->_filesystem, $this->_importExportData, $this->_coreConfig, $this->_importConfig, $this->_entityFactory, $this->_importData, $this->_csvFactory, $this->_httpFactory, $this->_uploaderFactory, $this->_behaviorFactory, $this->indexerRegistry, $this->historyModel, $this->dateTime, [], null, null, $this->upload ] ) ->setMethods( [ 'getDataSourceModel', 'setData', 'getData', 'getProcessedEntitiesCount', 'getProcessedRowsCount', 'getEntity', 'getBehavior', 'isReportEntityType', '_getEntityAdapter' ] ) ->getMock(); $this->setPropertyValue($this->import, '_varDirectory', $this->_varDirectory); } /** * Test importSource() method * * Check that method executes initialization of error aggregator object with * 'validation strategy' and 'allowed error count' parameters. */ public function testImportSource() { $entityTypeCode = 'code'; $this->_importData->expects($this->any()) ->method('getEntityTypeCode') ->willReturn($entityTypeCode); $behaviour = 'behaviour'; $this->_importData->expects($this->once()) ->method('getBehavior') ->willReturn($behaviour); $this->import->expects($this->any()) ->method('getDataSourceModel') ->willReturn($this->_importData); $this->import->expects($this->any())->method('setData')->withConsecutive( ['entity', $entityTypeCode], ['behavior', $behaviour] ); $this->_entityAdapter->expects($this->any()) ->method('importData') ->willReturn(true); $this->import->expects($this->any()) ->method('_getEntityAdapter') ->willReturn($this->_entityAdapter); $this->_importConfig ->expects($this->any()) ->method('getEntities') ->willReturn( [ $entityTypeCode => [ 'model' => $entityTypeCode ] ] ); $importOnceMethodsReturnNull = [ 'getBehavior' ]; foreach ($importOnceMethodsReturnNull as $method) { $this->import->expects($this->once())->method($method)->willReturn(null); } $this->assertTrue($this->import->importSource()); } /** * Test importSource with expected exception */ public function testImportSourceException() { $this->expectException(AlreadyExistsException::class); $exceptionMock = new AlreadyExistsException( __('URL key for specified store already exists.') ); $entityTypeCode = 'code'; $this->_importData->expects($this->any()) ->method('getEntityTypeCode') ->willReturn($entityTypeCode); $behaviour = 'behaviour'; $this->_importData->expects($this->any()) ->method('getBehavior') ->willReturn($behaviour); $this->import->expects($this->any()) ->method('getDataSourceModel') ->willReturn($this->_importData); $this->import->expects($this->any())->method('setData')->withConsecutive( ['entity', $entityTypeCode], ['behavior', $behaviour] ); $this->_entityAdapter->expects($this->any()) ->method('importData') ->willThrowException($exceptionMock); $this->import->expects($this->any()) ->method('_getEntityAdapter') ->willReturn($this->_entityAdapter); $this->import->importSource(); } /** * @todo to implement it. */ public function testGetOperationResultMessages() { $this->markTestSkipped('This test has not been implemented yet.'); } /** * @todo to implement it. */ public function testGetAttributeType() { /** @var AbstractAttribute $attribute */ $attribute = $this->getMockBuilder(AbstractAttribute::class) ->setMethods(['getFrontendInput', 'usesSource']) ->disableOriginalConstructor() ->getMock(); $attribute->expects($this->any())->method('getFrontendInput')->willReturn('boolean'); $attribute->expects($this->any())->method('usesSource')->willReturn(true); $this->assertEquals('boolean', $this->import->getAttributeType($attribute)); } /** * @todo to implement it. */ public function testGetEntity() { $this->markTestSkipped('This test has not been implemented yet.'); } /** * @todo to implement it. */ public function testGetErrorsCount() { $this->markTestSkipped('This test has not been implemented yet.'); } /** * @todo to implement it. */ public function testGetErrorsLimit() { $this->markTestSkipped('This test has not been implemented yet.'); } /** * @todo to implement it. */ public function testGetInvalidRowsCount() { $this->markTestSkipped('This test has not been implemented yet.'); } /** * @todo to implement it. */ public function testGetNotices() { $this->markTestSkipped('This test has not been implemented yet.'); } /** * @todo to implement it. */ public function testGetProcessedEntitiesCount() { $this->markTestSkipped('This test has not been implemented yet.'); } /** * @todo to implement it. */ public function testGetProcessedRowsCount() { $this->markTestSkipped('This test has not been implemented yet.'); } /** * @todo to implement it. */ public function testGetWorkingDir() { $this->markTestSkipped('This test has not been implemented yet.'); } /** * @todo to implement it. */ public function testIsImportAllowed() { $this->markTestSkipped('This test has not been implemented yet.'); } /** * @todo to implement it. */ public function testUploadSource() { $this->markTestSkipped('This test has not been implemented yet.'); } /** * Test validateSource() method * * Check that method executes initialization of error aggregator object with * 'validation strategy' and 'allowed error count' parameters. */ public function testValidateSource() { $validationStrategy = ProcessingErrorAggregatorInterface::VALIDATION_STRATEGY_STOP_ON_ERROR; $allowedErrorCount = 1; $this->errorAggregatorMock->expects($this->once()) ->method('initValidationStrategy') ->with($validationStrategy, $allowedErrorCount); $this->errorAggregatorMock->expects($this->once()) ->method('getErrorsCount') ->willReturn(0); $csvMock = $this->getMockBuilder(Csv::class) ->disableOriginalConstructor() ->getMock(); $this->_entityAdapter->expects($this->once()) ->method('setSource') ->with($csvMock) ->willReturnSelf(); $this->_entityAdapter->expects($this->once()) ->method('validateData'); $this->import->expects($this->any()) ->method('_getEntityAdapter') ->willReturn($this->_entityAdapter); $this->import->expects($this->once()) ->method('getProcessedRowsCount') ->willReturn(0); $this->import->expects($this->any()) ->method('getData') ->willReturnMap( [ [Import::FIELD_NAME_VALIDATION_STRATEGY, null, $validationStrategy], [Import::FIELD_NAME_ALLOWED_ERROR_COUNT, null, $allowedErrorCount], ] ); $this->assertTrue($this->import->validateSource($csvMock)); $logTrace = $this->import->getFormatedLogTrace(); $this->assertStringContainsString('Begin data validation', $logTrace); $this->assertStringContainsString('This file does not contain any data', $logTrace); $this->assertStringContainsString('Import data validation is complete', $logTrace); } public function testInvalidateIndex() { $indexers = [ 'indexer_1' => 'indexer_1', 'indexer_2' => 'indexer_2' ]; $indexer1 = $this->getMockBuilder(IndexerInterface::class) ->getMockForAbstractClass(); $indexer2 = clone $indexer1; $logger = $this->getMockBuilder(LoggerInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $indexer1->expects($this->once()) ->method('isScheduled') ->willReturn(true); $indexer1->expects($this->never()) ->method('invalidate'); $indexer2->expects($this->once()) ->method('isScheduled') ->willReturn(false); $indexer2->expects($this->once()) ->method('invalidate'); $this->_importConfig->expects($this->atLeastOnce()) ->method('getRelatedIndexers') ->willReturn($indexers); $this->_importConfig->method('getEntities') ->willReturn(['test' => []]); $this->indexerRegistry->expects($this->any()) ->method('get') ->willReturnMap( [ ['indexer_1', $indexer1], ['indexer_2', $indexer2], ] ); $import = new Import( $logger, $this->_filesystem, $this->_importExportData, $this->_coreConfig, $this->_importConfig, $this->_entityFactory, $this->_importData, $this->_csvFactory, $this->_httpFactory, $this->_uploaderFactory, $this->_behaviorFactory, $this->indexerRegistry, $this->historyModel, $this->dateTime, [], null, null, $this->upload ); $import->setEntity('test'); $import->invalidateIndex(); } public function testInvalidateIndexWithoutIndexers() { $this->_importConfig->expects($this->once()) ->method('getRelatedIndexers') ->willReturn([]); $this->_importConfig->method('getEntities') ->willReturn(['test' => []]); $logger = $this->getMockBuilder(LoggerInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $import = new Import( $logger, $this->_filesystem, $this->_importExportData, $this->_coreConfig, $this->_importConfig, $this->_entityFactory, $this->_importData, $this->_csvFactory, $this->_httpFactory, $this->_uploaderFactory, $this->_behaviorFactory, $this->indexerRegistry, $this->historyModel, $this->dateTime, [], null, null, $this->upload ); $import->setEntity('test'); $this->assertSame($import, $import->invalidateIndex()); } public function testGetKnownEntity() { $this->_importConfig->method('getEntities') ->willReturn(['test' => []]); $logger = $this->getMockBuilder(LoggerInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $import = new Import( $logger, $this->_filesystem, $this->_importExportData, $this->_coreConfig, $this->_importConfig, $this->_entityFactory, $this->_importData, $this->_csvFactory, $this->_httpFactory, $this->_uploaderFactory, $this->_behaviorFactory, $this->indexerRegistry, $this->historyModel, $this->dateTime, [], null, null, $this->upload ); $import->setEntity('test'); $entity = $import->getEntity(); self::assertSame('test', $entity); } /** * @dataProvider unknownEntitiesProvider */ public function testGetUnknownEntity($entity) { $this->expectException(LocalizedException::class); $this->expectExceptionMessage('Entity is unknown'); $this->_importConfig->method('getEntities') ->willReturn(['test' => []]); $logger = $this->getMockBuilder(LoggerInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $import = new Import( $logger, $this->_filesystem, $this->_importExportData, $this->_coreConfig, $this->_importConfig, $this->_entityFactory, $this->_importData, $this->_csvFactory, $this->_httpFactory, $this->_uploaderFactory, $this->_behaviorFactory, $this->indexerRegistry, $this->historyModel, $this->dateTime, [], null, null, $this->upload ); $import->setEntity($entity); $import->getEntity(); } /** * @return array */ public function unknownEntitiesProvider() { return [ [''], ['foo'], ]; } /** * @todo to implement it. */ public function testGetUniqueEntityBehaviors() { $this->markTestSkipped('This test has not been implemented yet.'); } /** * Cover isReportEntityType(). * * @dataProvider isReportEntityTypeDataProvider */ public function testIsReportEntityType($entity, $getEntityResult, $expectedResult) { $importMock = $this->getMockBuilder(Import::class) ->disableOriginalConstructor() ->setMethods( ['getEntity', '_getEntityAdapter', 'getEntityTypeCode', 'isNeedToLogInHistory'] ) ->getMock(); $importMock->expects($this->any())->method('_getEntityAdapter')->willReturnSelf(); $importMock->expects($this->any())->method('getEntityTypeCode')->willReturn('catalog_product'); $this->_importConfig ->expects($this->any()) ->method('getEntities') ->willReturn( [ 'advanced_pricing' => [ 'model' => 'advanced_pricing' ] ] ); $this->_entityFactory->expects($this->any())->method('create')->willReturnSelf(); $this->setPropertyValue($importMock, '_importConfig', $this->_importConfig); $this->setPropertyValue($importMock, '_entityFactory', $this->_entityFactory); $importMock ->expects($this->any()) ->method('getEntity') ->willReturn($getEntityResult); $actualResult = $importMock->isReportEntityType($entity); $this->assertEquals($expectedResult, $actualResult); } /** * Cover isReportEntityType(). * * @dataProvider isReportEntityTypeExceptionDataProvider */ public function testIsReportEntityTypeException($entity, $getEntitiesResult, $getEntityResult, $expectedResult) { $this->expectException(LocalizedException::class); $importMock = $this->getMockBuilder(Import::class) ->disableOriginalConstructor() ->setMethods( ['getEntity', '_getEntityAdapter', 'getEntityTypeCode', 'isNeedToLogInHistory'] ) ->getMock(); $importMock->expects($this->any())->method('_getEntityAdapter')->willReturnSelf(); $importMock->expects($this->any())->method('getEntityTypeCode')->willReturn('catalog_product'); $this->_importConfig ->expects($this->any()) ->method('getEntities') ->willReturn($getEntitiesResult); $this->_entityFactory->expects($this->any())->method('create')->willReturn(''); $this->setPropertyValue($importMock, '_importConfig', $this->_importConfig); $this->setPropertyValue($importMock, '_entityFactory', $this->_entityFactory); $importMock ->expects($this->any()) ->method('getEntity') ->willReturn($getEntityResult); $actualResult = $importMock->isReportEntityType($entity); $this->assertEquals($expectedResult, $actualResult); } /** * Cover createHistoryReport(). */ public function testCreateHistoryReportEmptyReportEntityType() { $sourceFileRelative = 'sourceFileRelative'; $entity = 'entity val'; $extension = null; $result = null; $this->import ->expects($this->once()) ->method('isReportEntityType') ->with($entity) ->willReturn(false); $this->_varDirectory ->expects($this->never()) ->method('getRelativePath'); $this->_varDirectory ->expects($this->never()) ->method('copyFile'); $this->dateTime ->expects($this->never()) ->method('gmtTimestamp'); $this->historyModel ->expects($this->never()) ->method('addReport'); $args = [ $sourceFileRelative, $entity, $extension, $result ]; $actualResult = $this->invokeMethod($this->import, 'createHistoryReport', $args); $this->assertEquals($this->import, $actualResult); } /** * Cover createHistoryReport(). */ public function testCreateHistoryReportSourceFileRelativeIsArray() { $sourceFileRelative = [ 'file_name' => 'sourceFileRelative value', ]; $sourceFileRelativeNew = 'sourceFileRelative new value'; $entity = ''; $extension = null; $result = ''; $fileName = $sourceFileRelative['file_name']; $gmtTimestamp = 1234567; $copyName = $gmtTimestamp . '_' . $fileName; $this->import ->expects($this->once()) ->method('isReportEntityType') ->with($entity) ->willReturn(true); $this->_varDirectory ->expects($this->once()) ->method('getRelativePath') ->with(Import::IMPORT_DIR . $fileName) ->willReturn($sourceFileRelativeNew); $this->dateTime ->expects($this->once()) ->method('gmtTimestamp') ->willReturn($gmtTimestamp); $this->historyModel ->expects($this->once()) ->method('addReport') ->with($copyName); $args = [ $sourceFileRelative, $entity, $extension, $result ]; $actualResult = $this->invokeMethod($this->import, 'createHistoryReport', $args); $this->assertEquals($this->import, $actualResult); } /** * Cover createHistoryReport(). */ public function testCreateHistoryReportSourceFileRelativeIsNotArrayResultIsSet() { $sourceFileRelative = 'not array'; $entity = ''; $extension = null; $result = [ 'name' => 'result value', ]; $fileName = $result['name']; $gmtTimestamp = 1234567; $copyName = $gmtTimestamp . '_' . $fileName; $this->import ->expects($this->once()) ->method('isReportEntityType') ->with($entity) ->willReturn(true); $this->_varDirectory ->expects($this->never()) ->method('getRelativePath'); $this->dateTime ->expects($this->once()) ->method('gmtTimestamp') ->willReturn($gmtTimestamp); $this->historyModel ->expects($this->once()) ->method('addReport') ->with($copyName); $args = [ $sourceFileRelative, $entity, $extension, $result ]; $actualResult = $this->invokeMethod($this->import, 'createHistoryReport', $args); $this->assertEquals($this->import, $actualResult); } /** * Cover createHistoryReport(). */ public function testCreateHistoryReportExtensionIsSet() { $sourceFileRelative = 'not array'; $entity = 'entity value'; $extension = 'extension value'; $result = []; $fileName = $entity . $extension; $gmtTimestamp = 1234567; $copyName = $gmtTimestamp . '_' . $fileName; $this->import ->expects($this->once()) ->method('isReportEntityType') ->with($entity) ->willReturn(true); $this->_varDirectory ->expects($this->never()) ->method('getRelativePath'); $this->dateTime ->expects($this->once()) ->method('gmtTimestamp') ->willReturn($gmtTimestamp); $this->historyModel ->expects($this->once()) ->method('addReport') ->with($copyName); $args = [ $sourceFileRelative, $entity, $extension, $result ]; $actualResult = $this->invokeMethod($this->import, 'createHistoryReport', $args); $this->assertEquals($this->import, $actualResult); } /** * Cover createHistoryReport(). */ public function testCreateHistoryReportThrowException() { $this->expectException(LocalizedException::class); $this->expectExceptionMessage('Source file coping failed'); $sourceFileRelative = null; $entity = ''; $extension = ''; $result = ''; $gmtTimestamp = 1234567; $this->import ->expects($this->once()) ->method('isReportEntityType') ->with($entity) ->willReturn(true); $this->_varDirectory ->expects($this->never()) ->method('getRelativePath'); $phrase = $this->createMock(Phrase::class); $phrase->method('render')->willReturn(''); $this->_driver ->expects($this->any()) ->method('fileGetContents') ->willReturnCallback( function () use ($phrase) { throw new FileSystemException($phrase); } ); $this->dateTime ->expects($this->once()) ->method('gmtTimestamp') ->willReturn($gmtTimestamp); $args = [ $sourceFileRelative, $entity, $extension, $result ]; $actualResult = $this->invokeMethod($this->import, 'createHistoryReport', $args); $this->assertEquals($this->import, $actualResult); } /** * Dataprovider for isReportEntityType() * * @return array */ public function isReportEntityTypeDataProvider() { return [ [ '$entity' => null, '$getEntityResult' => null, '$expectedResult' => false, ], [ '$entity' => 'advanced_pricing', '$getEntityResult' => 'advanced_pricing', '$expectedResult' => null, ], ]; } /** * Dataprovider for isReportEntityTypeException() * * @return array */ public function isReportEntityTypeExceptionDataProvider() { return [ [ '$entity' => 'entity', '$getEntitiesResult' => ['catalog_product' => ['model' => 'catalog_product']], '$getEntityResult' => 'catalog_product', '$expectedResult' => false, ], [ '$entity' => 'advanced_pricing', '$getEntitiesResult' => ['catalog_product' => ['model' => 'catalog_product']], '$getEntityResult' => 'advanced_pricing', '$expectedResult' => true, ], ]; } /** * Set property for an object. * * @param object $object * @param string $property * @param mixed $value */ protected function setPropertyValue(&$object, $property, $value) { $reflection = new \ReflectionClass(get_class($object)); $reflectionProperty = $reflection->getProperty($property); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($object, $value); return $object; } /** * Invoke any method of an object. * * @param $object * @param $methodName * @param array $parameters * @return mixed */ protected function invokeMethod(&$object, $methodName, array $parameters = []) { $reflection = new \ReflectionClass(get_class($object)); $method = $reflection->getMethod($methodName); $method->setAccessible(true); return $method->invokeArgs($object, $parameters); } }