diff --git a/src/Console/Commands/AssetsMeta.php b/src/Console/Commands/AssetsMeta.php index dc6ad80aaf2..69d6acbd162 100644 --- a/src/Console/Commands/AssetsMeta.php +++ b/src/Console/Commands/AssetsMeta.php @@ -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(); }); @@ -32,6 +33,9 @@ public function handle() $this->info('Asset metadata generated'); } + /** + * @return \Statamic\Assets\AssetCollection + */ protected function getAssets() { if (! $container = $this->argument('container')) { diff --git a/tests/Console/Commands/AssetsMetaTest.php b/tests/Console/Commands/AssetsMetaTest.php new file mode 100644 index 00000000000..01dd46976fe --- /dev/null +++ b/tests/Console/Commands/AssetsMetaTest.php @@ -0,0 +1,100 @@ + [ + '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__.'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/__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' + ); + } +}