From 393e863f98280e6813086bf42b9e22edf9ed0fa0 Mon Sep 17 00:00:00 2001 From: PatrickePatate Date: Tue, 11 Mar 2025 17:35:04 +0100 Subject: [PATCH 1/6] WIP: Production seeder --- src/Client.php | 8 +++++ src/Eloquent/IsOzuModel.php | 2 ++ src/Support/Database/HasProductionFactory.php | 13 +++++++ src/Support/Database/OzuProductionSeeder.php | 34 +++++++++++++++++++ 4 files changed, 57 insertions(+) create mode 100644 src/Support/Database/HasProductionFactory.php create mode 100644 src/Support/Database/OzuProductionSeeder.php diff --git a/src/Client.php b/src/Client.php index 5dea9c4..e694309 100644 --- a/src/Client.php +++ b/src/Client.php @@ -23,6 +23,14 @@ public function updateCollectionSharpConfiguration(string $collectionKey, array ); } + public function seed(string $collection, array $payload): void + { + $this->http()->post( + sprintf('/collections/%s/seed', $collection), + $payload + ); + } + public function apiKey(): ?string { return $this->apiKey; diff --git a/src/Eloquent/IsOzuModel.php b/src/Eloquent/IsOzuModel.php index 10cdb44..2c9e0e2 100644 --- a/src/Eloquent/IsOzuModel.php +++ b/src/Eloquent/IsOzuModel.php @@ -5,6 +5,7 @@ use Code16\OzuClient\OzuCms\OzuCollectionConfig; use Code16\OzuClient\OzuCms\OzuCollectionFormConfig; use Code16\OzuClient\OzuCms\OzuCollectionListConfig; +use Code16\OzuClient\Support\Database\HasProductionFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphOne; use Spatie\Sluggable\HasSlug; @@ -14,6 +15,7 @@ trait IsOzuModel { use HasSlug; + use HasProductionFactory; public static array $ozuColumns = [ 'id', diff --git a/src/Support/Database/HasProductionFactory.php b/src/Support/Database/HasProductionFactory.php new file mode 100644 index 0000000..62d4798 --- /dev/null +++ b/src/Support/Database/HasProductionFactory.php @@ -0,0 +1,13 @@ +create([ + + ]); + } +} diff --git a/src/Support/Database/OzuProductionSeeder.php b/src/Support/Database/OzuProductionSeeder.php new file mode 100644 index 0000000..31b1733 --- /dev/null +++ b/src/Support/Database/OzuProductionSeeder.php @@ -0,0 +1,34 @@ +client = $client; + } + + protected function createItemsFor(string $collection, Collection|Model $items) + { + if (!class_exists($collection)) { + throw new \InvalidArgumentException("Class $collection does not exist"); + } + + if (!in_array(IsOzuModel::class, class_uses_recursive($collection))) { + throw new \InvalidArgumentException("Class $collection doesn't have the IsOzuModel trait"); + } + + $payload = $items->toArray(); + + $this->client->seed($collection, $payload); + } +} From 40c8089fddc475cbbb3ef5751eeb564d84bc6de2 Mon Sep 17 00:00:00 2001 From: PatrickePatate Date: Tue, 11 Mar 2025 16:35:34 +0000 Subject: [PATCH 2/6] Fix styling --- config/ozu-client.php | 2 +- database/factories/MediaFactory.php | 12 +- src/Client.php | 3 +- src/Console/ConfigureCmsCommand.php | 36 +++--- src/Deploy/Crawler/Observer.php | 4 +- src/Deploy/DeployServiceProvider.php | 2 +- src/Deploy/Jobs/CrawlSite.php | 4 +- src/Deploy/Jobs/CrawlSiteHandler.php | 2 +- src/Deploy/Routing/UrlGenerator.php | 2 +- src/Deploy/RoutingServiceProvider.php | 4 +- src/Eloquent/IsOzuModel.php | 2 +- src/Eloquent/Media.php | 11 +- src/OzuCms/Form/OzuBelongsToField.php | 1 - src/OzuCms/Form/OzuEditorField.php | 8 +- src/OzuCms/Form/OzuField.php | 7 +- src/OzuCms/Form/OzuFileListField.php | 2 + src/OzuCms/Form/OzuImageField.php | 3 + src/OzuCms/Form/OzuSelectField.php | 3 + src/OzuCms/List/OzuBelongsToFilter.php | 5 +- src/OzuCms/List/OzuColumn.php | 6 +- src/OzuCms/List/OzuDateColumn.php | 2 - src/OzuCms/OzuCollectionConfig.php | 9 +- src/OzuCms/OzuCollectionFormConfig.php | 14 ++- src/OzuCms/OzuCollectionListConfig.php | 4 +- src/OzuServiceProvider.php | 4 +- src/Support/Database/OzuProductionSeeder.php | 4 +- src/Support/Database/OzuSeeder.php | 4 +- src/Support/Image.php | 9 +- src/Support/ImageCollection.php | 4 +- src/Support/Thumbnails/CdnThumbnail.php | 4 +- src/Support/Thumbnails/ImageKitThumbnail.php | 2 +- src/Support/Thumbnails/KeyCdnThumbnail.php | 3 +- src/Support/Thumbnails/LocalThumbnail.php | 20 +-- src/View/Components/Content/Attributes.php | 4 +- src/View/Components/File.php | 3 +- tests/ArchTest.php | 1 - tests/Console/ConfigureCmsCommandTest.php | 121 ++++++++++--------- tests/Unit/OzuCollectionConfigTest.php | 24 ++-- tests/Unit/OzuCollectionFormConfigTest.php | 36 +++--- tests/Unit/OzuCollectionListConfigTest.php | 23 ++-- tests/Unit/OzuColumnTest.php | 42 +++---- tests/Unit/OzuFieldTest.php | 19 ++- 42 files changed, 245 insertions(+), 230 deletions(-) diff --git a/config/ozu-client.php b/config/ozu-client.php index 11bf06d..d966c3f 100644 --- a/config/ozu-client.php +++ b/config/ozu-client.php @@ -4,7 +4,7 @@ // List here your collections, ie the Models that will be handled by the Ozu CMS. // You must also properly configure them (see documentation). 'collections' => [ -// \App\Models\Project::class, + // \App\Models\Project::class, ], // The Ozu unique key of the website to use diff --git a/database/factories/MediaFactory.php b/database/factories/MediaFactory.php index f026165..9e40f2a 100644 --- a/database/factories/MediaFactory.php +++ b/database/factories/MediaFactory.php @@ -44,17 +44,17 @@ public function file(string $key): Factory }); } - public function withFile(?string $fileName = null, string $type="image") + public function withFile(?string $fileName = null, string $type = 'image') { - return $this->state(function (array $attributes) use ($fileName,$type) { - $fileName = $fileName ?: fake()->slug() . ($type==='image'?'.jpg':'.pdf'); - $path = ($type==="image" ? $this->getRandomFixtureImagePath() : $this->getRandomFixtureDocumentPath()); + return $this->state(function (array $attributes) use ($fileName, $type) { + $fileName = $fileName ?: fake()->slug().($type === 'image' ? '.jpg' : '.pdf'); + $path = ($type === 'image' ? $this->getRandomFixtureImagePath() : $this->getRandomFixtureDocumentPath()); Storage::disk('local') - ->put("/data/".($type==='image'?'medias':'files')."/$fileName", file_get_contents($path)); + ->put('/data/'.($type === 'image' ? 'medias' : 'files')."/$fileName", file_get_contents($path)); return [ - 'file_name' => "data/".($type==='image'?'medias':'files')."/$fileName", + 'file_name' => 'data/'.($type === 'image' ? 'medias' : 'files')."/$fileName", ]; }); } diff --git a/src/Client.php b/src/Client.php index e694309..f88c8fc 100644 --- a/src/Client.php +++ b/src/Client.php @@ -12,8 +12,7 @@ public function __construct( protected ?string $apiKey, protected string $apiVersion, protected string $websiteKey, - ) { - } + ) {} public function updateCollectionSharpConfiguration(string $collectionKey, array $collectionData): void { diff --git a/src/Console/ConfigureCmsCommand.php b/src/Console/ConfigureCmsCommand.php index 1591645..249f25e 100644 --- a/src/Console/ConfigureCmsCommand.php +++ b/src/Console/ConfigureCmsCommand.php @@ -5,10 +5,10 @@ use Closure; use Code16\OzuClient\Client; use Code16\OzuClient\OzuCms\Form\OzuField; +use Code16\OzuClient\OzuCms\List\OzuColumn; +use Code16\OzuClient\OzuCms\OzuCollectionConfig; use Code16\OzuClient\OzuCms\OzuCollectionFormConfig; use Code16\OzuClient\OzuCms\OzuCollectionListConfig; -use Code16\OzuClient\OzuCms\OzuCollectionConfig; -use Code16\OzuClient\OzuCms\List\OzuColumn; use Illuminate\Console\Command; use Illuminate\Http\Client\RequestException; use Illuminate\Support\Facades\Schema; @@ -16,12 +16,14 @@ class ConfigureCmsCommand extends Command { protected $signature = 'ozu:configure-cms'; + protected $description = 'Send CMS configuration to Ozu.'; public function handle(Client $ozuClient): int { if (empty(config('ozu-client.collections'))) { $this->info('No collections to configure.'); + return self::SUCCESS; } @@ -33,9 +35,9 @@ public function handle(Client $ozuClient): int default => $collection, }; - $collection = $model::configureOzuCollection(new OzuCollectionConfig()); - $list = $model::configureOzuCollectionList(new OzuCollectionListConfig()); - $form = $model::configureOzuCollectionForm(new OzuCollectionFormConfig()); + $collection = $model::configureOzuCollection(new OzuCollectionConfig); + $list = $model::configureOzuCollectionList(new OzuCollectionListConfig); + $form = $model::configureOzuCollectionForm(new OzuCollectionFormConfig); return [ 'key' => $model->ozuCollectionKey(), @@ -45,7 +47,7 @@ public function handle(Client $ozuClient): int 'autoDeployDateField' => $collection->autoDeployDateField(), 'isCreatable' => $collection->isCreatable(), 'isDeletable' => $collection->isDeletable(), - 'order' => $k+1, + 'order' => $k + 1, 'list' => [ 'isReorderable' => $list->isReorderable(), 'isSearchable' => $list->isSearchable(), @@ -59,7 +61,7 @@ public function handle(Client $ozuClient): int 'key' => $column->key(), 'label' => $column->label(), 'size' => $column->size(), - ]) + ]), ], 'form' => [ 'title' => $form->titleField()?->toArray(), @@ -67,35 +69,35 @@ public function handle(Client $ozuClient): int 'content' => $form->contentField()?->toArray(), 'fields' => $form ->customFields() - ->map(fn (OzuField $field) => $field->toArray()) + ->map(fn (OzuField $field) => $field->toArray()), ], 'customFields' => collect(Schema::getColumnListing($model->getTable())) - ->filter(fn (string $column) => !in_array($column, $model::$ozuColumns)) + ->filter(fn (string $column) => ! in_array($column, $model::$ozuColumns)) ->mapWithKeys(fn (string $column) => [ - $column => match(Schema::getColumnType($model->getTable(), $column)) { + $column => match (Schema::getColumnType($model->getTable(), $column)) { 'datetime', 'timestamps' => 'dateTime', 'date' => 'date', 'int', 'bigint', 'smallint', 'mediumint', 'tinyint' => 'integer', 'float', 'double' => 'float', 'text', 'json' => 'text', default => 'string', - } - ]) + }, + ]), ]; }) ->each(function (array $collection) use ($ozuClient) { - $this->info('Update CMS configuration for [' . $collection['key'] . '].'); - try{ + $this->info('Update CMS configuration for ['.$collection['key'].'].'); + try { $ozuClient->updateCollectionSharpConfiguration( $collection['key'], $collection ); - } catch(RequestException $e) { + } catch (RequestException $e) { if ($message = $e->response->json()) { - if(!isset($message['message'])) { + if (! isset($message['message'])) { throw $e; } - $this->error('[' . $collection['key'] . '] '.$message['message']); + $this->error('['.$collection['key'].'] '.$message['message']); } else { throw $e; } diff --git a/src/Deploy/Crawler/Observer.php b/src/Deploy/Crawler/Observer.php index 469b0e4..2a4122a 100644 --- a/src/Deploy/Crawler/Observer.php +++ b/src/Deploy/Crawler/Observer.php @@ -13,8 +13,8 @@ public function crawled(UriInterface $url, ResponseInterface $response, ?UriInte { try { parent::crawled($url, $response, $foundOnUrl, $linkText); - } catch(\RuntimeException $e) { - if(preg_match('/returned status code \[4\d\d]/', $e->getMessage())) { + } catch (\RuntimeException $e) { + if (preg_match('/returned status code \[4\d\d]/', $e->getMessage())) { Log::warning("Crawled URL {$url} found on {$foundOnUrl} returned status code 4xx", [ 'url' => (string) $url, 'status_code' => $response->getStatusCode(), diff --git a/src/Deploy/DeployServiceProvider.php b/src/Deploy/DeployServiceProvider.php index 380b619..f9e99ee 100644 --- a/src/Deploy/DeployServiceProvider.php +++ b/src/Deploy/DeployServiceProvider.php @@ -18,7 +18,7 @@ public function register() public function boot() { $this->app['events']->listen(function (CommandStarting $event) { - if($event->command === 'export') { + if ($event->command === 'export') { Artisan::call('cache:clear', [], $event->output); } }); diff --git a/src/Deploy/Jobs/CrawlSite.php b/src/Deploy/Jobs/CrawlSite.php index a51e422..5998343 100644 --- a/src/Deploy/Jobs/CrawlSite.php +++ b/src/Deploy/Jobs/CrawlSite.php @@ -1,10 +1,10 @@ setCrawlObserver(new Observer($entry, $destination)) ->setCrawlProfile(new CrawlInternalUrls($entry)) ->startCrawling($entry); diff --git a/src/Deploy/Jobs/CrawlSiteHandler.php b/src/Deploy/Jobs/CrawlSiteHandler.php index 4ee856f..e573b3e 100644 --- a/src/Deploy/Jobs/CrawlSiteHandler.php +++ b/src/Deploy/Jobs/CrawlSiteHandler.php @@ -8,6 +8,6 @@ class CrawlSiteHandler { public function __invoke(): void { - app(Dispatcher::class)->dispatchNow(new CrawlSite()); + app(Dispatcher::class)->dispatchNow(new CrawlSite); } } diff --git a/src/Deploy/Routing/UrlGenerator.php b/src/Deploy/Routing/UrlGenerator.php index 4a5af59..e599f68 100644 --- a/src/Deploy/Routing/UrlGenerator.php +++ b/src/Deploy/Routing/UrlGenerator.php @@ -1,8 +1,8 @@ registerUrlGenerator(); } - public function boot() - { - } + public function boot() {} /** * @see parent::registerUrlGenerator(); diff --git a/src/Eloquent/IsOzuModel.php b/src/Eloquent/IsOzuModel.php index 2c9e0e2..6180c43 100644 --- a/src/Eloquent/IsOzuModel.php +++ b/src/Eloquent/IsOzuModel.php @@ -14,8 +14,8 @@ /** @mixin Model */ trait IsOzuModel { - use HasSlug; use HasProductionFactory; + use HasSlug; public static array $ozuColumns = [ 'id', diff --git a/src/Eloquent/Media.php b/src/Eloquent/Media.php index df0ecd6..59a7c0b 100644 --- a/src/Eloquent/Media.php +++ b/src/Eloquent/Media.php @@ -3,7 +3,6 @@ namespace Code16\OzuClient\Eloquent; use Code16\OzuClient\Database\Factories\MediaFactory; -use Code16\OzuClient\Support\Thumbnails\LocalThumbnail; use Code16\OzuClient\Support\Thumbnails\Thumbnail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -15,7 +14,9 @@ class Media extends Model use HasFactory; protected $guarded = []; + protected $table = 'medias'; + protected $casts = [ 'custom_properties' => 'array', 'size' => 'integer', @@ -23,7 +24,7 @@ class Media extends Model protected static function newFactory() { - return new MediaFactory(); + return new MediaFactory; } public function model(): MorphTo @@ -31,7 +32,7 @@ public function model(): MorphTo return $this->morphTo('model'); } - public function thumbnail(int $width = null, int $height = null, bool $fit = false): ?string + public function thumbnail(?int $width = null, ?int $height = null, bool $fit = false): ?string { return app(Thumbnail::class) ->forMedia($this) @@ -54,9 +55,9 @@ public function humanReadableSize($precision = 2): ?string if ($this->size >= 0) { $size = (int) $this->size; $base = log($size) / log(1024); - $suffixes = array(' bytes', ' KB', ' MB', ' GB', ' TB'); + $suffixes = [' bytes', ' KB', ' MB', ' GB', ' TB']; - return $this->size === 0 ? '0 bytes' : (round(pow(1024, $base - floor($base)), $precision) . $suffixes[floor($base)]); + return $this->size === 0 ? '0 bytes' : (round(pow(1024, $base - floor($base)), $precision).$suffixes[floor($base)]); } else { return $this->size; } diff --git a/src/OzuCms/Form/OzuBelongsToField.php b/src/OzuCms/Form/OzuBelongsToField.php index c09944f..61247ff 100644 --- a/src/OzuCms/Form/OzuBelongsToField.php +++ b/src/OzuCms/Form/OzuBelongsToField.php @@ -32,4 +32,3 @@ public function toArray(): array ]); } } - diff --git a/src/OzuCms/Form/OzuEditorField.php b/src/OzuCms/Form/OzuEditorField.php index 8eb6a6d..19a3696 100644 --- a/src/OzuCms/Form/OzuEditorField.php +++ b/src/OzuCms/Form/OzuEditorField.php @@ -5,7 +5,9 @@ class OzuEditorField extends OzuField { private bool $withoutParagraphs = false; + private bool $hideToolbar = false; + private array $toolbar = [ OzuEditorToolbarEnum::Bold, OzuEditorToolbarEnum::Italic, @@ -13,7 +15,9 @@ class OzuEditorField extends OzuField OzuEditorToolbarEnum::BulletList, OzuEditorToolbarEnum::Link, ]; + private int $height = 200; + private ?int $maxHeight = null; public function setWithoutParagraphs(): self @@ -37,7 +41,7 @@ public function hideToolbar(): self return $this; } - public function setHeight(int $height, int|null $maxHeight = null): self + public function setHeight(int $height, ?int $maxHeight = null): self { $this->height = $height; $this->maxHeight = $maxHeight; @@ -55,7 +59,7 @@ public function toArray(): array return array_merge(parent::toArray(), [ 'withoutParagraphs' => $this->withoutParagraphs, 'hideToolbar' => $this->hideToolbar, - 'toolbar' => collect($this->toolbar)->map(fn($item) => $item->value)->toArray(), + 'toolbar' => collect($this->toolbar)->map(fn ($item) => $item->value)->toArray(), 'height' => $this->height, 'maxHeight' => $this->maxHeight, ]); diff --git a/src/OzuCms/Form/OzuField.php b/src/OzuCms/Form/OzuField.php index 66ff6b8..de34812 100644 --- a/src/OzuCms/Form/OzuField.php +++ b/src/OzuCms/Form/OzuField.php @@ -5,13 +5,14 @@ abstract class OzuField { protected ?string $label = null; + protected ?string $helpMessage = null; + protected array $validationRules = []; + protected bool $isUpdatable = true; - public function __construct(protected string $key) - { - } + public function __construct(protected string $key) {} public static function makeText(string $key): OzuTextField { diff --git a/src/OzuCms/Form/OzuFileListField.php b/src/OzuCms/Form/OzuFileListField.php index b0bdb8f..fc5f0fa 100644 --- a/src/OzuCms/Form/OzuFileListField.php +++ b/src/OzuCms/Form/OzuFileListField.php @@ -5,7 +5,9 @@ class OzuFileListField extends OzuField { protected int $maxItems = 10; + protected bool $hasLegend = false; + private int $maxFileSizeInMB = 5; public function setMaxItems(int $maxItems): self diff --git a/src/OzuCms/Form/OzuImageField.php b/src/OzuCms/Form/OzuImageField.php index eaaee13..818a10b 100644 --- a/src/OzuCms/Form/OzuImageField.php +++ b/src/OzuCms/Form/OzuImageField.php @@ -5,8 +5,11 @@ class OzuImageField extends OzuField { private array $allowedExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp']; + private int $maxFileSizeInMB = 5; + private bool $hasLegend = false; + private ?string $cropRatio = null; public function setHasLegend(bool $hasLegend = true): self diff --git a/src/OzuCms/Form/OzuSelectField.php b/src/OzuCms/Form/OzuSelectField.php index 6c471f8..6bddd72 100644 --- a/src/OzuCms/Form/OzuSelectField.php +++ b/src/OzuCms/Form/OzuSelectField.php @@ -5,8 +5,11 @@ class OzuSelectField extends OzuField { protected bool $multiple = false; + protected string $display = 'list'; + protected bool $clearable = false; + protected array $options = []; public function setOptions(array $options): self diff --git a/src/OzuCms/List/OzuBelongsToFilter.php b/src/OzuCms/List/OzuBelongsToFilter.php index 0cfa3d0..d5fa288 100644 --- a/src/OzuCms/List/OzuBelongsToFilter.php +++ b/src/OzuCms/List/OzuBelongsToFilter.php @@ -5,11 +5,10 @@ class OzuBelongsToFilter { protected bool $required = true; + private ?string $label = null; - public function __construct(protected string $ozuCollectionKey) - { - } + public function __construct(protected string $ozuCollectionKey) {} public function setRequired(bool $required = true): self { diff --git a/src/OzuCms/List/OzuColumn.php b/src/OzuCms/List/OzuColumn.php index 2f25a5f..3a7e1e2 100644 --- a/src/OzuCms/List/OzuColumn.php +++ b/src/OzuCms/List/OzuColumn.php @@ -5,12 +5,12 @@ abstract class OzuColumn { protected ?string $label = null; + protected bool $isDefaultSort = false; + protected string $sortDirection = 'asc'; - protected function __construct(protected string $key, protected int $size) - { - } + protected function __construct(protected string $key, protected int $size) {} public static function makeText(string $key, int $size): OzuTextColumn { diff --git a/src/OzuCms/List/OzuDateColumn.php b/src/OzuCms/List/OzuDateColumn.php index 8adcdb4..98f20a1 100644 --- a/src/OzuCms/List/OzuDateColumn.php +++ b/src/OzuCms/List/OzuDateColumn.php @@ -2,8 +2,6 @@ namespace Code16\OzuClient\OzuCms\List; -use Carbon\Carbon; - class OzuDateColumn extends OzuColumn { public function type(): string diff --git a/src/OzuCms/OzuCollectionConfig.php b/src/OzuCms/OzuCollectionConfig.php index 2f59174..09d188e 100644 --- a/src/OzuCms/OzuCollectionConfig.php +++ b/src/OzuCms/OzuCollectionConfig.php @@ -5,11 +5,15 @@ class OzuCollectionConfig { protected string $label; + protected string $icon; + protected bool $hasPublicationState = false; protected ?string $autoDeployDateField = null; + private bool $isCreatable = true; + private bool $isDeletable = true; public function setLabel(string $label): self @@ -35,7 +39,8 @@ public function setHasPublicationState(bool $hasState = true): self /** * Declare which date field will trigger auto-deploy when reached - * @param string|null $field + * + * @param string|null $field * @return $this */ public function setAutoDeployDateField(string $fieldKey): self @@ -76,7 +81,7 @@ public function hasPublicationState(): bool public function hasAutoDeployDateField(): bool { - return !is_null($this->autoDeployDateField); + return ! is_null($this->autoDeployDateField); } public function autoDeployDateField(): ?string diff --git a/src/OzuCms/OzuCollectionFormConfig.php b/src/OzuCms/OzuCollectionFormConfig.php index 52b1a93..948f8ee 100644 --- a/src/OzuCms/OzuCollectionFormConfig.php +++ b/src/OzuCms/OzuCollectionFormConfig.php @@ -14,15 +14,19 @@ class OzuCollectionFormConfig { protected ?OzuTextField $titleField; + protected bool $hideTitleField = false; protected ?OzuImageField $coverField; + protected bool $hideCoverField = false; protected ?OzuEditorField $contentField; + protected bool $hideContentField = false; protected array $fields = []; + protected ?OzuBelongsToField $belongsToField = null; public function addCustomField(OzuField $field): self @@ -89,7 +93,7 @@ public function declareBelongsToField(string $ozuModelClass, string $label, bool $this->belongsToField = (new OzuBelongsToField($ozuCollectionKey)) ->setLabel($label) - ->setClearable(!$required) + ->setClearable(! $required) ->setValidationRules($required ? ['required'] : []); return $this; @@ -100,7 +104,7 @@ public function customFields(): Collection return collect( [ $this->belongsToField, - ...$this->fields + ...$this->fields, ]) ->whereNotNull() ->values(); @@ -112,7 +116,7 @@ public function titleField(): ?OzuTextField return null; } - if (!isset($this->titleField)) { + if (! isset($this->titleField)) { $this->titleField = OzuField::makeText('title'); } @@ -125,7 +129,7 @@ public function coverField(): ?OzuImageField return null; } - if (!isset($this->coverField)) { + if (! isset($this->coverField)) { $this->coverField = OzuField::makeImage('cover') ->setMaxFileSizeInMB(3); } @@ -139,7 +143,7 @@ public function contentField(): ?OzuEditorField return null; } - if (!isset($this->contentField)) { + if (! isset($this->contentField)) { $this->contentField = OzuField::makeEditor('content') ->setToolbar([ OzuEditorToolbarEnum::Bold, diff --git a/src/OzuCms/OzuCollectionListConfig.php b/src/OzuCms/OzuCollectionListConfig.php index a21d4af..957288f 100644 --- a/src/OzuCms/OzuCollectionListConfig.php +++ b/src/OzuCms/OzuCollectionListConfig.php @@ -2,7 +2,6 @@ namespace Code16\OzuClient\OzuCms; -use Code16\OzuClient\OzuCms\Form\OzuBelongsToField; use Code16\OzuClient\OzuCms\List\OzuBelongsToFilter; use Code16\OzuClient\OzuCms\List\OzuColumn; use Illuminate\Support\Collection; @@ -10,10 +9,13 @@ class OzuCollectionListConfig { protected bool $isReorderable = false; + protected bool $isSearchable = false; + protected bool $isPaginated = false; protected ?OzuBelongsToFilter $belongsToFilter = null; + protected array $columns = []; public function setIsReorderable(bool $isReorderable = true): self diff --git a/src/OzuServiceProvider.php b/src/OzuServiceProvider.php index c746c03..23784a4 100644 --- a/src/OzuServiceProvider.php +++ b/src/OzuServiceProvider.php @@ -48,7 +48,7 @@ public function register() $this->app->bind(Paginator::class, StaticPaginator::class); $this->app->bind(LengthAwarePaginator::class, StaticLengthAwarePaginator::class); $this->app->bind(Thumbnail::class, function ($app) { - if (!$app->environment('production') || !config('ozu-client.cdn_url')) { + if (! $app->environment('production') || ! config('ozu-client.cdn_url')) { return $app->make(LocalThumbnail::class); } @@ -88,7 +88,7 @@ public function boot() Relation::enforceMorphMap( collect(config('ozu-client.collections')) ->mapWithKeys(fn (string $className) => [ - (new $className)->ozuCollectionKey() => $className + (new $className)->ozuCollectionKey() => $className, ]) ->toArray() ); diff --git a/src/Support/Database/OzuProductionSeeder.php b/src/Support/Database/OzuProductionSeeder.php index 31b1733..ef0667b 100644 --- a/src/Support/Database/OzuProductionSeeder.php +++ b/src/Support/Database/OzuProductionSeeder.php @@ -19,11 +19,11 @@ public function __construct(\Code16\OzuClient\Client $client) protected function createItemsFor(string $collection, Collection|Model $items) { - if (!class_exists($collection)) { + if (! class_exists($collection)) { throw new \InvalidArgumentException("Class $collection does not exist"); } - if (!in_array(IsOzuModel::class, class_uses_recursive($collection))) { + if (! in_array(IsOzuModel::class, class_uses_recursive($collection))) { throw new \InvalidArgumentException("Class $collection doesn't have the IsOzuModel trait"); } diff --git a/src/Support/Database/OzuSeeder.php b/src/Support/Database/OzuSeeder.php index ff00cb8..1fd4d59 100644 --- a/src/Support/Database/OzuSeeder.php +++ b/src/Support/Database/OzuSeeder.php @@ -12,8 +12,8 @@ protected function clearMediaDirectory(): void if (file_exists($mediaDirectory)) { collect(scandir($mediaDirectory)) - ->filter(fn ($file) => !in_array($file, ['.', '..'])) - ->each(fn ($file) => unlink($mediaDirectory . '/' . $file)); + ->filter(fn ($file) => ! in_array($file, ['.', '..'])) + ->each(fn ($file) => unlink($mediaDirectory.'/'.$file)); } } } diff --git a/src/Support/Image.php b/src/Support/Image.php index 4b6007e..8a18717 100644 --- a/src/Support/Image.php +++ b/src/Support/Image.php @@ -7,12 +7,11 @@ class Image public function __construct( public string $src, public ?string $legend, - ) { - } + ) {} public static function make(string|array $data): static { - if(is_string($data)) { + if (is_string($data)) { return new static($data, null); } @@ -30,10 +29,10 @@ public function thumbnail(?int $width = null, ?int $height = null, ?float $scale $height = $height ? $height * $scale : null; // https://docs.imagekit.io/features/image-transformations/resize-crop-and-other-transformations - return $this->src . '?tr=' . implode(',', array_keys(array_filter([ + return $this->src.'?tr='.implode(',', array_keys(array_filter([ "w-$width" => $width, "h-$height" => $height, - "c-at_max" => !$crop, + 'c-at_max' => ! $crop, ]))); } diff --git a/src/Support/ImageCollection.php b/src/Support/ImageCollection.php index bed23d0..7d876bb 100644 --- a/src/Support/ImageCollection.php +++ b/src/Support/ImageCollection.php @@ -7,6 +7,4 @@ /** * @implements Collection */ -class ImageCollection extends Collection -{ -} +class ImageCollection extends Collection {} diff --git a/src/Support/Thumbnails/CdnThumbnail.php b/src/Support/Thumbnails/CdnThumbnail.php index 1e753e4..2a53ce3 100644 --- a/src/Support/Thumbnails/CdnThumbnail.php +++ b/src/Support/Thumbnails/CdnThumbnail.php @@ -6,7 +6,7 @@ abstract class CdnThumbnail extends Thumbnail { public function make(?int $width, ?int $height = null, bool $fit = false): ?string { - if($cdnUrl = str(config('ozu-client.cdn_url'))->rtrim('/')) { + if ($cdnUrl = str(config('ozu-client.cdn_url'))->rtrim('/')) { return sprintf( '%s/storage/%s?%s', $cdnUrl, @@ -22,7 +22,7 @@ abstract protected function generateUrlParameters(?int $width, ?int $height, boo public function download(): ?string { - if($cdnUrl = str(config('ozu-client.cdn_url'))->rtrim('/')) { + if ($cdnUrl = str(config('ozu-client.cdn_url'))->rtrim('/')) { return sprintf( '%s/storage/%s', $cdnUrl, diff --git a/src/Support/Thumbnails/ImageKitThumbnail.php b/src/Support/Thumbnails/ImageKitThumbnail.php index 755e077..5c4d142 100644 --- a/src/Support/Thumbnails/ImageKitThumbnail.php +++ b/src/Support/Thumbnails/ImageKitThumbnail.php @@ -6,7 +6,7 @@ class ImageKitThumbnail extends CdnThumbnail { protected function generateUrlParameters(?int $width, ?int $height, bool $fit): string { - if (!$fit) { + if (! $fit) { if ($width && $height) { return sprintf('tr=w-%s,h-%s,c-at_max', $width, $height); } diff --git a/src/Support/Thumbnails/KeyCdnThumbnail.php b/src/Support/Thumbnails/KeyCdnThumbnail.php index 9f4d9fe..ce43f81 100644 --- a/src/Support/Thumbnails/KeyCdnThumbnail.php +++ b/src/Support/Thumbnails/KeyCdnThumbnail.php @@ -4,10 +4,9 @@ class KeyCdnThumbnail extends CdnThumbnail { - protected function generateUrlParameters(?int $width, ?int $height, bool $fit): string { - if (!$fit) { + if (! $fit) { if ($width && $height) { return sprintf('width=%s&height=%s&fit=inside', $width, $height); } diff --git a/src/Support/Thumbnails/LocalThumbnail.php b/src/Support/Thumbnails/LocalThumbnail.php index e871e55..c422d75 100644 --- a/src/Support/Thumbnails/LocalThumbnail.php +++ b/src/Support/Thumbnails/LocalThumbnail.php @@ -12,16 +12,22 @@ class LocalThumbnail extends Thumbnail { protected ImageManager $imageManager; + protected FilesystemManager $storage; + protected int $quality = 90; + protected ?int $width; + protected ?int $height; + protected bool $fit; + protected bool $appendTimestamp = true; public function __construct() { - $this->imageManager = new ImageManager(new Driver()); + $this->imageManager = new ImageManager(new Driver); $this->storage = app(FilesystemManager::class); } @@ -59,7 +65,7 @@ private function generateThumbnail(string $sourceDisk, string $sourceRelPath, st { $thumbnailDisk = $this->storage->disk('public'); - if (!$thumbnailDisk->exists($thumbnailPath)) { + if (! $thumbnailDisk->exists($thumbnailPath)) { // Create thumbnail directories if needed if (! $thumbnailDisk->exists(dirname($thumbnailPath))) { $thumbnailDisk->makeDirectory(dirname($thumbnailPath)); @@ -90,19 +96,19 @@ public function download(): ?string { $filesDisk = $this->storage->disk('public'); - if (!$filesDisk->exists($this->mediaModel->file_name)) { + if (! $filesDisk->exists($this->mediaModel->file_name)) { // Create files directories if needed - if (!$filesDisk->exists(dirname($this->mediaModel->file_name))) { + if (! $filesDisk->exists(dirname($this->mediaModel->file_name))) { $filesDisk->makeDirectory(dirname($this->mediaModel->file_name)); } - try{ + try { $filesDisk->put($this->mediaModel->file_name, $this->storage->disk($this->mediaModel->disk)->get($this->mediaModel->file_name)); - }catch (FileNotFoundException|DecoderException) { + } catch (FileNotFoundException|DecoderException) { return null; } } - return $this->storage->disk("public")->url($this->mediaModel->file_name); + return $this->storage->disk('public')->url($this->mediaModel->file_name); } } diff --git a/src/View/Components/Content/Attributes.php b/src/View/Components/Content/Attributes.php index d9a7254..54be1ef 100644 --- a/src/View/Components/Content/Attributes.php +++ b/src/View/Components/Content/Attributes.php @@ -4,6 +4,4 @@ use Code16\ContentRenderer\View\Components\Attributes as AttributesComponent; -class Attributes extends AttributesComponent -{ -} +class Attributes extends AttributesComponent {} diff --git a/src/View/Components/File.php b/src/View/Components/File.php index e046ddb..d534779 100644 --- a/src/View/Components/File.php +++ b/src/View/Components/File.php @@ -10,8 +10,7 @@ class File extends Component public function __construct( public string $name, public string $href, - ) { - } + ) {} public function render(): View { diff --git a/tests/ArchTest.php b/tests/ArchTest.php index bac1874..c879a5b 100644 --- a/tests/ArchTest.php +++ b/tests/ArchTest.php @@ -3,4 +3,3 @@ it('will not use debugging functions') ->expect(['die', 'dd', 'dump', 'ray', 'ddRawSql', 'var_dump']) ->each->not->toBeUsed(); - diff --git a/tests/Console/ConfigureCmsCommandTest.php b/tests/Console/ConfigureCmsCommandTest.php index 6356d3b..9901996 100644 --- a/tests/Console/ConfigureCmsCommandTest.php +++ b/tests/Console/ConfigureCmsCommandTest.php @@ -7,7 +7,7 @@ use Code16\OzuClient\OzuCms\OzuCollectionListConfig; use Code16\OzuClient\Tests\Fixtures\DummyTestModel; use Illuminate\Console\Command; -use \Illuminate\Http\Client\Request; +use Illuminate\Http\Client\Request; beforeEach(function () { config(['ozu-client.website_key' => 'test']); @@ -16,18 +16,20 @@ it('sends cms configuration to Ozu for each configured collection', function () { config(['ozu-client.collections' => [ - new class extends DummyTestModel { + new class extends DummyTestModel + { public function ozuCollectionKey(): string { return 'dummy1'; } }, - new class extends DummyTestModel { + new class extends DummyTestModel + { public function ozuCollectionKey(): string { return 'dummy2'; } - } + }, ]]); $this->artisan('ozu:configure-cms') @@ -36,22 +38,22 @@ public function ozuCollectionKey(): string Http::assertSent(function (Request $request) { return $request->url() == sprintf( - '%s/api/%s/%s/collections/%s/configure', - rtrim(config('ozu-client.api_host'), '/'), - config('ozu-client.api_version'), - 'test', - 'dummy1' - ); + '%s/api/%s/%s/collections/%s/configure', + rtrim(config('ozu-client.api_host'), '/'), + config('ozu-client.api_version'), + 'test', + 'dummy1' + ); }); Http::assertSent(function (Request $request) { return $request->url() == sprintf( - '%s/api/%s/%s/collections/%s/configure', - rtrim(config('ozu-client.api_host'), '/'), - config('ozu-client.api_version'), - 'test', - 'dummy2' - ); + '%s/api/%s/%s/collections/%s/configure', + rtrim(config('ozu-client.api_host'), '/'), + config('ozu-client.api_version'), + 'test', + 'dummy2' + ); }); }); @@ -59,7 +61,8 @@ public function ozuCollectionKey(): string Http::fake(); config(['ozu-client.collections' => [ - new class extends DummyTestModel { + new class extends DummyTestModel + { public function ozuCollectionKey(): string { return 'dummy'; @@ -75,7 +78,7 @@ public static function configureOzuCollection(OzuCollectionConfig $config ->setIsCreatable() ->setIsDeletable(); } - } + }, ]]); $this->artisan('ozu:configure-cms') @@ -84,12 +87,12 @@ public static function configureOzuCollection(OzuCollectionConfig $config Http::assertSent(function (Request $request) { return $request->url() == sprintf( - '%s/api/%s/%s/collections/%s/configure', - rtrim(config('ozu-client.api_host'), '/'), - config('ozu-client.api_version'), - 'test', - 'dummy' - ) + '%s/api/%s/%s/collections/%s/configure', + rtrim(config('ozu-client.api_host'), '/'), + config('ozu-client.api_version'), + 'test', + 'dummy' + ) && $request['label'] == 'Dummy label' && $request['icon'] == 'dummy-icon' && $request['hasPublicationState'] == true @@ -103,7 +106,8 @@ public static function configureOzuCollection(OzuCollectionConfig $config Http::fake(); config(['ozu-client.collections' => [ - new class extends DummyTestModel { + new class extends DummyTestModel + { public function ozuCollectionKey(): string { return 'dummy'; @@ -120,7 +124,7 @@ public static function configureOzuCollectionList(OzuCollectionListConfig $confi ->addColumn(OzuColumn::makeImage('dummy-image', 3)->setLabel('Dummy image')) ->addColumn(OzuColumn::makeDate('dummy-date', 3)->setLabel('Dummy date')->setDefaultSort()); } - } + }, ]]); $this->artisan('ozu:configure-cms') @@ -137,26 +141,26 @@ public static function configureOzuCollectionList(OzuCollectionListConfig $confi 'type' => 'text', 'key' => 'dummy-text', 'label' => 'Dummy text', - 'size' => 1 + 'size' => 1, ], [ 'type' => 'check', 'key' => 'dummy-check', 'label' => 'Dummy check', - 'size' => 2 + 'size' => 2, ], [ 'type' => 'image', 'key' => 'dummy-image', 'label' => 'Dummy image', - 'size' => 3 + 'size' => 3, ], [ 'type' => 'date', 'key' => 'dummy-date', 'label' => 'Dummy date', - 'size' => 3 - ] + 'size' => 3, + ], ]); }); }); @@ -165,7 +169,8 @@ public static function configureOzuCollectionList(OzuCollectionListConfig $confi Http::fake(); config(['ozu-client.collections' => [ - new class extends DummyTestModel { + new class extends DummyTestModel + { public function ozuCollectionKey(): string { return 'dummy'; @@ -182,12 +187,12 @@ public static function configureOzuCollectionForm(OzuCollectionFormConfig $confi ->addCustomField( OzuField::makeSelect('dummy-select') ->setDisplayAsDropdown() - ->setOptions([1 =>'option1', 2 => 'option2']) + ->setOptions([1 => 'option1', 2 => 'option2']) ->setLabel('Dummy select') ->setHelpMessage('Select an option') ); } - } + }, ]]); $this->artisan('ozu:configure-cms') @@ -196,27 +201,27 @@ public static function configureOzuCollectionForm(OzuCollectionFormConfig $confi Http::assertSent(function (Request $request) { return $request['form']['fields'] == collect([ - [ - 'type' => 'text', - 'key' => 'dummy-text', - 'label' => 'Dummy text', - 'validationRules' => ['required'], - 'helpMessage' => null, - 'isUpdatable' => true, - ], - [ - 'type' => 'select', - 'key' => 'dummy-select', - 'label' => 'Dummy select', - 'options' => [1 =>'option1', 2 => 'option2'], - 'multiple' => false, - 'display' => 'dropdown', - 'clearable' => false, - 'validationRules' => [], - 'helpMessage' => 'Select an option', - 'isUpdatable' => true, - ], - ]); + [ + 'type' => 'text', + 'key' => 'dummy-text', + 'label' => 'Dummy text', + 'validationRules' => ['required'], + 'helpMessage' => null, + 'isUpdatable' => true, + ], + [ + 'type' => 'select', + 'key' => 'dummy-select', + 'label' => 'Dummy select', + 'options' => [1 => 'option1', 2 => 'option2'], + 'multiple' => false, + 'display' => 'dropdown', + 'clearable' => false, + 'validationRules' => [], + 'helpMessage' => 'Select an option', + 'isUpdatable' => true, + ], + ]); }); }); @@ -237,12 +242,13 @@ public static function configureOzuCollectionForm(OzuCollectionFormConfig $confi ); config(['ozu-client.collections' => [ - new class extends DummyTestModel { + new class extends DummyTestModel + { public function ozuCollectionKey(): string { return 'dummy'; } - } + }, ]]); $this->artisan('ozu:configure-cms') @@ -255,4 +261,3 @@ public function ozuCollectionKey(): string ]); }); }); - diff --git a/tests/Unit/OzuCollectionConfigTest.php b/tests/Unit/OzuCollectionConfigTest.php index 9f3fe2a..610224b 100644 --- a/tests/Unit/OzuCollectionConfigTest.php +++ b/tests/Unit/OzuCollectionConfigTest.php @@ -2,8 +2,8 @@ use Code16\OzuClient\OzuCms\OzuCollectionConfig; -it('set defauls config values', function() { - $ozuCollectionConfig = new OzuCollectionConfig(); +it('set defauls config values', function () { + $ozuCollectionConfig = new OzuCollectionConfig; expect($ozuCollectionConfig->label())->toBe('no label')->and($ozuCollectionConfig->icon())->toBeNull() ->and($ozuCollectionConfig->hasPublicationState())->toBeFalse() @@ -16,7 +16,7 @@ 'hasPublicationState', 'autoDeployDateField', 'isCreatable', - 'isDeletable' + 'isDeletable', ]) ->and($ozuCollectionConfig)->toHaveMethods([ 'setLabel', @@ -31,13 +31,13 @@ 'autoDeployDateField', 'hasAutoDeployDateField', 'isCreatable', - 'isDeletable' + 'isDeletable', ]); }); -it('allows to set label and icon', function() { - $ozuCollectionConfig = new OzuCollectionConfig(); +it('allows to set label and icon', function () { + $ozuCollectionConfig = new OzuCollectionConfig; $ozuCollectionConfig ->setLabel('label') @@ -47,8 +47,8 @@ ->and($ozuCollectionConfig->icon())->toBe('icon'); }); -it('allows to set hasPublicationState and setAutoDeployField', function() { - $ozuCollectionConfig = new OzuCollectionConfig(); +it('allows to set hasPublicationState and setAutoDeployField', function () { + $ozuCollectionConfig = new OzuCollectionConfig; $ozuCollectionConfig->setHasPublicationState(); $ozuCollectionConfig->setAutoDeployDateField('date'); @@ -57,8 +57,8 @@ ->and($ozuCollectionConfig->autoDeployDateField())->toBe('date'); }); -it('allows to set isCreatable and isDeletable', function() { - $ozuCollectionConfig = new OzuCollectionConfig(); +it('allows to set isCreatable and isDeletable', function () { + $ozuCollectionConfig = new OzuCollectionConfig; $ozuCollectionConfig->setIsCreatable(false); $ozuCollectionConfig->setIsDeletable(false); @@ -67,8 +67,8 @@ ->and($ozuCollectionConfig->isDeletable())->toBeFalse(); }); -it('allows to chain methods', function() { - $ozuCollectionConfig = new OzuCollectionConfig(); +it('allows to chain methods', function () { + $ozuCollectionConfig = new OzuCollectionConfig; $ozuCollectionConfig ->setLabel('label') diff --git a/tests/Unit/OzuCollectionFormConfigTest.php b/tests/Unit/OzuCollectionFormConfigTest.php index cf7cf4a..ae93d40 100644 --- a/tests/Unit/OzuCollectionFormConfigTest.php +++ b/tests/Unit/OzuCollectionFormConfigTest.php @@ -7,9 +7,8 @@ use Code16\OzuClient\OzuCms\Form\OzuTextField; use Code16\OzuClient\OzuCms\OzuCollectionFormConfig; -it("set default form values", function() { - $ozuCollectionFormConfig = new OzuCollectionFormConfig(); - +it('set default form values', function () { + $ozuCollectionFormConfig = new OzuCollectionFormConfig; expect($ozuCollectionFormConfig->customFields())->toBeEmpty() ->and($ozuCollectionFormConfig->titleField())->toBeInstanceOf(OzuTextField::class) @@ -26,7 +25,7 @@ 'contentField', 'hideContentField', 'fields', - 'belongsToField' + 'belongsToField', ]) ->and($ozuCollectionFormConfig)->toHaveMethods([ 'addCustomField', @@ -40,12 +39,12 @@ 'customFields', 'titleField', 'coverField', - 'contentField' + 'contentField', ]); }); -it("allows to add custom fields", function() { - $ozuCollectionFormConfig = new OzuCollectionFormConfig(); +it('allows to add custom fields', function () { + $ozuCollectionFormConfig = new OzuCollectionFormConfig; $ozuCollectionFormConfig ->addCustomField(OzuField::makeText('text')) @@ -58,22 +57,22 @@ ->and($ozuCollectionFormConfig->customFields()[1]?->toArray()['key'])->toBe('image'); }); -it("allows to configure title field", function() { - $ozuCollectionFormConfig = new OzuCollectionFormConfig(); +it('allows to configure title field', function () { + $ozuCollectionFormConfig = new OzuCollectionFormConfig; $ozuCollectionFormConfig - ->configureTitleField(function($field) { + ->configureTitleField(function ($field) { $field->setLabel('new label'); }); expect($ozuCollectionFormConfig->titleField()->toArray()['label'])->toBe('new label'); }); -it("allows to configure cover field", function() { - $ozuCollectionFormConfig = new OzuCollectionFormConfig(); +it('allows to configure cover field', function () { + $ozuCollectionFormConfig = new OzuCollectionFormConfig; $ozuCollectionFormConfig - ->configureCoverField(function($field) { + ->configureCoverField(function ($field) { $field->setMaxFileSizeInMB(50) ->setHasLegend(); }); @@ -82,11 +81,11 @@ ->and($ozuCollectionFormConfig->coverField()->toArray()['hasLegend'])->toBeTrue(); }); -it("allows to configure content field", function() { - $ozuCollectionFormConfig = new OzuCollectionFormConfig(); +it('allows to configure content field', function () { + $ozuCollectionFormConfig = new OzuCollectionFormConfig; $ozuCollectionFormConfig - ->configureContentField(function($field) { + ->configureContentField(function ($field) { $field->setHeight(100, 200) ->setToolbar([ OzuEditorToolbarEnum::Bold, @@ -105,8 +104,8 @@ }); -it("allows to hide title, cover and content fields", function() { - $ozuCollectionFormConfig = new OzuCollectionFormConfig(); +it('allows to hide title, cover and content fields', function () { + $ozuCollectionFormConfig = new OzuCollectionFormConfig; $ozuCollectionFormConfig ->hideTitleField() @@ -117,4 +116,3 @@ ->and($ozuCollectionFormConfig->coverField())->toBeNull() ->and($ozuCollectionFormConfig->contentField())->toBeNull(); }); - diff --git a/tests/Unit/OzuCollectionListConfigTest.php b/tests/Unit/OzuCollectionListConfigTest.php index 09b0f34..6a1aa2e 100644 --- a/tests/Unit/OzuCollectionListConfigTest.php +++ b/tests/Unit/OzuCollectionListConfigTest.php @@ -6,10 +6,9 @@ use Code16\OzuClient\OzuCms\List\OzuThumbnailColumn; use Code16\OzuClient\OzuCms\OzuCollectionListConfig; use Code16\OzuClient\Tests\Fixtures\DummyTestModel; -use Illuminate\Database\Eloquent\Model; -it('set defauls config values', function() { - $ozuCollectionListConfig = new OzuCollectionListConfig(); +it('set defauls config values', function () { + $ozuCollectionListConfig = new OzuCollectionListConfig; expect($ozuCollectionListConfig->isReorderable())->toBeFalse() ->and($ozuCollectionListConfig->isPaginated())->toBeFalse() @@ -38,8 +37,8 @@ ]); }); -it('allows to set isReorderable, isSearchable and isPaginated', function() { - $ozuCollectionListConfig = new OzuCollectionListConfig(); +it('allows to set isReorderable, isSearchable and isPaginated', function () { + $ozuCollectionListConfig = new OzuCollectionListConfig; $ozuCollectionListConfig ->setIsReorderable() @@ -51,8 +50,8 @@ ->and($ozuCollectionListConfig->isPaginated())->toBeTrue(); }); -it('allows to declare belongsToFilter', function() { - $ozuCollectionListConfig = new OzuCollectionListConfig(); +it('allows to declare belongsToFilter', function () { + $ozuCollectionListConfig = new OzuCollectionListConfig; $ozuCollectionListConfig->declareBelongsToFilter(DummyTestModel::class, 'label'); @@ -62,8 +61,8 @@ ->and($ozuCollectionListConfig->belongsToFilter()->toArray()['required'])->toBeTrue(); }); -it('allows to add columns', function() { - $ozuCollectionListConfig = new OzuCollectionListConfig(); +it('allows to add columns', function () { + $ozuCollectionListConfig = new OzuCollectionListConfig; $ozuCollectionListConfig ->addColumn(OzuColumn::makeText('text', 1)) @@ -78,8 +77,8 @@ ->and($ozuCollectionListConfig->columns()[1]->size())->toBe(3); }); -it('allows to set defaultSort', function() { - $ozuCollectionListConfig = new OzuCollectionListConfig(); +it('allows to set defaultSort', function () { + $ozuCollectionListConfig = new OzuCollectionListConfig; $ozuCollectionListConfig ->addColumn(OzuColumn::makeText('text', 1)->setDefaultSort('desc')); @@ -89,5 +88,3 @@ 'direction' => 'desc', ]); }); - - diff --git a/tests/Unit/OzuColumnTest.php b/tests/Unit/OzuColumnTest.php index 9c7b22f..115eaeb 100644 --- a/tests/Unit/OzuColumnTest.php +++ b/tests/Unit/OzuColumnTest.php @@ -2,56 +2,54 @@ use Code16\OzuClient\OzuCms\List\OzuColumn; -it('sets default text values', function() { - $ozuColumn = OzuColumn::makeText('key', 1); +it('sets default text values', function () { + $ozuColumn = OzuColumn::makeText('key', 1); - expect($ozuColumn->type())->toBe("text") - ->and($ozuColumn->key())->toBe("key") - ->and($ozuColumn->size())->toBe(1) - ->and($ozuColumn->label())->toBeNull(); + expect($ozuColumn->type())->toBe('text') + ->and($ozuColumn->key())->toBe('key') + ->and($ozuColumn->size())->toBe(1) + ->and($ozuColumn->label())->toBeNull(); }); -it('allows to use setLabel and setDefaultSort', function() { +it('allows to use setLabel and setDefaultSort', function () { $ozuColumn = OzuColumn::makeText('key', 1) ->setLabel('label') ->setDefaultSort('desc'); - expect($ozuColumn->label())->toBe("label") - ->and($ozuColumn->getDefaultSortDirection())->toBe("desc"); + expect($ozuColumn->label())->toBe('label') + ->and($ozuColumn->getDefaultSortDirection())->toBe('desc'); }); -it('allows to use setDefaultSort with default value', function() { +it('allows to use setDefaultSort with default value', function () { $ozuColumn = OzuColumn::makeText('key', 1) ->setDefaultSort(); - expect($ozuColumn->getDefaultSortDirection())->toBe("asc"); + expect($ozuColumn->getDefaultSortDirection())->toBe('asc'); }); -it('sets default check values', function() { +it('sets default check values', function () { $ozuColumn = OzuColumn::makeCheck('key', 1); - expect($ozuColumn->type())->toBe("check") - ->and($ozuColumn->key())->toBe("key") + expect($ozuColumn->type())->toBe('check') + ->and($ozuColumn->key())->toBe('key') ->and($ozuColumn->size())->toBe(1) ->and($ozuColumn->label())->toBeNull(); }); -it('sets default date values', function() { +it('sets default date values', function () { $ozuColumn = OzuColumn::makeDate('key', 1); - expect($ozuColumn->type())->toBe("date") - ->and($ozuColumn->key())->toBe("key") + expect($ozuColumn->type())->toBe('date') + ->and($ozuColumn->key())->toBe('key') ->and($ozuColumn->size())->toBe(1) ->and($ozuColumn->label())->toBeNull(); }); -it('sets default image values', function() { +it('sets default image values', function () { $ozuColumn = OzuColumn::makeImage('key', 1); - expect($ozuColumn->type())->toBe("image") - ->and($ozuColumn->key())->toBe("key") + expect($ozuColumn->type())->toBe('image') + ->and($ozuColumn->key())->toBe('key') ->and($ozuColumn->size())->toBe(1) ->and($ozuColumn->label())->toBeNull(); }); - - diff --git a/tests/Unit/OzuFieldTest.php b/tests/Unit/OzuFieldTest.php index f26ded0..e11b2ca 100644 --- a/tests/Unit/OzuFieldTest.php +++ b/tests/Unit/OzuFieldTest.php @@ -73,7 +73,7 @@ 'helpMessage' => 'help', 'isUpdatable' => false, 'text' => 'text', - 'label' => null + 'label' => null, ]); }); @@ -187,7 +187,7 @@ 'hasLegend' => false, 'allowedExtensions' => ['jpg', 'jpeg', 'png', 'gif', 'webp'], 'maxFileSize' => 5, - 'cropRatio' => null + 'cropRatio' => null, ]); }); @@ -212,7 +212,7 @@ 'hasLegend' => true, 'allowedExtensions' => ['pdf'], 'maxFileSize' => 10, - 'cropRatio' => '16:9' + 'cropRatio' => '16:9', ]); }); @@ -233,7 +233,7 @@ 'hasLegend' => false, 'maxFileSize' => 5, 'cropRatio' => null, - 'maxItems' => 10 + 'maxItems' => 10, ]); }); @@ -258,7 +258,7 @@ 'hasLegend' => true, 'maxFileSize' => 10, 'cropRatio' => '16:9', - 'maxItems' => 5 + 'maxItems' => 5, ]); }); @@ -278,7 +278,7 @@ 'isUpdatable' => false, 'hasLegend' => false, 'maxFileSize' => 5, - 'maxItems' => 10 + 'maxItems' => 10, ]); }); @@ -301,7 +301,7 @@ 'isUpdatable' => false, 'hasLegend' => true, 'maxFileSize' => 10, - 'maxItems' => 4 + 'maxItems' => 4, ]); }); @@ -319,7 +319,7 @@ 'validationRules' => ['required'], 'helpMessage' => 'help', 'isUpdatable' => false, - 'hasTime' => false + 'hasTime' => false, ]); }); @@ -338,7 +338,6 @@ 'validationRules' => ['required'], 'helpMessage' => 'help', 'isUpdatable' => false, - 'hasTime' => true + 'hasTime' => true, ]); }); - From 15541349cec5f4dad3f3dd46330953ea2f61b27d Mon Sep 17 00:00:00 2001 From: PatrickePatate Date: Thu, 13 Mar 2025 17:03:49 +0100 Subject: [PATCH 3/6] Production Seeder --- src/Client.php | 19 +++++- src/Eloquent/IsOzuModel.php | 1 - src/Support/Database/HasProductionFactory.php | 13 ---- src/Support/Database/OzuProductionSeeder.php | 59 +++++++++++++++--- tests/ArchTest.php | 2 +- tests/Fixtures/DummyTestModel.php | 2 + tests/Fixtures/philippe.jpg | Bin 0 -> 98710 bytes .../Unit/Database/OzuProductionSeederTest.php | 52 +++++++++++++++ 8 files changed, 120 insertions(+), 28 deletions(-) delete mode 100644 src/Support/Database/HasProductionFactory.php create mode 100644 tests/Fixtures/philippe.jpg create mode 100644 tests/Unit/Database/OzuProductionSeederTest.php diff --git a/src/Client.php b/src/Client.php index e694309..005da80 100644 --- a/src/Client.php +++ b/src/Client.php @@ -23,14 +23,27 @@ public function updateCollectionSharpConfiguration(string $collectionKey, array ); } - public function seed(string $collection, array $payload): void + public function seed(string $collection, array $payload): mixed { - $this->http()->post( + return $this->http()->post( sprintf('/collections/%s/seed', $collection), $payload - ); + )->json(); + } + + public function seedFile(string $collection, int $id, string $field, string $path): mixed + { + return $this->http() + ->attach("file", file_get_contents($path), basename($path)) + ->post( + sprintf('/collections/%s/seed/%s/file', $collection, $id), + [ + 'field' => $field, + ] + )->getBody()->getContents(); } + public function apiKey(): ?string { return $this->apiKey; diff --git a/src/Eloquent/IsOzuModel.php b/src/Eloquent/IsOzuModel.php index 2c9e0e2..012f1b6 100644 --- a/src/Eloquent/IsOzuModel.php +++ b/src/Eloquent/IsOzuModel.php @@ -15,7 +15,6 @@ trait IsOzuModel { use HasSlug; - use HasProductionFactory; public static array $ozuColumns = [ 'id', diff --git a/src/Support/Database/HasProductionFactory.php b/src/Support/Database/HasProductionFactory.php deleted file mode 100644 index 62d4798..0000000 --- a/src/Support/Database/HasProductionFactory.php +++ /dev/null @@ -1,13 +0,0 @@ -create([ - - ]); - } -} diff --git a/src/Support/Database/OzuProductionSeeder.php b/src/Support/Database/OzuProductionSeeder.php index 31b1733..918b014 100644 --- a/src/Support/Database/OzuProductionSeeder.php +++ b/src/Support/Database/OzuProductionSeeder.php @@ -6,29 +6,68 @@ use Code16\OzuClient\Eloquent\IsOzuModel; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Seeder; -use Illuminate\Support\Collection; +use Illuminate\Support\Facades\File; class OzuProductionSeeder extends Seeder { protected Client $client; - public function __construct(\Code16\OzuClient\Client $client) + private ?int $createdId = null; + private ?string $currentCollectionKey = null; + + public function __construct() { - $this->client = $client; + $this->client = app(Client::class); } - protected function createItemsFor(string $collection, Collection|Model $items) + /** + * @param Model $item + */ + protected function createInOzu(Model $item): static { - if (!class_exists($collection)) { - throw new \InvalidArgumentException("Class $collection does not exist"); + if (!in_array(IsOzuModel::class, class_uses_recursive($item))) { + throw new \InvalidArgumentException($item::class . " doesn't have the IsOzuModel trait"); + } + + $this->currentCollectionKey = $collectionKey = $item?->ozuCollectionKey(); + + if (!$collectionKey) { + throw new \InvalidArgumentException("Unable to retrieve collection key."); + } + + $this->createdId = $this->client->seed($collectionKey, $item->toArray())['id'] ?? null; + + return $this; + } + + protected function withFile(string $field, string $path, ?int $forceId = null): static { + if(!$forceId && !$this->createdId) { + throw new \InvalidArgumentException("No item created yet. Try calling createInOzu() first."); } - if (!in_array(IsOzuModel::class, class_uses_recursive($collection))) { - throw new \InvalidArgumentException("Class $collection doesn't have the IsOzuModel trait"); + if (!File::exists($path)) { + throw new \InvalidArgumentException("File not found at path: {$path}"); } - $payload = $items->toArray(); + $this->client->seedFile($this->currentCollectionKey, $forceId ?? $this->createdId, $field, $path); - $this->client->seed($collection, $payload); + return $this; } + + /** + * @param array $paths + */ + protected function withFileList(string $field, array $paths, ?int $forceId = null): static { + foreach($paths as $path) { + $this->withFile($field, $path, $forceId); + } + + return $this; + } + + protected function id(): ?int + { + return $this->createdId; + } + } diff --git a/tests/ArchTest.php b/tests/ArchTest.php index bac1874..4a58476 100644 --- a/tests/ArchTest.php +++ b/tests/ArchTest.php @@ -1,6 +1,6 @@ expect(['die', 'dd', 'dump', 'ray', 'ddRawSql', 'var_dump']) + ->expect(['die', 'dd', 'dump', 'ray', 'ds', 'ddRawSql', 'var_dump']) ->each->not->toBeUsed(); diff --git a/tests/Fixtures/DummyTestModel.php b/tests/Fixtures/DummyTestModel.php index 7255650..a360014 100644 --- a/tests/Fixtures/DummyTestModel.php +++ b/tests/Fixtures/DummyTestModel.php @@ -12,6 +12,8 @@ class DummyTestModel extends Model { use IsOzuModel; + protected $guarded = []; + public static function configureOzuCollection(OzuCollectionConfig $config): OzuCollectionConfig { return $config; diff --git a/tests/Fixtures/philippe.jpg b/tests/Fixtures/philippe.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ada3f591b756bdff4cefd1b50931405d5aeae8aa GIT binary patch literal 98710 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

