Skip to content

Commit

Permalink
Preserve asset data from fields when running statamic:assets:meta gen…
Browse files Browse the repository at this point in the history
…eration command (#6854)
  • Loading branch information
ncla committed Nov 1, 2022
1 parent 5f617d6 commit 7ce9b4d
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/Console/Commands/AssetsMeta.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public function handle()
$bar = $this->output->createProgressBar($assets->count());

$assets->each(function ($asset) use ($bar) {
$asset->hydrate();
$asset->save();
$bar->advance();
});
Expand All @@ -32,6 +33,9 @@ public function handle()
$this->info('Asset metadata generated');
}

/**
* @return \Statamic\Assets\AssetCollection
*/
protected function getAssets()
{
if (! $container = $this->argument('container')) {
Expand Down
100 changes: 100 additions & 0 deletions tests/Console/Commands/AssetsMetaTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
<?php

namespace Tests\Console\Commands;

use Illuminate\Support\Facades\Storage;
use Statamic\Assets\AssetContainer;
use Statamic\Facades\AssetContainer as AssetContainerFacade;
use Statamic\Facades\YAML;
use Statamic\Support\Arr;
use Tests\PreventSavingStacheItemsToDisk;
use Tests\TestCase;

class AssetsMetaTest extends TestCase
{
use PreventSavingStacheItemsToDisk;

/**
* @var AssetContainer
*/
private $container;

/**
* @var array
*/
private $sampleTextFileContentArray = [
'data' => [
'foo' => 'bar',
],
'size' => 6,
'last_modified' => 1665086377,
'width' => null,
'height' => null,
'mime_type' => 'text/plain',
'duration' => null,
];

public function setUp(): void
{
parent::setUp();

Storage::fake('test');
}

private function containerWithDisk()
{
config(['filesystems.disks.test' => [
'driver' => 'local',
'root' => __DIR__.'/__fixtures__/container',
]]);

$container = (new AssetContainer)->handle('test')->disk('test');

AssetContainerFacade::partialMock()
->shouldReceive('findByHandle')
->andReturn($container);

return $container;
}

/** @test */
public function it_generates_one_asset_meta_file_for_asset_with_no_meta_file()
{
$this->containerWithDisk();

Storage::disk('test')->assertMissing('foo/bar.txt');
Storage::disk('test')->assertMissing('foo/.meta/bar.txt.yaml');

Storage::disk('test')->put('foo/bar.txt', 'foobar');

Storage::disk('test')->assertExists('foo/bar.txt');

Storage::disk('test')->assertMissing('foo/.meta/bar.txt.yaml');

$this->artisan('statamic:assets:meta test_container')
->expectsOutput('Asset metadata generated');

Storage::disk('test')->assertExists('foo/bar.txt');
Storage::disk('test')->assertExists('foo/.meta/bar.txt.yaml');
}

/** @test */
public function it_preserves_data_property_in_meta_data_file()
{
$this->containerWithDisk();

Storage::disk('test')->put('foo/bar.txt', 'foobar');
Storage::disk('test')->put(
'foo/.meta/bar.txt.yaml',
YAML::dump($this->sampleTextFileContentArray)
);

$this->artisan('statamic:assets:meta test_container')
->expectsOutput('Asset metadata generated');

$this->assertEquals(
Arr::get(YAML::parse(Storage::disk('test')->get('foo/.meta/bar.txt.yaml')), 'data.foo'),
'bar'
);
}
}

0 comments on commit 7ce9b4d

Please sign in to comment.