From cb05e58ac59e30393ecaacaeddd5ae6c067ee229 Mon Sep 17 00:00:00 2001 From: Bibu Mathew Date: Fri, 2 Jan 2015 15:49:39 -0600 Subject: [PATCH 1/4] MAGETWO-31968: PHP Fatal error: Call to a member function addStreamLog() on a non-object - Fixed Fatal error - added unit test method --- .../Image/Adapter/ImageMagickTest.php | 65 +++++++++++++++++-- .../Image/Adapter/AbstractAdapter.php | 4 +- 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/ImageMagickTest.php b/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/ImageMagickTest.php index c4f223a65bdf4..d1ee42a195ebc 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/ImageMagickTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/ImageMagickTest.php @@ -4,18 +4,63 @@ */ namespace Magento\Framework\Image\Adapter; +use Magento\Framework\Filesystem\FilesystemException; +use Magento\TestFramework\Helper\ObjectManager; + class ImageMagickTest extends \PHPUnit_Framework_TestCase { /** + * @var \PHPUnit_Framework_MockObject_MockObject |\Magento\Framework\Filesystem + */ + protected $filesystemMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject |\Psr\Log\LoggerInterface + */ + protected $loggerMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Filesystem\Directory\WriteInterface + */ + protected $writeMock; + /** + * @var \Magento\Framework\Image\Adapter\ImageMagick + */ + protected $imageMagic; + + public function setup() + { + $objectManager = new ObjectManager($this); + $this->loggerMock = $this->getMockBuilder( 'Psr\Log\LoggerInterface')->getMock(); + $this->writeMock = $this->getMockBuilder('Magento\Framework\Filesystem\Directory\WriteInterface')->getMock(); + $this->filesystemMock = $this->getMock( + 'Magento\Framework\Filesystem', + ['getDirectoryWrite'], + [], + '', + false + ); + $this->filesystemMock + ->expects($this->once()) + ->method('getDirectoryWrite') + ->will($this->returnValue( $this->writeMock)); + + $this->imageMagic = $objectManager + ->getObject( + 'Magento\Framework\Image\Adapter\ImageMagick', + ['filesystem' => $this->filesystemMock, + 'logger' => $this->loggerMock] + ); + } + /** + * @param string $imagePath + * @param string $expectedMessage * @dataProvider watermarkDataProvider */ public function testWatermark($imagePath, $expectedMessage) { - $filesystem = - $this->getMockBuilder('Magento\Framework\Filesystem')->disableOriginalConstructor()->getMock(); $this->setExpectedException('LogicException', $expectedMessage); - $object = new \Magento\Framework\Image\Adapter\ImageMagick($filesystem); - $object->watermark($imagePath); + $this->imageMagic->watermark($imagePath); } /** @@ -32,4 +77,16 @@ public function watermarkDataProvider() ] ]; } + + /** + * @expectedException \Exception + * @expectedExceptionMessage Unable to write file into directory product/cache. Access forbidden. + */ + public function testSaveWithException() + { + $exception = new FilesystemException(); + $this->writeMock->method('create')->will($this->throwException($exception)); + $this->loggerMock->expects($this->once())->method('critical')->with($exception); + $this->imageMagic->save('product/cache','sample.jpg'); + } } diff --git a/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php b/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php index bd5b3a6cf2375..192ceb1e1c5d3 100644 --- a/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php +++ b/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php @@ -260,11 +260,13 @@ abstract public function getColorAt($x, $y); * Initialize default values * * @param \Magento\Framework\Filesystem $filesystem + * @param \Psr\Log\LoggerInterface $logger * @param array $data */ - public function __construct(\Magento\Framework\Filesystem $filesystem, array $data = []) + public function __construct(\Magento\Framework\Filesystem $filesystem, $logger, array $data = []) { $this->_filesystem = $filesystem; + $this->logger = $logger; $this->directoryWrite = $this->_filesystem->getDirectoryWrite(DirectoryList::ROOT); } From 467b0b53d8bb403483fd8835f8715ff4a544282e Mon Sep 17 00:00:00 2001 From: Bibu Mathew Date: Fri, 2 Jan 2015 16:29:20 -0600 Subject: [PATCH 2/4] MAGETWO-31968: PHP Fatal error: Call to a member function addStreamLog() on a non-object - Fixed unit test --- .../Magento/Framework/Image/Adapter/AbstractTest.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/AbstractTest.php b/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/AbstractTest.php index d0be95af7b24b..6e9f0ea029511 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/AbstractTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/AbstractTest.php @@ -25,6 +25,11 @@ class AbstractTest extends \PHPUnit_Framework_TestCase */ protected $filesystemMock; + /** + * @var \PHPUnit_Framework_MockObject_MockObject |\Psr\Log\LoggerInterface + */ + protected $loggerMock; + protected function setUp() { $this->directoryWriteMock = $this->getMock( @@ -48,10 +53,11 @@ protected function setUp() )->will( $this->returnValue($this->directoryWriteMock) ); + $this->loggerMock = $this->getMockBuilder( 'Psr\Log\LoggerInterface')->getMock(); $this->_model = $this->getMockForAbstractClass( 'Magento\Framework\Image\Adapter\AbstractAdapter', - [$this->filesystemMock] + [$this->filesystemMock,$this->loggerMock] ); } @@ -60,6 +66,7 @@ protected function tearDown() $this->directoryWriteMock = null; $this->_model = null; $this->filesystemMock = null; + $this->loggerMock = null; } /** From b2bcbba09a4652e0fe11664ef7591e4dc6eb197b Mon Sep 17 00:00:00 2001 From: Bibu Mathew Date: Fri, 2 Jan 2015 16:49:02 -0600 Subject: [PATCH 3/4] MAGETWO-31968: PHP Fatal error: Call to a member function addStreamLog() on a non-object - Updated the abstract constructor with logger type --- .../Magento/Framework/Image/Adapter/AbstractAdapter.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php b/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php index 192ceb1e1c5d3..e666cec53545c 100644 --- a/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php +++ b/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php @@ -263,8 +263,11 @@ abstract public function getColorAt($x, $y); * @param \Psr\Log\LoggerInterface $logger * @param array $data */ - public function __construct(\Magento\Framework\Filesystem $filesystem, $logger, array $data = []) - { + public function __construct( + \Magento\Framework\Filesystem $filesystem, + \Psr\Log\LoggerInterface $logger, + array $data = [] + ) { $this->_filesystem = $filesystem; $this->logger = $logger; $this->directoryWrite = $this->_filesystem->getDirectoryWrite(DirectoryList::ROOT); From 0433d5597efa8d32bb420809c6d986805f27f057 Mon Sep 17 00:00:00 2001 From: Joan He Date: Fri, 9 Jan 2015 08:27:03 -0600 Subject: [PATCH 4/4] MAGETWO-31968: Fixed PHP Fatal error: Call to a member function addStreamLog() on a non-object --- .../testsuite/Magento/Framework/Image/Adapter/AbstractTest.php | 2 +- .../Magento/Framework/Image/Adapter/ImageMagickTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/AbstractTest.php b/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/AbstractTest.php index 6e9f0ea029511..bbcefd1ee6265 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/AbstractTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/AbstractTest.php @@ -57,7 +57,7 @@ protected function setUp() $this->_model = $this->getMockForAbstractClass( 'Magento\Framework\Image\Adapter\AbstractAdapter', - [$this->filesystemMock,$this->loggerMock] + [$this->filesystemMock, $this->loggerMock] ); } diff --git a/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/ImageMagickTest.php b/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/ImageMagickTest.php index d1ee42a195ebc..b48a2553c96f8 100644 --- a/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/ImageMagickTest.php +++ b/dev/tests/unit/testsuite/Magento/Framework/Image/Adapter/ImageMagickTest.php @@ -87,6 +87,6 @@ public function testSaveWithException() $exception = new FilesystemException(); $this->writeMock->method('create')->will($this->throwException($exception)); $this->loggerMock->expects($this->once())->method('critical')->with($exception); - $this->imageMagic->save('product/cache','sample.jpg'); + $this->imageMagic->save('product/cache', 'sample.jpg'); } }