Simplifying solution to store same filename in other locations.

Moving testcase back to the eloquent file repository test, from the FileMoverTest.
parent 1c1f974f
...@@ -46,10 +46,10 @@ class EloquentFileRepository extends EloquentBaseRepository implements FileRepos ...@@ -46,10 +46,10 @@ class EloquentFileRepository extends EloquentBaseRepository implements FileRepos
{ {
$fileName = FileHelper::slug($file->getClientOriginalName()); $fileName = FileHelper::slug($file->getClientOriginalName());
$exists = $this->model->whereFilename($fileName)->first(); $exists = $this->model->where('filename', $fileName)->where('folder_id', $parentId)->first();
if ($exists) { if ($exists) {
$fileName = $this->getNewUniqueFilename($fileName, $parentId); $fileName = $this->getNewUniqueFilename($fileName);
} }
$data = [ $data = [
...@@ -124,15 +124,14 @@ class EloquentFileRepository extends EloquentBaseRepository implements FileRepos ...@@ -124,15 +124,14 @@ class EloquentFileRepository extends EloquentBaseRepository implements FileRepos
/** /**
* @param $fileName * @param $fileName
* @param int $parentId
* @return string * @return string
*/ */
private function getNewUniqueFilename($fileName, int $parentId = 0) private function getNewUniqueFilename($fileName)
{ {
$fileNameOnly = pathinfo($fileName, PATHINFO_FILENAME); $fileNameOnly = pathinfo($fileName, PATHINFO_FILENAME);
$extension = pathinfo($fileName, PATHINFO_EXTENSION); $extension = pathinfo($fileName, PATHINFO_EXTENSION);
$models = $this->model->where('filename', 'LIKE', "$fileNameOnly%")->where('folder_id', $parentId)->get(); $models = $this->model->where('filename', 'LIKE', "$fileNameOnly%")->get();
$versionCurrent = $models->reduce(function ($carry, $model) { $versionCurrent = $models->reduce(function ($carry, $model) {
$latestFilename = pathinfo($model->filename, PATHINFO_FILENAME); $latestFilename = pathinfo($model->filename, PATHINFO_FILENAME);
...@@ -145,9 +144,6 @@ class EloquentFileRepository extends EloquentBaseRepository implements FileRepos ...@@ -145,9 +144,6 @@ class EloquentFileRepository extends EloquentBaseRepository implements FileRepos
return ($version > $carry) ? $version : $carry; return ($version > $carry) ? $version : $carry;
}, 0); }, 0);
if ($versionCurrent === 0 && $models->count() === 0) {
return $fileName;
}
return $fileNameOnly . '_' . ($versionCurrent+1) . '.' . $extension; return $fileNameOnly . '_' . ($versionCurrent+1) . '.' . $extension;
} }
......
...@@ -11,6 +11,7 @@ use Modules\Media\Events\FileWasCreated; ...@@ -11,6 +11,7 @@ use Modules\Media\Events\FileWasCreated;
use Modules\Media\Events\FileWasUpdated; use Modules\Media\Events\FileWasUpdated;
use Modules\Media\Repositories\FileRepository; use Modules\Media\Repositories\FileRepository;
use Modules\Media\Repositories\FolderRepository; use Modules\Media\Repositories\FolderRepository;
use Modules\Media\Services\FileService;
use Symfony\Component\Finder\SplFileInfo; use Symfony\Component\Finder\SplFileInfo;
use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpFoundation\File\UploadedFile;
...@@ -256,6 +257,26 @@ class EloquentFileRepositoryTest extends MediaTestCase ...@@ -256,6 +257,26 @@ class EloquentFileRepositoryTest extends MediaTestCase
$this->assertCount(2, $this->file->allForGrid()); $this->assertCount(2, $this->file->allForGrid());
} }
/** @test */
public function it_can_store_same_filename_in_other_folder_with_no_suffix()
{
$folderRepository = app(FolderRepository::class);
$folder = $folderRepository->create(['name' => 'My Folder', 'parent_id' => 0]);
$file = app(FileService::class)->store(\Illuminate\Http\UploadedFile::fake()->image('my-file.jpg'), $folder->id);
$fileTwo = app(FileService::class)->store(\Illuminate\Http\UploadedFile::fake()->image('my-file.jpg'));
$subFolder = $folderRepository->create(['name' => 'My Sub Folder', 'parent_id' => $folder->id]);
$fileThree = app(FileService::class)->store(\Illuminate\Http\UploadedFile::fake()->image('my-file.jpg'), $subFolder->id);
$this->assertTrue($this->app['files']->exists(public_path('/assets/media/my-file.jpg')));
$this->assertTrue($this->app['files']->exists(public_path('/assets/media/my-folder/my-file.jpg')));
$this->assertTrue($this->app['files']->exists(public_path('/assets/media/my-folder/my-sub-folder/my-file.jpg')));
$this->assertEquals('/assets/media/my-folder/my-file.jpg', $file->path->getRelativeUrl());
$this->assertEquals('/assets/media/my-file.jpg', $fileTwo->path->getRelativeUrl());
$this->assertEquals('/assets/media/my-folder/my-sub-folder/my-file.jpg', $fileThree->path->getRelativeUrl());
}
private function createFile($fileName = 'random/name.jpg') private function createFile($fileName = 'random/name.jpg')
{ {
return File::create([ return File::create([
......
...@@ -123,26 +123,6 @@ final class FileMoverTest extends MediaTestCase ...@@ -123,26 +123,6 @@ final class FileMoverTest extends MediaTestCase
$this->assertTrue($this->app['files']->exists(public_path('/assets/media/my-file_mediumThumb.jpg'))); $this->assertTrue($this->app['files']->exists(public_path('/assets/media/my-file_mediumThumb.jpg')));
} }
/** @test */
public function it_can_store_same_filename_in_other_folder_with_no_suffix()
{
$folderRepository = app(FolderRepository::class);
$folder = $folderRepository->create(['name' => 'My Folder', 'parent_id' => 0]);
$file = app(FileService::class)->store(\Illuminate\Http\UploadedFile::fake()->image('my-file.jpg'), $folder->id);
$fileTwo = app(FileService::class)->store(\Illuminate\Http\UploadedFile::fake()->image('my-file.jpg'));
$subFolder = $folderRepository->create(['name' => 'My Sub Folder', 'parent_id' => $folder->id]);
$fileThree = app(FileService::class)->store(\Illuminate\Http\UploadedFile::fake()->image('my-file.jpg'), $subFolder->id);
$this->assertTrue($this->app['files']->exists(public_path('/assets/media/my-file.jpg')));
$this->assertTrue($this->app['files']->exists(public_path('/assets/media/my-folder/my-file.jpg')));
$this->assertTrue($this->app['files']->exists(public_path('/assets/media/my-folder/my-sub-folder/my-file.jpg')));
$this->assertEquals('/assets/media/my-folder/my-file.jpg', $file->path->getRelativeUrl());
$this->assertEquals('/assets/media/my-file.jpg', $fileTwo->path->getRelativeUrl());
$this->assertEquals('/assets/media/my-folder/my-sub-folder/my-file.jpg', $fileThree->path->getRelativeUrl());
}
/** @test */ /** @test */
public function it_does_not_move_file_if_file_name_exists_at_location() public function it_does_not_move_file_if_file_name_exists_at_location()
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment