Skip to content

Commit 7b2f66c

Browse files
author
Graham Wharton
committed
In Database Media Storage Mode, the file is downloaded from the database if it does not exist locally. New integration test.
1 parent 80ae9bd commit 7b2f66c

File tree

5 files changed

+50
-29
lines changed

5 files changed

+50
-29
lines changed

app/code/Magento/MediaStorage/Service/ImageResize.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,11 @@ public function resizeFromThemes(array $themes = null): \Generator
183183
$mediastoragefilename = $this->imageConfig->getMediaPath($originalImageName);
184184
$originalImagePath = $this->mediaDirectory->getAbsolutePath($mediastoragefilename);
185185

186+
if ($this->fileStorageDatabase->checkDbUsage()) {
187+
$this->fileStorageDatabase->saveFileToFilesystem($mediastoragefilename);
188+
}
186189
if ($this->mediaDirectory->isFile($originalImagePath)) {
187190
foreach ($viewImages as $viewImage) {
188-
if ($this->fileStorageDatabase->checkDbUsage()) {
189-
$this->fileStorageDatabase->saveFileToFilesystem($mediastoragefilename);
190-
}
191191
$this->resize($viewImage, $originalImagePath, $originalImageName);
192192
}
193193
} else {

dev/tests/integration/testsuite/Magento/Catalog/_files/product_image.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
67

78
use Magento\Framework\App\Filesystem\DirectoryList;
89

910
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
1011
/** @var $mediaConfig \Magento\Catalog\Model\Product\Media\Config */
1112
$mediaConfig = $objectManager->get(\Magento\Catalog\Model\Product\Media\Config::class);
13+
/** @var $database \Magento\MediaStorage\Helper\File\Storage\Database */
14+
$database = $objectManager->get(\Magento\MediaStorage\Helper\File\Storage\Database::class);
1215

1316
/** @var $mediaDirectory \Magento\Framework\Filesystem\Directory\WriteInterface */
1417
$mediaDirectory = $objectManager->get(\Magento\Framework\Filesystem::class)
@@ -28,4 +31,5 @@
2831

2932
copy($sourceFilePath, $targetTmpFilePath);
3033
// Copying the image to target dir is not necessary because during product save, it will be moved there from tmp dir
34+
$database->saveFile($targetTmpFilePath);
3135
}

dev/tests/integration/testsuite/Magento/Catalog/_files/product_image_rollback.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,18 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
use Magento\Framework\App\Filesystem\DirectoryList;
79

810
/** @var $config \Magento\Catalog\Model\Product\Media\Config */
911
$config = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
1012
\Magento\Catalog\Model\Product\Media\Config::class
1113
);
14+
/** @var $database \Magento\MediaStorage\Helper\File\Storage\Database */
15+
$database = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
16+
\Magento\MediaStorage\Helper\File\Storage\Database::class
17+
);
1218

1319
/** @var \Magento\Framework\Filesystem\Directory\WriteInterface $mediaDirectory */
1420
$mediaDirectory = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
@@ -19,3 +25,6 @@
1925

2026
$mediaDirectory->delete($config->getBaseMediaPath());
2127
$mediaDirectory->delete($config->getBaseTmpMediaPath());
28+
29+
$database->deleteFolder($config->getBaseMediaPath());
30+
$database->deleteFolder($config->getBaseTmpMediaPath());

dev/tests/integration/testsuite/Magento/MediaStorage/Console/Command/ImageResizeCommandTest.php

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6-
declare(strict_types = 1);
6+
declare(strict_types=1);
77

88
namespace Magento\MediaStorage\Console\Command;
99

@@ -15,8 +15,6 @@
1515
use Magento\Framework\ObjectManagerInterface;
1616
use Magento\TestFramework\Helper\Bootstrap;
1717
use Symfony\Component\Console\Tester\CommandTester;
18-
use Symfony\Component\Console\Input\ArgvInput;
19-
use Symfony\Component\Console\Output\ConsoleOutput;
2018

2119
/**
2220
* Test for \Magento\MediaStorage\Console\Command\ImagesResizeCommand.
@@ -38,21 +36,6 @@ class ImageResizeCommandTest extends \PHPUnit\Framework\TestCase
3836
*/
3937
private $objectManager;
4038

41-
/**
42-
* @var \Magento\MediaStorage\Console\Command\ImagesResizeCommand
43-
*/
44-
private $imageResizeCommand;
45-
46-
/**
47-
* @var ArgvInput
48-
*/
49-
private $input;
50-
51-
/**
52-
* @var ConsoleOutput
53-
*/
54-
private $output;
55-
5639
/**
5740
* @var WriteInterface
5841
*/
@@ -76,12 +59,6 @@ protected function setUp()
7659
parent::setUp();
7760

7861
$this->objectManager = Bootstrap::getObjectManager();
79-
$this->imageResizeCommand = $this->objectManager->create(
80-
\Magento\MediaStorage\Console\Command\ImagesResizeCommand::class
81-
);
82-
83-
$this->input = $this->objectManager->create(ArgvInput::class, ['argv' => ['catalog:image:resize']]);
84-
$this->output = $this->objectManager->create(ConsoleOutput::class);
8562
$this->fileName = 'image.jpg';
8663
$this->command = $this->objectManager->get(ImagesResizeCommand::class);
8764
$this->tester = new CommandTester($this->command);
@@ -96,8 +73,8 @@ protected function setUp()
9673
*/
9774
public function testRunResizeWithMissingFile()
9875
{
99-
$resultCode = $this->imageResizeCommand->run($this->input, $this->output);
100-
$this->assertSame($resultCode, 0);
76+
$this->tester->execute([]);
77+
$this->assertContains('original image not found', $this->tester->getDisplay());
10178
}
10279

10380
/**
@@ -132,4 +109,17 @@ public function testExecuteWithZeroByteImage()
132109
$this->assertContains('Wrong file', $this->tester->getDisplay());
133110
$this->mediaDirectory->getDriver()->deleteFile($this->mediaDirectory->getAbsolutePath($this->fileName));
134111
}
112+
113+
/**
114+
* Test that catalog:image:resize command executes successfully in database storage mode
115+
* with file missing from local folder
116+
*
117+
* @magentoDataFixture Magento/MediaStorage/_files/database_mode.php
118+
* @magentoDataFixture Magento/MediaStorage/_files/product_with_missed_image.php
119+
*/
120+
public function testDatabaseStorageMissingFile()
121+
{
122+
$this->tester->execute([]);
123+
$this->assertContains('Product images resized successfully', $this->tester->getDisplay());
124+
}
135125
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */
9+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
10+
/** @var $database \Magento\MediaStorage\Helper\File\Storage\Database */
11+
$database = $objectManager->get(\Magento\MediaStorage\Helper\File\Storage\Database::class);
12+
13+
$database->getStorageDatabaseModel()->init();
14+
15+
$config = $objectManager->get(Magento\Framework\App\Config\ConfigResource\ConfigInterface::class);
16+
$config->saveConfig('system/media_storage_configuration/media_storage', '1');
17+
$config->saveConfig('system/media_storage_configuration/media_database', 'default_setup');
18+
$objectManager->get(Magento\Framework\App\Config\ReinitableConfigInterface::class)->reinit();

0 commit comments

Comments
 (0)