99use Magento \Catalog \Model \Entity \Attribute ;
1010use Magento \Catalog \Model \Product ;
1111use Magento \Framework \Phrase ;
12+ use Magento \MediaStorage \Helper \File \Storage \Database ;
1213
1314/**
1415 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -50,6 +51,11 @@ class ContentTest extends \PHPUnit\Framework\TestCase
5051 */
5152 protected $ imageHelper ;
5253
54+ /**
55+ * @var \Magento\MediaStorage\Helper\File\Storage\Database|\PHPUnit_Framework_MockObject_MockObject
56+ */
57+ protected $ databaseMock ;
58+
5359 /**
5460 * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
5561 */
@@ -71,13 +77,18 @@ public function setUp()
7177 ->disableOriginalConstructor ()
7278 ->getMock ();
7379
80+ $ this ->databaseMock = $ this ->getMockBuilder (Database::class)
81+ ->disableOriginalConstructor ()
82+ ->getMock ();
83+
7484 $ this ->objectManager = new \Magento \Framework \TestFramework \Unit \Helper \ObjectManager ($ this );
7585 $ this ->content = $ this ->objectManager ->getObject (
7686 \Magento \Catalog \Block \Adminhtml \Product \Helper \Form \Gallery \Content::class,
7787 [
7888 'mediaConfig ' => $ this ->mediaConfigMock ,
7989 'jsonEncoder ' => $ this ->jsonEncoderMock ,
80- 'filesystem ' => $ this ->fileSystemMock
90+ 'filesystem ' => $ this ->fileSystemMock ,
91+ 'fileStorageDatabase ' => $ this ->databaseMock
8192 ]
8293 );
8394 }
@@ -143,6 +154,13 @@ public function testGetImagesJson()
143154 $ this ->readMock ->expects ($ this ->any ())->method ('stat ' )->willReturnMap ($ sizeMap );
144155 $ this ->jsonEncoderMock ->expects ($ this ->once ())->method ('encode ' )->willReturnCallback ('json_encode ' );
145156
157+ $ this ->readMock ->expects ($ this ->any ())
158+ ->method ('isFile ' )
159+ ->will ($ this ->returnValue (true ));
160+ $ this ->databaseMock ->expects ($ this ->any ())
161+ ->method ('checkDbUsage ' )
162+ ->will ($ this ->returnValue (false ));
163+
146164 $ this ->assertSame (json_encode ($ imagesResult ), $ this ->content ->getImagesJson ());
147165 }
148166
@@ -210,6 +228,14 @@ public function testGetImagesJsonWithException()
210228 $ this ->fileSystemMock ->expects ($ this ->any ())->method ('getDirectoryRead ' )->willReturn ($ this ->readMock );
211229 $ this ->mediaConfigMock ->expects ($ this ->any ())->method ('getMediaUrl ' );
212230 $ this ->mediaConfigMock ->expects ($ this ->any ())->method ('getMediaPath ' );
231+
232+ $ this ->readMock ->expects ($ this ->any ())
233+ ->method ('isFile ' )
234+ ->will ($ this ->returnValue (true ));
235+ $ this ->databaseMock ->expects ($ this ->any ())
236+ ->method ('checkDbUsage ' )
237+ ->will ($ this ->returnValue (false ));
238+
213239 $ this ->readMock ->expects ($ this ->any ())->method ('stat ' )->willReturnOnConsecutiveCalls (
214240 $ this ->throwException (
215241 new \Magento \Framework \Exception \FileSystemException (new Phrase ('test ' ))
@@ -365,4 +391,52 @@ private function getMediaAttribute(string $label, string $attributeCode)
365391
366392 return $ mediaAttribute ;
367393 }
394+
395+ /**
396+ * Test GetImagesJson() calls MediaStorage functions to obtain image from DB prior to stat call
397+ *
398+ * @return void
399+ */
400+ public function testGetImagesJsonMediaStorageMode ()
401+ {
402+ $ images = [
403+ 'images ' => [
404+ [
405+ 'value_id ' => '0 ' ,
406+ 'file ' => 'file_1.jpg ' ,
407+ 'media_type ' => 'image ' ,
408+ 'position ' => '0 '
409+ ]
410+ ]
411+ ];
412+
413+ $ mediaPath = [
414+ ['file_1.jpg ' , 'catalog/product/image_1.jpg ' ]
415+ ];
416+
417+ $ this ->content ->setElement ($ this ->galleryMock );
418+
419+ $ this ->galleryMock ->expects ($ this ->once ())
420+ ->method ('getImages ' )
421+ ->willReturn ($ images );
422+ $ this ->fileSystemMock ->expects ($ this ->once ())
423+ ->method ('getDirectoryRead ' )
424+ ->willReturn ($ this ->readMock );
425+ $ this ->mediaConfigMock ->expects ($ this ->any ())
426+ ->method ('getMediaPath ' )
427+ ->willReturnMap ($ mediaPath );
428+
429+ $ this ->readMock ->expects ($ this ->any ())
430+ ->method ('isFile ' )
431+ ->will ($ this ->returnValue (false ));
432+ $ this ->databaseMock ->expects ($ this ->any ())
433+ ->method ('checkDbUsage ' )
434+ ->will ($ this ->returnValue (true ));
435+
436+ $ this ->databaseMock ->expects ($ this ->once ())
437+ ->method ('saveFileToFilesystem ' )
438+ ->with ('catalog/product/image_1.jpg ' );
439+
440+ $ this ->content ->getImagesJson ();
441+ }
368442}
0 commit comments