Skip to content

Commit 2e3c569

Browse files
author
Graham Wharton
committed
Fixed error in Database Media Storage deleteFolder function. Now correctly deletes folder.
1 parent 89cf888 commit 2e3c569

File tree

3 files changed

+92
-4
lines changed

3 files changed

+92
-4
lines changed

app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Database.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,10 +341,14 @@ public function deleteFolder($folderName = '')
341341
return;
342342
}
343343

344-
$likeExpression = $this->_resourceHelper->addLikeEscape($folderName . '/', ['position' => 'start']);
345344
$this->getConnection()->delete(
346345
$this->getMainTable(),
347-
new \Zend_Db_Expr('filename LIKE ' . $likeExpression)
346+
new \Zend_Db_Expr(
347+
'directory LIKE ' .
348+
$this->_resourceHelper->addLikeEscape($folderName . '/', ['position' => 'start'])
349+
. ' ' . \Magento\Framework\DB\Select::SQL_OR . ' ' .
350+
$this->getConnection()->prepareSqlCondition('directory', ['seq' => $folderName])
351+
)
348352
);
349353
}
350354

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\MediaStorage\Helper\File\Storage;
7+
8+
use Magento\Framework\ObjectManagerInterface;
9+
use Magento\TestFramework\Helper\Bootstrap;
10+
use Magento\Framework\Filesystem\Directory\WriteInterface;
11+
use Magento\Framework\Filesystem;
12+
use Magento\Framework\App\Filesystem\DirectoryList;
13+
14+
/**
15+
* Integration tests for Magento\MediaStorage\Helper\File\Storage\Database
16+
*/
17+
class DatabaseTest extends \PHPUnit\Framework\TestCase
18+
{
19+
/**
20+
* @var ObjectManagerInterface
21+
*/
22+
private $objectManager;
23+
24+
/**
25+
* @var Database
26+
*/
27+
private $databaseHelper;
28+
29+
/**
30+
* @var WriteInterface
31+
*/
32+
private $mediaDirectory;
33+
34+
/**
35+
* @var Filesystem
36+
*/
37+
private $filesystem;
38+
39+
/**
40+
* @inheritDoc
41+
*/
42+
protected function setUp()
43+
{
44+
parent::setUp();
45+
$this->objectManager = Bootstrap::getObjectManager();
46+
$this->filesystem = $this->objectManager->get(Filesystem::class);
47+
$this->mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA);
48+
}
49+
50+
/**
51+
* test for \Magento\MediaStorage\Model\File\Storage\Database::deleteFolder()
52+
*
53+
* @magentoDataFixture Magento/MediaStorage/_files/database_mode.php
54+
*/
55+
public function testDeleteFolder()
56+
{
57+
$this->databaseHelper = $this->objectManager->get(
58+
Database::class
59+
);
60+
61+
$filenames = [
62+
'test1/test2/test3/test4.dat',
63+
'test1/test2/test3/test4a.dat',
64+
'test5/test6/test7.dat',
65+
'test5/test6a/test7a.dat',
66+
'test8/test9.dat'
67+
];
68+
69+
foreach ($filenames as $filename) {
70+
$this->mediaDirectory->writeFile($filename, '');
71+
$this->databaseHelper->saveFile($filename);
72+
$this->assertEquals(true, $this->databaseHelper->fileExists($filename));
73+
}
74+
75+
$this->databaseHelper->deleteFolder('test1/test2/test3');
76+
$this->databaseHelper->deleteFolder('test5');
77+
$this->databaseHelper->deleteFolder('test8');
78+
79+
foreach ($filenames as $filename) {
80+
$this->assertEquals(false, $this->databaseHelper->fileExists($filename));
81+
$this->mediaDirectory->delete($filename);
82+
}
83+
}
84+
}

dev/tests/integration/testsuite/Magento/MediaStorage/_files/database_mode.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
*/
66
declare(strict_types=1);
77

8-
/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */
8+
/** @var $objectManager \Magento\TestFramework\ObjectManager */
99
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
10+
1011
/** @var $database \Magento\MediaStorage\Helper\File\Storage\Database */
1112
$database = $objectManager->get(\Magento\MediaStorage\Helper\File\Storage\Database::class);
12-
1313
$database->getStorageDatabaseModel()->init();
1414

1515
$config = $objectManager->get(Magento\Framework\App\Config\ConfigResource\ConfigInterface::class);

0 commit comments

Comments
 (0)