From 2b015a0ea3ebb1d9900a956444c2f0e6ca569f24 Mon Sep 17 00:00:00 2001 From: Daniel Polito Date: Tue, 18 Jul 2023 13:06:43 -0300 Subject: [PATCH 1/3] Adding Hidden Attribute --- src/Attributes/Hidden.php | 10 ++++++++++ src/Support/DataProperty.php | 7 +++++++ src/Transformers/DataTransformer.php | 4 ++++ tests/DataTest.php | 22 ++++++++++++++++++++++ tests/Support/DataPropertyTest.php | 16 ++++++++++++++++ 5 files changed, 59 insertions(+) create mode 100644 src/Attributes/Hidden.php diff --git a/src/Attributes/Hidden.php b/src/Attributes/Hidden.php new file mode 100644 index 00000000..f55f5405 --- /dev/null +++ b/src/Attributes/Hidden.php @@ -0,0 +1,10 @@ + $attribute instanceof Computed ); + $hidden = $attributes->contains( + fn (object $attribute) => $attribute instanceof Hidden + ); + return new self( name: $property->name, className: $property->class, @@ -74,6 +80,7 @@ className: $property->class, fn (object $attribute) => $attribute instanceof WithoutValidation ) && ! $computed, computed: $computed, + hidden: $hidden, isPromoted: $property->isPromoted(), isReadonly: $property->isReadOnly(), hasDefaultValue: $property->isPromoted() ? $hasDefaultValue : $property->hasDefaultValue(), diff --git a/src/Transformers/DataTransformer.php b/src/Transformers/DataTransformer.php index 736f2b09..bddb4de2 100644 --- a/src/Transformers/DataTransformer.php +++ b/src/Transformers/DataTransformer.php @@ -70,6 +70,10 @@ protected function resolvePayload(TransformableData $data): array $payload = []; foreach ($dataClass->properties as $property) { + if ($property->hidden) { + continue; + } + $name = $property->name; if (! $this->shouldIncludeProperty($name, $data->{$name}, $trees)) { diff --git a/tests/DataTest.php b/tests/DataTest.php index d4f5ecca..eadd88a1 100644 --- a/tests/DataTest.php +++ b/tests/DataTest.php @@ -10,6 +10,7 @@ use Inertia\LazyProp; use Spatie\LaravelData\Attributes\Computed; use Spatie\LaravelData\Attributes\DataCollectionOf; +use Spatie\LaravelData\Attributes\Hidden; use Spatie\LaravelData\Attributes\MapOutputName; use Spatie\LaravelData\Attributes\Validation\Min; use Spatie\LaravelData\Attributes\WithCast; @@ -2386,6 +2387,27 @@ public function __construct( ->toThrow(CannotSetComputedValue::class); }); +it('can have a hidden value', function () { + $dataObject = new class ('', '') extends Data { + public function __construct( + public string $show, + #[Hidden] + public string $hidden, + ) { + } + }; + + expect($dataObject::from(['show' => 'Yes', 'hidden' => 'No'])) + ->show->toBe('Yes') + ->hidden->toBe('No'); + + expect($dataObject::validateAndCreate(['show' => 'Yes', 'hidden' => 'No'])) + ->show->toBe('Yes') + ->hidden->toBe('No'); + + expect($dataObject::from(['show' => 'Yes', 'hidden' => 'No'])->toArray())->toBe(['show' => 'Yes']); +}); + it('throws a readable exception message when the constructor fails', function ( array $data, string $message, diff --git a/tests/Support/DataPropertyTest.php b/tests/Support/DataPropertyTest.php index 83716197..6e354a5a 100644 --- a/tests/Support/DataPropertyTest.php +++ b/tests/Support/DataPropertyTest.php @@ -2,6 +2,7 @@ use Spatie\LaravelData\Attributes\Computed; use Spatie\LaravelData\Attributes\DataCollectionOf; +use Spatie\LaravelData\Attributes\Hidden; use Spatie\LaravelData\Attributes\MapInputName; use Spatie\LaravelData\Attributes\MapOutputName; use Spatie\LaravelData\Attributes\WithCast; @@ -152,6 +153,21 @@ public function __construct( )->toBeTrue(); }); +it('can check if a property is hidden', function () { + expect( + resolveHelper(new class () { + public string $property; + })->hidden + )->toBeFalse(); + + expect( + resolveHelper(new class () { + #[Hidden] + public string $property; + })->hidden + )->toBeTrue(); +}); + it('wont throw an error if non existing attribute is used on a data class property', function () { expect(NonExistingPropertyAttributeData::from(['property' => 'hello'])->property)->toEqual('hello') ->and(PhpStormAttributeData::from(['property' => 'hello'])->property)->toEqual('hello') From 0498b01961ab393e786fb14f9c07a8b1fab926d1 Mon Sep 17 00:00:00 2001 From: Daniel Polito Date: Thu, 20 Jul 2023 11:11:16 -0300 Subject: [PATCH 2/3] Keep Saving Hidden Attributes to Database --- src/Concerns/BaseData.php | 3 +- src/Concerns/BaseDataCollectable.php | 2 + src/Concerns/TransformableData.php | 11 +++- src/Contracts/TransformableData.php | 2 + .../DataCollectionEloquentCast.php | 2 +- .../EloquentCasts/DataEloquentCast.php | 2 +- .../DataCollectableTransformer.php | 2 + src/Transformers/DataTransformer.php | 6 ++- tests/Fakes/HiddenData.php | 16 ++++++ .../Models/DummyModelWithCastsWithHidden.php | 29 ++++++++++ .../DataCollectionEloquentCastTest.php | 54 ++++++++++++++++++- .../EloquentCasts/DataEloquentCastTest.php | 36 ++++++++++++- 12 files changed, 157 insertions(+), 8 deletions(-) create mode 100644 tests/Fakes/HiddenData.php create mode 100644 tests/Fakes/Models/DummyModelWithCastsWithHidden.php diff --git a/src/Concerns/BaseData.php b/src/Concerns/BaseData.php index be969a7a..1ddf5bce 100644 --- a/src/Concerns/BaseData.php +++ b/src/Concerns/BaseData.php @@ -102,8 +102,9 @@ public function transform( bool $transformValues = true, WrapExecutionType $wrapExecutionType = WrapExecutionType::Disabled, bool $mapPropertyNames = true, + bool $hideProperties = true, ): array { - return DataTransformer::create($transformValues, $wrapExecutionType, $mapPropertyNames)->transform($this); + return DataTransformer::create($transformValues, $wrapExecutionType, $mapPropertyNames, $hideProperties)->transform($this); } public function __sleep(): array diff --git a/src/Concerns/BaseDataCollectable.php b/src/Concerns/BaseDataCollectable.php index 39b66ea9..f7ade92b 100644 --- a/src/Concerns/BaseDataCollectable.php +++ b/src/Concerns/BaseDataCollectable.php @@ -39,12 +39,14 @@ public function transform( bool $transformValues = true, WrapExecutionType $wrapExecutionType = WrapExecutionType::Disabled, bool $mapPropertyNames = true, + bool $hideProperties = true, ): array { $transformer = new DataCollectableTransformer( $this->dataClass, $transformValues, $wrapExecutionType, $mapPropertyNames, + $hideProperties, $this->getPartialTrees(), $this->items, $this->getWrap(), diff --git a/src/Concerns/TransformableData.php b/src/Concerns/TransformableData.php index 8d9777dc..4e96119b 100644 --- a/src/Concerns/TransformableData.php +++ b/src/Concerns/TransformableData.php @@ -6,6 +6,8 @@ trait TransformableData { + protected $_hideAttributes = true; + public function all(): array { return $this->transform(transformValues: false); @@ -18,7 +20,7 @@ public function toArray(): array public function toJson($options = 0): string { - return json_encode($this->transform(), $options); + return json_encode($this->transform(hideProperties: $this->_hideAttributes), $options); } public function jsonSerialize(): array @@ -30,4 +32,11 @@ public static function castUsing(array $arguments) { return new DataEloquentCast(static::class, $arguments); } + + public function hideAttributes(bool $hideProperties): static + { + $this->_hideAttributes = $hideProperties; + + return $this; + } } diff --git a/src/Contracts/TransformableData.php b/src/Contracts/TransformableData.php index d1127355..754c417a 100644 --- a/src/Contracts/TransformableData.php +++ b/src/Contracts/TransformableData.php @@ -25,4 +25,6 @@ public function transform( ): array; public static function castUsing(array $arguments); + + public function hideAttributes(bool $hideProperties): static; } diff --git a/src/Support/EloquentCasts/DataCollectionEloquentCast.php b/src/Support/EloquentCasts/DataCollectionEloquentCast.php index d0e35b53..4e3570f3 100644 --- a/src/Support/EloquentCasts/DataCollectionEloquentCast.php +++ b/src/Support/EloquentCasts/DataCollectionEloquentCast.php @@ -61,6 +61,6 @@ public function set($model, string $key, $value, array $attributes): ?string $dataCollection = new ($this->dataCollectionClass)($this->dataClass, $data); - return $dataCollection->toJson(); + return $dataCollection->hideAttributes(false)->toJson(); } } diff --git a/src/Support/EloquentCasts/DataEloquentCast.php b/src/Support/EloquentCasts/DataEloquentCast.php index 7d156833..a84c5a42 100644 --- a/src/Support/EloquentCasts/DataEloquentCast.php +++ b/src/Support/EloquentCasts/DataEloquentCast.php @@ -50,6 +50,6 @@ public function set($model, string $key, $value, array $attributes): ?string throw CannotCastData::shouldBeTransformableData($model::class, $key); } - return $value->toJson(); + return $value->hideAttributes(false)->toJson(); } } diff --git a/src/Transformers/DataCollectableTransformer.php b/src/Transformers/DataCollectableTransformer.php index 5c3bdbb4..1d257a8f 100644 --- a/src/Transformers/DataCollectableTransformer.php +++ b/src/Transformers/DataCollectableTransformer.php @@ -20,6 +20,7 @@ public function __construct( protected bool $transformValues, protected WrapExecutionType $wrapExecutionType, protected bool $mapPropertyNames, + protected bool $hideProperties, protected PartialTrees $trees, protected Enumerable|CursorPaginator|Paginator $items, protected Wrap $wrap, @@ -60,6 +61,7 @@ protected function transformCollection(Enumerable $items): array ? WrapExecutionType::TemporarilyDisabled : $this->wrapExecutionType, $this->mapPropertyNames, + $this->hideProperties, ); } diff --git a/src/Transformers/DataTransformer.php b/src/Transformers/DataTransformer.php index bddb4de2..143f71b6 100644 --- a/src/Transformers/DataTransformer.php +++ b/src/Transformers/DataTransformer.php @@ -30,14 +30,16 @@ public static function create( bool $transformValues, WrapExecutionType $wrapExecutionType, bool $mapPropertyNames, + bool $hideProperties, ): self { - return new self($transformValues, $wrapExecutionType, $mapPropertyNames); + return new self($transformValues, $wrapExecutionType, $mapPropertyNames, $hideProperties); } public function __construct( protected bool $transformValues, protected WrapExecutionType $wrapExecutionType, protected bool $mapPropertyNames, + protected bool $hideProperties, ) { $this->config = app(DataConfig::class); } @@ -70,7 +72,7 @@ protected function resolvePayload(TransformableData $data): array $payload = []; foreach ($dataClass->properties as $property) { - if ($property->hidden) { + if ($this->hideProperties && $property->hidden) { continue; } diff --git a/tests/Fakes/HiddenData.php b/tests/Fakes/HiddenData.php new file mode 100644 index 00000000..4d03c36b --- /dev/null +++ b/tests/Fakes/HiddenData.php @@ -0,0 +1,16 @@ + HiddenData::class, + 'data_collection' => DataCollection::class.':'.HiddenData::class, + ]; + + public $timestamps = false; + + public static function migrate() + { + Schema::create('dummy_model_with_casts_with_hiddens', function (Blueprint $blueprint) { + $blueprint->increments('id'); + + $blueprint->text('data')->nullable(); + $blueprint->text('data_collection')->nullable(); + }); + } +} diff --git a/tests/Support/EloquentCasts/DataCollectionEloquentCastTest.php b/tests/Support/EloquentCasts/DataCollectionEloquentCastTest.php index 5b24dfa1..6295ad5f 100644 --- a/tests/Support/EloquentCasts/DataCollectionEloquentCastTest.php +++ b/tests/Support/EloquentCasts/DataCollectionEloquentCastTest.php @@ -4,8 +4,10 @@ use function Pest\Laravel\assertDatabaseHas; -use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCasts; +use Spatie\LaravelData\Tests\Fakes\HiddenData; +use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCasts; +use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCastsWithHidden; use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCustomCollectionCasts; use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithDefaultCasts; use Spatie\LaravelData\Tests\Fakes\SimpleData; @@ -13,6 +15,7 @@ beforeEach(function () { DummyModelWithCasts::migrate(); + DummyModelWithCastsWithHidden::migrate(); }); it('can save a data collection', function () { @@ -64,6 +67,55 @@ ])); }); +it('can save a data collection with hidden', function () { + DummyModelWithCastsWithHidden::create([ + 'data_collection' => HiddenData::collection([ + new HiddenData(string: 'Hello', hidden: 'World'), + new HiddenData(string: 'World', hidden: 'Hello'), + ]), + ]); + + assertDatabaseHas(DummyModelWithCastsWithHidden::class, [ + 'data_collection' => json_encode([ + ['string' => 'Hello', 'hidden' => 'World'], + ['string' => 'World', 'hidden' => 'Hello'], + ]), + ]); +}); + +it('can save a data object as an array with hidden', function () { + DummyModelWithCastsWithHidden::create([ + 'data_collection' => [ + ['string' => 'Hello', 'hidden' => 'World'], + ['string' => 'World', 'hidden' => 'Hello'], + ], + ]); + + assertDatabaseHas(DummyModelWithCastsWithHidden::class, [ + 'data_collection' => json_encode([ + ['string' => 'Hello', 'hidden' => 'World'], + ['string' => 'World', 'hidden' => 'Hello'], + ]), + ]); +}); + +it('can load a data object with hidden', function () { + DB::table('dummy_model_with_casts_with_hiddens')->insert([ + 'data_collection' => json_encode([ + ['string' => 'Hello', 'hidden' => 'World'], + ['string' => 'World', 'hidden' => 'Hello'], + ]), + ]); + + /** @var \Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCastsWithHidden $model */ + $model = DummyModelWithCastsWithHidden::first(); + + expect($model->data_collection)->toEqual(HiddenData::collection([ + new HiddenData(string: 'Hello', hidden: 'World'), + new HiddenData(string: 'World', hidden: 'Hello'), + ])); +}); + it('can save a null as a value', function () { DummyModelWithCasts::create([ 'data_collection' => null, diff --git a/tests/Support/EloquentCasts/DataEloquentCastTest.php b/tests/Support/EloquentCasts/DataEloquentCastTest.php index d9ebd0ce..82cfa0e4 100644 --- a/tests/Support/EloquentCasts/DataEloquentCastTest.php +++ b/tests/Support/EloquentCasts/DataEloquentCastTest.php @@ -4,8 +4,10 @@ use function Pest\Laravel\assertDatabaseHas; -use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCasts; +use Spatie\LaravelData\Tests\Fakes\HiddenData; +use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCasts; +use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCastsWithHidden; use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithDefaultCasts; use Spatie\LaravelData\Tests\Fakes\SimpleData; @@ -13,6 +15,7 @@ beforeEach(function () { DummyModelWithCasts::migrate(); + DummyModelWithCastsWithHidden::migrate(); }); it('can save a data object', function () { @@ -46,6 +49,37 @@ expect($model->data)->toEqual(new SimpleData('Test')); }); +it('can save a data object with hidden', function () { + DummyModelWithCastsWithHidden::create([ + 'data' => new HiddenData(string: 'Test', hidden: 'Hidden'), + ]); + + assertDatabaseHas(DummyModelWithCastsWithHidden::class, [ + 'data' => json_encode(['string' => 'Test', 'hidden' => 'Hidden']), + ]); +}); + +it('can save a data object as an array with hidden', function () { + DummyModelWithCastsWithHidden::create([ + 'data' => ['string' => 'Test', 'hidden' => 'Hidden'], + ]); + + assertDatabaseHas(DummyModelWithCastsWithHidden::class, [ + 'data' => json_encode(['string' => 'Test', 'hidden' => 'Hidden']), + ]); +}); + +it('can load a data object with hidden', function () { + DB::table('dummy_model_with_casts_with_hiddens')->insert([ + 'data' => json_encode(['string' => 'Test', 'hidden' => 'Hidden']), + ]); + + /** @var \Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCasts $model */ + $model = DummyModelWithCastsWithHidden::first(); + + expect($model->data)->toEqual(new HiddenData(string: 'Test', hidden: 'Hidden')); +}); + it('can save a null as a value', function () { DummyModelWithCasts::create([ 'data' => null, From 69bb94a9da48a01f2fa93d2e5c69a1731c4618f6 Mon Sep 17 00:00:00 2001 From: Daniel Polito Date: Fri, 4 Aug 2023 09:55:24 -0300 Subject: [PATCH 3/3] Revert "Keep Saving Hidden Attributes to Database" This reverts commit 0498b01961ab393e786fb14f9c07a8b1fab926d1. --- src/Concerns/BaseData.php | 3 +- src/Concerns/BaseDataCollectable.php | 2 - src/Concerns/TransformableData.php | 11 +--- src/Contracts/TransformableData.php | 2 - .../DataCollectionEloquentCast.php | 2 +- .../EloquentCasts/DataEloquentCast.php | 2 +- .../DataCollectableTransformer.php | 2 - src/Transformers/DataTransformer.php | 6 +-- tests/Fakes/HiddenData.php | 16 ------ .../Models/DummyModelWithCastsWithHidden.php | 29 ---------- .../DataCollectionEloquentCastTest.php | 54 +------------------ .../EloquentCasts/DataEloquentCastTest.php | 36 +------------ 12 files changed, 8 insertions(+), 157 deletions(-) delete mode 100644 tests/Fakes/HiddenData.php delete mode 100644 tests/Fakes/Models/DummyModelWithCastsWithHidden.php diff --git a/src/Concerns/BaseData.php b/src/Concerns/BaseData.php index 1ddf5bce..be969a7a 100644 --- a/src/Concerns/BaseData.php +++ b/src/Concerns/BaseData.php @@ -102,9 +102,8 @@ public function transform( bool $transformValues = true, WrapExecutionType $wrapExecutionType = WrapExecutionType::Disabled, bool $mapPropertyNames = true, - bool $hideProperties = true, ): array { - return DataTransformer::create($transformValues, $wrapExecutionType, $mapPropertyNames, $hideProperties)->transform($this); + return DataTransformer::create($transformValues, $wrapExecutionType, $mapPropertyNames)->transform($this); } public function __sleep(): array diff --git a/src/Concerns/BaseDataCollectable.php b/src/Concerns/BaseDataCollectable.php index f7ade92b..39b66ea9 100644 --- a/src/Concerns/BaseDataCollectable.php +++ b/src/Concerns/BaseDataCollectable.php @@ -39,14 +39,12 @@ public function transform( bool $transformValues = true, WrapExecutionType $wrapExecutionType = WrapExecutionType::Disabled, bool $mapPropertyNames = true, - bool $hideProperties = true, ): array { $transformer = new DataCollectableTransformer( $this->dataClass, $transformValues, $wrapExecutionType, $mapPropertyNames, - $hideProperties, $this->getPartialTrees(), $this->items, $this->getWrap(), diff --git a/src/Concerns/TransformableData.php b/src/Concerns/TransformableData.php index 4e96119b..8d9777dc 100644 --- a/src/Concerns/TransformableData.php +++ b/src/Concerns/TransformableData.php @@ -6,8 +6,6 @@ trait TransformableData { - protected $_hideAttributes = true; - public function all(): array { return $this->transform(transformValues: false); @@ -20,7 +18,7 @@ public function toArray(): array public function toJson($options = 0): string { - return json_encode($this->transform(hideProperties: $this->_hideAttributes), $options); + return json_encode($this->transform(), $options); } public function jsonSerialize(): array @@ -32,11 +30,4 @@ public static function castUsing(array $arguments) { return new DataEloquentCast(static::class, $arguments); } - - public function hideAttributes(bool $hideProperties): static - { - $this->_hideAttributes = $hideProperties; - - return $this; - } } diff --git a/src/Contracts/TransformableData.php b/src/Contracts/TransformableData.php index 754c417a..d1127355 100644 --- a/src/Contracts/TransformableData.php +++ b/src/Contracts/TransformableData.php @@ -25,6 +25,4 @@ public function transform( ): array; public static function castUsing(array $arguments); - - public function hideAttributes(bool $hideProperties): static; } diff --git a/src/Support/EloquentCasts/DataCollectionEloquentCast.php b/src/Support/EloquentCasts/DataCollectionEloquentCast.php index 4e3570f3..d0e35b53 100644 --- a/src/Support/EloquentCasts/DataCollectionEloquentCast.php +++ b/src/Support/EloquentCasts/DataCollectionEloquentCast.php @@ -61,6 +61,6 @@ public function set($model, string $key, $value, array $attributes): ?string $dataCollection = new ($this->dataCollectionClass)($this->dataClass, $data); - return $dataCollection->hideAttributes(false)->toJson(); + return $dataCollection->toJson(); } } diff --git a/src/Support/EloquentCasts/DataEloquentCast.php b/src/Support/EloquentCasts/DataEloquentCast.php index a84c5a42..7d156833 100644 --- a/src/Support/EloquentCasts/DataEloquentCast.php +++ b/src/Support/EloquentCasts/DataEloquentCast.php @@ -50,6 +50,6 @@ public function set($model, string $key, $value, array $attributes): ?string throw CannotCastData::shouldBeTransformableData($model::class, $key); } - return $value->hideAttributes(false)->toJson(); + return $value->toJson(); } } diff --git a/src/Transformers/DataCollectableTransformer.php b/src/Transformers/DataCollectableTransformer.php index 1d257a8f..5c3bdbb4 100644 --- a/src/Transformers/DataCollectableTransformer.php +++ b/src/Transformers/DataCollectableTransformer.php @@ -20,7 +20,6 @@ public function __construct( protected bool $transformValues, protected WrapExecutionType $wrapExecutionType, protected bool $mapPropertyNames, - protected bool $hideProperties, protected PartialTrees $trees, protected Enumerable|CursorPaginator|Paginator $items, protected Wrap $wrap, @@ -61,7 +60,6 @@ protected function transformCollection(Enumerable $items): array ? WrapExecutionType::TemporarilyDisabled : $this->wrapExecutionType, $this->mapPropertyNames, - $this->hideProperties, ); } diff --git a/src/Transformers/DataTransformer.php b/src/Transformers/DataTransformer.php index 143f71b6..bddb4de2 100644 --- a/src/Transformers/DataTransformer.php +++ b/src/Transformers/DataTransformer.php @@ -30,16 +30,14 @@ public static function create( bool $transformValues, WrapExecutionType $wrapExecutionType, bool $mapPropertyNames, - bool $hideProperties, ): self { - return new self($transformValues, $wrapExecutionType, $mapPropertyNames, $hideProperties); + return new self($transformValues, $wrapExecutionType, $mapPropertyNames); } public function __construct( protected bool $transformValues, protected WrapExecutionType $wrapExecutionType, protected bool $mapPropertyNames, - protected bool $hideProperties, ) { $this->config = app(DataConfig::class); } @@ -72,7 +70,7 @@ protected function resolvePayload(TransformableData $data): array $payload = []; foreach ($dataClass->properties as $property) { - if ($this->hideProperties && $property->hidden) { + if ($property->hidden) { continue; } diff --git a/tests/Fakes/HiddenData.php b/tests/Fakes/HiddenData.php deleted file mode 100644 index 4d03c36b..00000000 --- a/tests/Fakes/HiddenData.php +++ /dev/null @@ -1,16 +0,0 @@ - HiddenData::class, - 'data_collection' => DataCollection::class.':'.HiddenData::class, - ]; - - public $timestamps = false; - - public static function migrate() - { - Schema::create('dummy_model_with_casts_with_hiddens', function (Blueprint $blueprint) { - $blueprint->increments('id'); - - $blueprint->text('data')->nullable(); - $blueprint->text('data_collection')->nullable(); - }); - } -} diff --git a/tests/Support/EloquentCasts/DataCollectionEloquentCastTest.php b/tests/Support/EloquentCasts/DataCollectionEloquentCastTest.php index 6295ad5f..5b24dfa1 100644 --- a/tests/Support/EloquentCasts/DataCollectionEloquentCastTest.php +++ b/tests/Support/EloquentCasts/DataCollectionEloquentCastTest.php @@ -4,10 +4,8 @@ use function Pest\Laravel\assertDatabaseHas; -use Spatie\LaravelData\Tests\Fakes\HiddenData; - use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCasts; -use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCastsWithHidden; + use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCustomCollectionCasts; use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithDefaultCasts; use Spatie\LaravelData\Tests\Fakes\SimpleData; @@ -15,7 +13,6 @@ beforeEach(function () { DummyModelWithCasts::migrate(); - DummyModelWithCastsWithHidden::migrate(); }); it('can save a data collection', function () { @@ -67,55 +64,6 @@ ])); }); -it('can save a data collection with hidden', function () { - DummyModelWithCastsWithHidden::create([ - 'data_collection' => HiddenData::collection([ - new HiddenData(string: 'Hello', hidden: 'World'), - new HiddenData(string: 'World', hidden: 'Hello'), - ]), - ]); - - assertDatabaseHas(DummyModelWithCastsWithHidden::class, [ - 'data_collection' => json_encode([ - ['string' => 'Hello', 'hidden' => 'World'], - ['string' => 'World', 'hidden' => 'Hello'], - ]), - ]); -}); - -it('can save a data object as an array with hidden', function () { - DummyModelWithCastsWithHidden::create([ - 'data_collection' => [ - ['string' => 'Hello', 'hidden' => 'World'], - ['string' => 'World', 'hidden' => 'Hello'], - ], - ]); - - assertDatabaseHas(DummyModelWithCastsWithHidden::class, [ - 'data_collection' => json_encode([ - ['string' => 'Hello', 'hidden' => 'World'], - ['string' => 'World', 'hidden' => 'Hello'], - ]), - ]); -}); - -it('can load a data object with hidden', function () { - DB::table('dummy_model_with_casts_with_hiddens')->insert([ - 'data_collection' => json_encode([ - ['string' => 'Hello', 'hidden' => 'World'], - ['string' => 'World', 'hidden' => 'Hello'], - ]), - ]); - - /** @var \Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCastsWithHidden $model */ - $model = DummyModelWithCastsWithHidden::first(); - - expect($model->data_collection)->toEqual(HiddenData::collection([ - new HiddenData(string: 'Hello', hidden: 'World'), - new HiddenData(string: 'World', hidden: 'Hello'), - ])); -}); - it('can save a null as a value', function () { DummyModelWithCasts::create([ 'data_collection' => null, diff --git a/tests/Support/EloquentCasts/DataEloquentCastTest.php b/tests/Support/EloquentCasts/DataEloquentCastTest.php index 82cfa0e4..d9ebd0ce 100644 --- a/tests/Support/EloquentCasts/DataEloquentCastTest.php +++ b/tests/Support/EloquentCasts/DataEloquentCastTest.php @@ -4,10 +4,8 @@ use function Pest\Laravel\assertDatabaseHas; -use Spatie\LaravelData\Tests\Fakes\HiddenData; - use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCasts; -use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCastsWithHidden; + use Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithDefaultCasts; use Spatie\LaravelData\Tests\Fakes\SimpleData; @@ -15,7 +13,6 @@ beforeEach(function () { DummyModelWithCasts::migrate(); - DummyModelWithCastsWithHidden::migrate(); }); it('can save a data object', function () { @@ -49,37 +46,6 @@ expect($model->data)->toEqual(new SimpleData('Test')); }); -it('can save a data object with hidden', function () { - DummyModelWithCastsWithHidden::create([ - 'data' => new HiddenData(string: 'Test', hidden: 'Hidden'), - ]); - - assertDatabaseHas(DummyModelWithCastsWithHidden::class, [ - 'data' => json_encode(['string' => 'Test', 'hidden' => 'Hidden']), - ]); -}); - -it('can save a data object as an array with hidden', function () { - DummyModelWithCastsWithHidden::create([ - 'data' => ['string' => 'Test', 'hidden' => 'Hidden'], - ]); - - assertDatabaseHas(DummyModelWithCastsWithHidden::class, [ - 'data' => json_encode(['string' => 'Test', 'hidden' => 'Hidden']), - ]); -}); - -it('can load a data object with hidden', function () { - DB::table('dummy_model_with_casts_with_hiddens')->insert([ - 'data' => json_encode(['string' => 'Test', 'hidden' => 'Hidden']), - ]); - - /** @var \Spatie\LaravelData\Tests\Fakes\Models\DummyModelWithCasts $model */ - $model = DummyModelWithCastsWithHidden::first(); - - expect($model->data)->toEqual(new HiddenData(string: 'Test', hidden: 'Hidden')); -}); - it('can save a null as a value', function () { DummyModelWithCasts::create([ 'data' => null,