diff options
author | Julien Veyssier <eneiluj@posteo.net> | 2022-05-09 19:20:46 +0300 |
---|---|---|
committer | backportbot-nextcloud[bot] <backportbot-nextcloud[bot]@users.noreply.github.com> | 2022-05-09 19:52:31 +0300 |
commit | d9f888ba500604ce5537f1a4ee0b7b92dbd1948b (patch) | |
tree | 07064fb806c0d6313eebc8bebe708b6c33937d29 | |
parent | e7f130d46404f6ed38f740f70dd5ba26a3cd6570 (diff) |
refs #2338 improve and test ImageService::getUniqueFileName()
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
-rw-r--r-- | lib/Service/ImageService.php | 15 | ||||
-rw-r--r-- | tests/TextTest.php | 37 |
2 files changed, 48 insertions, 4 deletions
diff --git a/lib/Service/ImageService.php b/lib/Service/ImageService.php index 69b65a0ed..8c2bc1ee2 100644 --- a/lib/Service/ImageService.php +++ b/lib/Service/ImageService.php @@ -242,13 +242,20 @@ class ImageService { * @param string $fileName * @return string */ - private function getUniqueFileName(Folder $dir, string $fileName): string { + public static function getUniqueFileName(Folder $dir, string $fileName): string { $extension = pathinfo($fileName, PATHINFO_EXTENSION); $counter = 1; $uniqueFileName = $fileName; - while ($dir->nodeExists($uniqueFileName)) { - $counter++; - $uniqueFileName = preg_replace('/\.' . $extension . '$/', ' (' . $counter . ').' . $extension, $fileName); + if ($extension !== '') { + while ($dir->nodeExists($uniqueFileName)) { + $counter++; + $uniqueFileName = preg_replace('/\.' . $extension . '$/', ' (' . $counter . ').' . $extension, $fileName); + } + } else { + while ($dir->nodeExists($uniqueFileName)) { + $counter++; + $uniqueFileName = preg_replace('/$/', ' (' . $counter . ')', $fileName); + } } return $uniqueFileName; } diff --git a/tests/TextTest.php b/tests/TextTest.php index aeaa8d0cc..161446b8c 100644 --- a/tests/TextTest.php +++ b/tests/TextTest.php @@ -4,6 +4,7 @@ namespace OCA\Text\Tests; use OCA\Text\AppInfo\Application; use OCA\Text\Service\ImageService; +use OCP\Files\Folder; class TextTest extends \PHPUnit\Framework\TestCase { public function testDummy() { @@ -34,4 +35,40 @@ class TextTest extends \PHPUnit\Framework\TestCase { $this->assertContains($contentName, $computedNames); } } + + public function testGetUniqueFileName() { + $fileNameList = [ + 'foo.png', + 'bar', + 'plop.png', + 'plop (2).png', + 'lala.png', + 'lala (2).png', + 'lala (3).png', + 'yay.png', + 'yay (2).png', + 'yay (3).png', + 'yay (5).png', + 'file.ext.ext', + ]; + + $folder = $this->createMock(Folder::class); + $folder->expects(self::any()) + ->method('nodeExists') + ->willReturnCallback(function ($name) use ($fileNameList) { + return in_array($name, $fileNameList); + }); + + // files that do not exist yet + $this->assertEquals('doesNotExistYet', ImageService::getUniqueFileName($folder, 'doesNotExistYet')); + $this->assertEquals('doesNotExistYet.png', ImageService::getUniqueFileName($folder, 'doesNotExistYet.png')); + + // files that already exist + $this->assertEquals('foo (2).png', ImageService::getUniqueFileName($folder, 'foo.png')); + $this->assertEquals('bar (2)', ImageService::getUniqueFileName($folder, 'bar')); + $this->assertEquals('plop (3).png', ImageService::getUniqueFileName($folder, 'plop.png')); + $this->assertEquals('lala (4).png', ImageService::getUniqueFileName($folder, 'lala.png')); + $this->assertEquals('yay (4).png', ImageService::getUniqueFileName($folder, 'yay.png')); + $this->assertEquals('file.ext (2).ext', ImageService::getUniqueFileName($folder, 'file.ext.ext')); + } } |