Skip to content

Commit 0b83b98

Browse files
committed
Add support for fake assets
1 parent 254820f commit 0b83b98

File tree

5 files changed

+90
-10
lines changed

5 files changed

+90
-10
lines changed

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"fakerphp/faker": "^1.23.0",
2121
"laravel/framework": "^11.21 || ^12.0",
2222
"laravel/prompts": "^0.1.24 || ^0.2.0 || ^0.3.0",
23+
"smknstd/fakerphp-picsum-images": "^1.0",
2324
"statamic/cms": "^5.0"
2425
},
2526
"require-dev": {

src/Factories/Concerns/CreatesEntry.php

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
namespace Aerni\Factory\Factories\Concerns;
44

55
use Illuminate\Support\Arr;
6+
use Statamic\Facades\Blueprint as BlueprintFacade;
67
use Statamic\Contracts\Entries\Entry;
78
use Statamic\Facades\Entry as EntryFacade;
9+
use Statamic\Fields\Blueprint;
810

911
trait CreatesEntry
1012
{
@@ -17,8 +19,8 @@ trait CreatesEntry
1719
public function newModel(array $attributes = []): Entry
1820
{
1921
$entry = EntryFacade::make()
20-
->collection($this->collection())
21-
->blueprint($this->blueprint());
22+
->collection($this->collectionHandle())
23+
->blueprint($this->blueprintHandle());
2224

2325
if ($slug = Arr::pull($attributes, 'slug')) {
2426
$entry->slug($slug);
@@ -41,7 +43,7 @@ public function newModel(array $attributes = []): Entry
4143
return $entry->data($attributes);
4244
}
4345

44-
protected function collection(): string
46+
protected function collectionHandle(): string
4547
{
4648
return $this->collection
4749
?? str(get_class($this))
@@ -50,7 +52,7 @@ protected function collection(): string
5052
->lower();
5153
}
5254

53-
protected function blueprint(): string
55+
protected function blueprintHandle(): string
5456
{
5557
return $this->blueprint
5658
?? str(get_class($this))
@@ -59,8 +61,13 @@ protected function blueprint(): string
5961
->lower();
6062
}
6163

64+
protected function blueprint(): Blueprint
65+
{
66+
return BlueprintFacade::find("collections/{$this->collectionHandle()}/{$this->blueprintHandle()}");
67+
}
68+
6269
public function modelName(): string
6370
{
64-
return parent::modelName().'\\'.ucfirst($this->collection()).'\\'.ucfirst($this->blueprint());
71+
return parent::modelName().'\\'.ucfirst($this->collectionHandle()).'\\'.ucfirst($this->blueprintHandle());
6572
}
6673
}

src/Factories/Concerns/CreatesTerm.php

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
namespace Aerni\Factory\Factories\Concerns;
44

55
use Illuminate\Support\Arr;
6+
use Statamic\Fields\Blueprint;
67
use Statamic\Contracts\Taxonomies\Term;
78
use Statamic\Facades\Term as TermFacade;
9+
use Statamic\Facades\Blueprint as BlueprintFacade;
810

911
trait CreatesTerm
1012
{
@@ -16,8 +18,8 @@ trait CreatesTerm
1618
public function newModel(array $attributes = []): Term
1719
{
1820
$term = TermFacade::make()
19-
->taxonomy($this->taxonomy())
20-
->blueprint($this->blueprint());
21+
->taxonomy($this->taxonomyHandle())
22+
->blueprint($this->blueprintHandle());
2123

2224
$published = Arr::pull($attributes, 'published', true);
2325
$slug = Arr::pull($attributes, 'slug');
@@ -47,7 +49,7 @@ public function newModel(array $attributes = []): Term
4749
return $term;
4850
}
4951

50-
protected function taxonomy(): string
52+
protected function taxonomyHandle(): string
5153
{
5254
return $this->taxonomy
5355
?? str(get_class($this))
@@ -56,7 +58,7 @@ protected function taxonomy(): string
5658
->lower();
5759
}
5860

59-
protected function blueprint(): string
61+
protected function blueprintHandle(): string
6062
{
6163
return $this->blueprint
6264
?? str(get_class($this))
@@ -65,8 +67,13 @@ protected function blueprint(): string
6567
->lower();
6668
}
6769

70+
protected function blueprint(): Blueprint
71+
{
72+
return BlueprintFacade::find("taxonomies/{$this->taxonomyHandle()}/{$this->blueprintHandle()}");
73+
}
74+
6875
public function modelName(): string
6976
{
70-
return parent::modelName().'\\'.ucfirst($this->collection()).'\\'.ucfirst($this->blueprint());
77+
return parent::modelName().'\\'.ucfirst($this->taxonomyHandle()).'\\'.ucfirst($this->blueprintHandle());
7178
}
7279
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
3+
namespace Aerni\Factory\Factories\Concerns;
4+
5+
use Illuminate\Http\UploadedFile;
6+
use Illuminate\Filesystem\Filesystem;
7+
use Illuminate\Support\Facades\Storage;
8+
use Statamic\Forms\Uploaders\AssetsUploader;
9+
10+
trait WithAssets
11+
{
12+
public function asset(string $field, int $width, int $height): string
13+
{
14+
$field = $this->blueprint()->fields()->all()->get($field);
15+
16+
$image = $this->image($width, $height);
17+
18+
$uploadedFile = $this->uploadedFile($image);
19+
20+
$id = AssetsUploader::field($field->config())->upload($uploadedFile);
21+
22+
return $field->setValue($id)->process()->value();
23+
}
24+
25+
protected function image(int $width, int $height): string
26+
{
27+
$storage = Storage::disk('local');
28+
29+
$dir = 'factory-tmp';
30+
31+
if (! $storage->exists($dir)) {
32+
$storage->makeDirectory($dir);
33+
}
34+
35+
return $this->faker->image($storage->path($dir), $width, $height);
36+
}
37+
38+
protected function uploadedFile(string $path): UploadedFile
39+
{
40+
$filesystem = new Filesystem;
41+
42+
$name = $filesystem->name($path);
43+
$extension = $filesystem->extension($path);
44+
$originalName = "{$name}.{$extension}";
45+
$mimeType = $filesystem->mimeType($path);
46+
$error = null;
47+
$test = true;
48+
49+
return new UploadedFile($path, $originalName, $mimeType, $error, $test);
50+
}
51+
}

src/ServiceProvider.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
namespace Aerni\Factory;
44

5+
use Faker\Factory;
6+
use Faker\Generator;
57
use Statamic\Providers\AddonServiceProvider;
8+
use Smknstd\FakerPicsumImages\FakerPicsumImagesProvider;
69

710
class ServiceProvider extends AddonServiceProvider
811
{
@@ -11,4 +14,15 @@ class ServiceProvider extends AddonServiceProvider
1114
Console\Commands\MakeSeeder::class,
1215
Console\Commands\Seed::class,
1316
];
17+
18+
public function register(): void
19+
{
20+
$this->app->singleton(Generator::class, function () {
21+
$faker = Factory::create();
22+
23+
$faker->addProvider(new FakerPicsumImagesProvider($faker));
24+
25+
return $faker;
26+
});
27+
}
1428
}

0 commit comments

Comments
 (0)