From 830ec87d14b6a968f62431837a5fee6f49f982c2 Mon Sep 17 00:00:00 2001 From: Ruben Van Assche Date: Tue, 9 Jan 2024 15:03:45 +0100 Subject: [PATCH] Fix tests --- composer.json | 9 +++--- tests/Attributes/Validation/PasswordTest.php | 8 ++--- .../DataPipes/CastPropertiesDataPipeTest.php | 4 +-- tests/DataTest.php | 31 ++++++++++++++++++- .../{Attributes => }/RulesDataset.php | 0 5 files changed, 40 insertions(+), 12 deletions(-) rename tests/Datasets/{Attributes => }/RulesDataset.php (100%) diff --git a/composer.json b/composer.json index f46bf673e..3a32dbe9b 100644 --- a/composer.json +++ b/composer.json @@ -31,15 +31,14 @@ "nette/php-generator": "^3.5", "nunomaduro/larastan": "^2.0", "orchestra/testbench": "^7.6|^8.0", - "pestphp/pest": "^1.22", - "pestphp/pest-plugin-laravel": "^1.3", + "pestphp/pest": "^1.22|^2.0", + "pestphp/pest-plugin-laravel": "^1.3|^2.0", "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.1", - "phpunit/phpunit": "^9.3", + "phpunit/phpunit": "^9.3|^10.0", "spatie/invade": "^1.0", "spatie/laravel-typescript-transformer": "^2.3", - "spatie/pest-plugin-snapshots": "^1.1", - "spatie/phpunit-snapshot-assertions": "^4.2", + "spatie/pest-plugin-snapshots": "^1.1|^2.0", "spatie/test-time": "^1.2" }, "autoload" : { diff --git a/tests/Attributes/Validation/PasswordTest.php b/tests/Attributes/Validation/PasswordTest.php index 18a476b0b..528ed3f8d 100644 --- a/tests/Attributes/Validation/PasswordTest.php +++ b/tests/Attributes/Validation/PasswordTest.php @@ -19,21 +19,21 @@ function (callable|null $setDefaults, array $expectedConfig) { } )->with(function () { yield 'min length set to 42' => [ - 'setDefaults' => fn () => fn () => ValidationPassword::defaults(fn () => ValidationPassword::min(42)), + 'setDefaults' => fn () => ValidationPassword::defaults(fn () => ValidationPassword::min(42)), 'expectedConfig' => [ 'min' => 42, ], ]; - +// yield 'unconfigured' => [ - 'setDefaults' => fn () => fn () => ValidationPath::create(), + 'setDefaults' => fn () => ValidationPath::create(), 'expectedConfig' => [ 'min' => 8, ], ]; yield 'uncompromised' => [ - 'setDefaults' => fn () => fn () => ValidationPassword::defaults(fn () => ValidationPassword::min(69)->uncompromised(7)), + 'setDefaults' => fn () => ValidationPassword::defaults(fn () => ValidationPassword::min(69)->uncompromised(7)), 'expectedConfig' => [ 'min' => 69, 'uncompromised' => true, diff --git a/tests/DataPipes/CastPropertiesDataPipeTest.php b/tests/DataPipes/CastPropertiesDataPipeTest.php index 4d636ba5b..193ddc56c 100644 --- a/tests/DataPipes/CastPropertiesDataPipeTest.php +++ b/tests/DataPipes/CastPropertiesDataPipeTest.php @@ -60,7 +60,7 @@ ->float->toEqual(3.14) ->string->toEqual('Hello world') ->array->toEqual([1, 1, 2, 3, 5, 8]) - ->nullable->toBeNull([1, 1, 2, 3, 5, 8]) + ->nullable->toBeNull() ->undefinable->toBeInstanceOf(Optional::class) ->mixed->toEqual(42) ->defaultCast->toEqual(DateTime::createFromFormat(DATE_ATOM, '1994-05-16T12:00:00+01:00')) @@ -110,7 +110,7 @@ ->float->toEqual(3.14) ->string->toEqual('Hello world') ->array->toEqual([1, 1, 2, 3, 5, 8]) - ->nullable->toBeNull([1, 1, 2, 3, 5, 8]) + ->nullable->toBeNull() ->mixed->toBe(42) ->defaultCast->toEqual(DateTime::createFromFormat(DATE_ATOM, '1994-05-16T12:00:00+02:00')) ->explicitCast->toEqual(DateTime::createFromFormat('d-m-Y', '16-06-1994')) diff --git a/tests/DataTest.php b/tests/DataTest.php index 1b5f66694..80ad4af20 100644 --- a/tests/DataTest.php +++ b/tests/DataTest.php @@ -29,10 +29,12 @@ use Spatie\LaravelData\Contracts\DataObject; use Spatie\LaravelData\Data; use Spatie\LaravelData\DataCollection; +use Spatie\LaravelData\Dto; use Spatie\LaravelData\Exceptions\CannotCreateData; use Spatie\LaravelData\Exceptions\CannotSetComputedValue; use Spatie\LaravelData\Lazy; use Spatie\LaravelData\Optional; +use Spatie\LaravelData\Resource; use Spatie\LaravelData\Support\DataProperty; use Spatie\LaravelData\Support\Transformation\TransformationContext; use Spatie\LaravelData\Support\Transformation\TransformationContextFactory; @@ -53,6 +55,8 @@ use Spatie\LaravelData\Tests\Fakes\SimpleDataWithMappedProperty; use Spatie\LaravelData\Tests\Fakes\SimpleDataWithoutConstructor; use Spatie\LaravelData\Tests\Fakes\SimpleDataWithWrap; +use Spatie\LaravelData\Tests\Fakes\SimpleDto; +use Spatie\LaravelData\Tests\Fakes\SimpleResource; use Spatie\LaravelData\Tests\Fakes\Transformers\ConfidentialDataCollectionTransformer; use Spatie\LaravelData\Tests\Fakes\Transformers\ConfidentialDataTransformer; use Spatie\LaravelData\Tests\Fakes\Transformers\StringToUpperTransformer; @@ -60,7 +64,6 @@ use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer; use Spatie\LaravelData\Transformers\Transformer; use Spatie\LaravelData\WithData; - use function Spatie\Snapshots\assertMatchesSnapshot; it('can create a resource', function () { @@ -1555,3 +1558,29 @@ public function transform(DataProperty $property, mixed $value, TransformationCo 'dateTime' => 'Custom transformed date', ]); }); + +it('can use data as an DTO', function () { + $dto = SimpleDto::from('Hello World'); + + expect($dto)->toBeInstanceOf(SimpleDto::class) + ->toBeInstanceOf(Dto::class) + ->not()->toBeInstanceOf(Data::class) + ->not()->toHaveMethods(['toArray', 'toJson', 'toResponse', 'all', 'include', 'exclude', 'only', 'except', 'transform', 'with', 'jsonSerialize']) + ->and($dto->string)->toEqual('Hello World'); + + expect(fn() => SimpleDto::validate(['string' => null]))->toThrow(ValidationException::class); +}); + +it('can use data as an Resource', function () { + $resource = SimpleResource::from('Hello World'); + + expect($resource)->toBeInstanceOf(SimpleResource::class) + ->toBeInstanceOf(Resource::class) + ->not()->toBeInstanceOf(Data::class) + ->toHaveMethods(['toArray', 'toJson', 'toResponse', 'all', 'include', 'exclude', 'only', 'except', 'transform', 'with', 'jsonSerialize']) + ->and($resource->string)->toEqual('Hello World'); + + expect($resource)->not()->toHaveMethods([ + 'validate' + ]); +}); diff --git a/tests/Datasets/Attributes/RulesDataset.php b/tests/Datasets/RulesDataset.php similarity index 100% rename from tests/Datasets/Attributes/RulesDataset.php rename to tests/Datasets/RulesDataset.php