Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions src/Assets/Asset.php
Original file line number Diff line number Diff line change
Expand Up @@ -744,9 +744,7 @@ public function containerHandle()
*/
public function rename($filename, $unique = false)
{
$filename = $unique ? $this->ensureUniqueFilename($this->folder(), $filename) : $filename;

return $this->move($this->folder(), $filename);
return $this->move($this->folder(), $filename, $unique);
}

/**
Expand All @@ -756,9 +754,10 @@ public function rename($filename, $unique = false)
* @param string|null $filename The new filename, if renaming.
* @return $this
*/
public function move($folder, $filename = null)
public function move($folder, $filename = null, $unique = false)
{
$filename = Uploader::getSafeFilename($filename ?: $this->filename());
$filename = $unique ? $this->ensureUniqueFilename($folder, $filename) : $filename;
$oldPath = $this->path();
$oldMetaPath = $this->metaPath();
$newPath = Str::removeLeft(Path::tidy($folder.'/'.$filename.'.'.pathinfo($oldPath, PATHINFO_EXTENSION)), '/');
Expand Down
64 changes: 64 additions & 0 deletions tests/Assets/AssetTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -1260,6 +1260,70 @@ public function it_doesnt_lowercase_moved_files_when_configured()
], $container->assets('/', true)->map->path()->all());
}

#[Test]
public function it_can_be_moved_to_another_folder_with_a_unique_filename_when_conflict_exists()
{
Storage::fake('local');
$disk = Storage::disk('local');
$disk->put('old/asset.txt', 'The asset contents');
$disk->put('new/asset.txt', 'Existing asset');
$disk->put('new/asset-1.txt', 'Another existing asset');
$container = Facades\AssetContainer::make('test')->disk('local');
Facades\AssetContainer::shouldReceive('save')->with($container);
Facades\AssetContainer::shouldReceive('findByHandle')->with('test')->andReturn($container);
$asset = $container->makeAsset('old/asset.txt')->data(['foo' => 'bar']);
$asset->save();

$return = $asset->move('new', null, true);

$this->assertEquals($asset, $return);
$disk->assertMissing('old/asset.txt');
$disk->assertExists('new/asset-2.txt');
$this->assertEquals('new/asset-2.txt', $asset->path());
}

#[Test]
public function it_can_be_moved_to_another_folder_with_unique_flag_without_renaming_when_no_conflict()
{
Storage::fake('local');
$disk = Storage::disk('local');
$disk->put('old/asset.txt', 'The asset contents');
$container = Facades\AssetContainer::make('test')->disk('local');
Facades\AssetContainer::shouldReceive('save')->with($container);
Facades\AssetContainer::shouldReceive('findByHandle')->with('test')->andReturn($container);
$asset = $container->makeAsset('old/asset.txt')->data(['foo' => 'bar']);
$asset->save();

$return = $asset->move('new', null, true);

$this->assertEquals($asset, $return);
$disk->assertMissing('old/asset.txt');
$disk->assertExists('new/asset.txt');
$this->assertEquals('new/asset.txt', $asset->path());
}

#[Test]
public function it_does_not_ensure_unique_filename_when_moving_by_default()
{
Storage::fake('local');
$disk = Storage::disk('local');
$disk->put('old/asset.txt', 'The asset contents');
$disk->put('new/asset.txt', 'Existing asset');
$container = Facades\AssetContainer::make('test')->disk('local');
Facades\AssetContainer::shouldReceive('save')->with($container);
Facades\AssetContainer::shouldReceive('findByHandle')->with('test')->andReturn($container);
$asset = $container->makeAsset('old/asset.txt')->data(['foo' => 'bar']);
$asset->save();

$return = $asset->move('new');

$this->assertEquals($asset, $return);
$disk->assertMissing('old/asset.txt');
// Without unique flag, it overwrites the existing file
$disk->assertExists('new/asset.txt');
$this->assertEquals('new/asset.txt', $asset->path());
}

#[Test]
public function it_renames()
{
Expand Down
Loading