0`J$ 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'ozu-client.api_host', 'http://ozu.test'); + config()->set('ozu-client.api_key', 'api_key'); + config()->set('ozu-client.api_version', 'v1'); + config()->set('ozu-client.website_key', 'key'); + + $seeder = new class extends OzuProductionSeeder { + public function run() + { + $this->createInOzu(DummyTestModel::make([ + 'title' => 'Project 1', + ]))->id(); + } + }; + + $seeder->run(); + Http::assertSent(function (Illuminate\Http\Client\Request $request) { + return str($request->url())->startsWith(sprintf('http://ozu.test/api/v1/key/collections/%s/seed', app(DummyTestModel::class)->ozuCollectionKey())); + }); +}); + +it('allows users to seed images on models in production', function () { + Http::fake(); + config()->set('ozu-client.api_host', 'http://ozu.test'); + config()->set('ozu-client.api_key', 'api_key'); + config()->set('ozu-client.api_version', 'v1'); + config()->set('ozu-client.website_key', 'key'); + + $seeder = new class extends OzuProductionSeeder { + public function run() + { + $this->createInOzu(DummyTestModel::make([ + 'title' => 'Project 1', + ]))->withFile("cover", testDirectory('Fixtures/philippe.jpg'), forceId: 5); + } + }; + + $seeder->run(); + Http::assertSent(function (Illuminate\Http\Client\Request $request) { + return str($request->url())->startsWith(sprintf('http://ozu.test/api/v1/key/collections/%s/seed/5/file', app(DummyTestModel::class)->ozuCollectionKey())); + }); +}); From 6b400146d216aba785e011446db9c90148959da1 Mon Sep 17 00:00:00 2001 From: PatrickePatate Date: Fri, 14 Mar 2025 10:52:57 +0000 Subject: [PATCH 4/6] Fix styling --- src/Client.php | 3 +- src/Eloquent/IsOzuModel.php | 1 - src/Support/Database/OzuProductionSeeder.php | 29 +++++++++---------- .../Unit/Database/OzuProductionSeederTest.php | 10 +++---- 4 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/Client.php b/src/Client.php index ad80911..0ea0116 100644 --- a/src/Client.php +++ b/src/Client.php @@ -33,7 +33,7 @@ public function seed(string $collection, array $payload): mixed public function seedFile(string $collection, int $id, string $field, string $path): mixed { return $this->http() - ->attach("file", file_get_contents($path), basename($path)) + ->attach('file', file_get_contents($path), basename($path)) ->post( sprintf('/collections/%s/seed/%s/file', $collection, $id), [ @@ -42,7 +42,6 @@ public function seedFile(string $collection, int $id, string $field, string $pat )->getBody()->getContents(); } - public function apiKey(): ?string { return $this->apiKey; diff --git a/src/Eloquent/IsOzuModel.php b/src/Eloquent/IsOzuModel.php index 012f1b6..10cdb44 100644 --- a/src/Eloquent/IsOzuModel.php +++ b/src/Eloquent/IsOzuModel.php @@ -5,7 +5,6 @@ use Code16\OzuClient\OzuCms\OzuCollectionConfig; use Code16\OzuClient\OzuCms\OzuCollectionFormConfig; use Code16\OzuClient\OzuCms\OzuCollectionListConfig; -use Code16\OzuClient\Support\Database\HasProductionFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphOne; use Spatie\Sluggable\HasSlug; diff --git a/src/Support/Database/OzuProductionSeeder.php b/src/Support/Database/OzuProductionSeeder.php index 918b014..bc09ab9 100644 --- a/src/Support/Database/OzuProductionSeeder.php +++ b/src/Support/Database/OzuProductionSeeder.php @@ -13,6 +13,7 @@ class OzuProductionSeeder extends Seeder protected Client $client; private ?int $createdId = null; + private ?string $currentCollectionKey = null; public function __construct() @@ -20,19 +21,16 @@ public function __construct() $this->client = app(Client::class); } - /** - * @param Model $item - */ protected function createInOzu(Model $item): static { - if (!in_array(IsOzuModel::class, class_uses_recursive($item))) { - throw new \InvalidArgumentException($item::class . " doesn't have the IsOzuModel trait"); + if (! in_array(IsOzuModel::class, class_uses_recursive($item))) { + throw new \InvalidArgumentException($item::class." doesn't have the IsOzuModel trait"); } $this->currentCollectionKey = $collectionKey = $item?->ozuCollectionKey(); - if (!$collectionKey) { - throw new \InvalidArgumentException("Unable to retrieve collection key."); + if (! $collectionKey) { + throw new \InvalidArgumentException('Unable to retrieve collection key.'); } $this->createdId = $this->client->seed($collectionKey, $item->toArray())['id'] ?? null; @@ -40,12 +38,13 @@ protected function createInOzu(Model $item): static return $this; } - protected function withFile(string $field, string $path, ?int $forceId = null): static { - if(!$forceId && !$this->createdId) { - throw new \InvalidArgumentException("No item created yet. Try calling createInOzu() first."); + protected function withFile(string $field, string $path, ?int $forceId = null): static + { + if (! $forceId && ! $this->createdId) { + throw new \InvalidArgumentException('No item created yet. Try calling createInOzu() first.'); } - if (!File::exists($path)) { + if (! File::exists($path)) { throw new \InvalidArgumentException("File not found at path: {$path}"); } @@ -55,10 +54,11 @@ protected function withFile(string $field, string $path, ?int $forceId = null): } /** - * @param array $paths + * @param array $paths */ - protected function withFileList(string $field, array $paths, ?int $forceId = null): static { - foreach($paths as $path) { + protected function withFileList(string $field, array $paths, ?int $forceId = null): static + { + foreach ($paths as $path) { $this->withFile($field, $path, $forceId); } @@ -69,5 +69,4 @@ protected function id(): ?int { return $this->createdId; } - } diff --git a/tests/Unit/Database/OzuProductionSeederTest.php b/tests/Unit/Database/OzuProductionSeederTest.php index e87d376..5d405f0 100644 --- a/tests/Unit/Database/OzuProductionSeederTest.php +++ b/tests/Unit/Database/OzuProductionSeederTest.php @@ -1,9 +1,7 @@ set('ozu-client.api_version', 'v1'); config()->set('ozu-client.website_key', 'key'); - $seeder = new class extends OzuProductionSeeder { + $seeder = new class extends OzuProductionSeeder + { public function run() { $this->createInOzu(DummyTestModel::make([ @@ -36,12 +35,13 @@ public function run() config()->set('ozu-client.api_version', 'v1'); config()->set('ozu-client.website_key', 'key'); - $seeder = new class extends OzuProductionSeeder { + $seeder = new class extends OzuProductionSeeder + { public function run() { $this->createInOzu(DummyTestModel::make([ 'title' => 'Project 1', - ]))->withFile("cover", testDirectory('Fixtures/philippe.jpg'), forceId: 5); + ]))->withFile('cover', testDirectory('Fixtures/philippe.jpg'), forceId: 5); } }; From b6aa3276578ccab02b466029f2ba025df7a9797a Mon Sep 17 00:00:00 2001 From: PatrickePatate Date: Fri, 14 Mar 2025 14:21:26 +0100 Subject: [PATCH 5/6] Enhance tests --- tests/Fixtures/philippe.jpg | Bin 98710 -> 0 bytes tests/Unit/Database/OzuProductionSeederTest.php | 16 +++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) delete mode 100644 tests/Fixtures/philippe.jpg diff --git a/tests/Fixtures/philippe.jpg b/tests/Fixtures/philippe.jpg deleted file mode 100644 index ada3f591b756bdff4cefd1b50931405d5aeae8aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98710 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

0`J$ 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 Http::assertSent(function (Illuminate\Http\Client\Request $request) { - return str($request->url())->startsWith(sprintf('http://ozu.test/api/v1/key/collections/%s/seed', app(DummyTestModel::class)->ozuCollectionKey())); + return + $request->url() === (sprintf('http://ozu.test/api/v1/key/collections/%s/seed', app(DummyTestModel::class)->ozuCollectionKey())) + && collect($request->data())->has('title') + && $request->data()['title'] === 'Project 1'; }); }); it('allows users to seed images on models in production', function () { Http::fake(); + Storage::fake('local'); + config()->set('ozu-client.api_host', 'http://ozu.test'); config()->set('ozu-client.api_key', 'api_key'); config()->set('ozu-client.api_version', 'v1'); @@ -39,14 +44,19 @@ public function run() $seeder = new class extends OzuProductionSeeder { public function run() { + $path = Storage::disk('local')->path('/images/image.jpg'); + UploadedFile::fake()->image('image.jpg')->storeAs('/images', 'image.jpg', ['disk' => 'local']); + $this->createInOzu(DummyTestModel::make([ 'title' => 'Project 1', - ]))->withFile("cover", testDirectory('Fixtures/philippe.jpg'), forceId: 5); + ]))->withFile("cover", $path, forceId: 5); } }; $seeder->run(); Http::assertSent(function (Illuminate\Http\Client\Request $request) { - return str($request->url())->startsWith(sprintf('http://ozu.test/api/v1/key/collections/%s/seed/5/file', app(DummyTestModel::class)->ozuCollectionKey())); + return + $request->url() === (sprintf('http://ozu.test/api/v1/key/collections/%s/seed/5/file', app(DummyTestModel::class)->ozuCollectionKey())) + && collect($request->data())->keyBy('name')->has(['file', 'field']); }); }); From 1e247a58ca78fb2959e9124bae851a06b74fb446 Mon Sep 17 00:00:00 2001 From: PatrickePatate Date: Fri, 14 Mar 2025 13:22:16 +0000 Subject: [PATCH 6/6] Fix styling --- tests/Unit/Database/OzuProductionSeederTest.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tests/Unit/Database/OzuProductionSeederTest.php b/tests/Unit/Database/OzuProductionSeederTest.php index 6053205..797fc9c 100644 --- a/tests/Unit/Database/OzuProductionSeederTest.php +++ b/tests/Unit/Database/OzuProductionSeederTest.php @@ -1,12 +1,9 @@ set('ozu-client.api_host', 'http://ozu.test'); @@ -14,7 +11,8 @@ config()->set('ozu-client.api_version', 'v1'); config()->set('ozu-client.website_key', 'key'); - $seeder = new class extends OzuProductionSeeder { + $seeder = new class extends OzuProductionSeeder + { public function run() { $this->createInOzu(DummyTestModel::make([ @@ -41,7 +39,8 @@ public function run() config()->set('ozu-client.api_version', 'v1'); config()->set('ozu-client.website_key', 'key'); - $seeder = new class extends OzuProductionSeeder { + $seeder = new class extends OzuProductionSeeder + { public function run() { $path = Storage::disk('local')->path('/images/image.jpg'); @@ -49,7 +48,7 @@ public function run() $this->createInOzu(DummyTestModel::make([ 'title' => 'Project 1', - ]))->withFile("cover", $path, forceId: 5); + ]))->withFile('cover', $path, forceId: 5); } };