From 850fc5fe7fb96bb1235e23c3adc87a2903af3dcc Mon Sep 17 00:00:00 2001 From: Oleksandr Oliinyk Date: Fri, 2 Feb 2024 18:37:44 +0200 Subject: [PATCH 1/2] test: case for the issue #1505; duplication of properties that have generic types specified and descriptions; --- .../Models/ArrayCastsWithComment.php | 43 +++++++++ .../ArrayCastsWithComment/Test.php | 24 +++++ .../__snapshots__/Test__test__1.php | 94 +++++++++++++++++++ 3 files changed, 161 insertions(+) create mode 100644 tests/Console/ModelsCommand/ArrayCastsWithComment/Models/ArrayCastsWithComment.php create mode 100644 tests/Console/ModelsCommand/ArrayCastsWithComment/Test.php create mode 100644 tests/Console/ModelsCommand/ArrayCastsWithComment/__snapshots__/Test__test__1.php diff --git a/tests/Console/ModelsCommand/ArrayCastsWithComment/Models/ArrayCastsWithComment.php b/tests/Console/ModelsCommand/ArrayCastsWithComment/Models/ArrayCastsWithComment.php new file mode 100644 index 0000000..b6bb6ed --- /dev/null +++ b/tests/Console/ModelsCommand/ArrayCastsWithComment/Models/ArrayCastsWithComment.php @@ -0,0 +1,43 @@ +|null $cast_to_array -- These three should not be duplicated + * @property array $cast_to_json some-description + * @property \Illuminate\Support\Collection $cast_to_collection some-description + * + * @property array|null $cast_to_encrypted_array -- These three are OK (no types) + * @property array $cast_to_encrypted_json some-description + * @property \Illuminate\Support\Collection $cast_to_encrypted_collection some-description + * + * @property string $cast_to_string -- The next three are OK (no description), this not included + * + * @property array|null $cast_to_immutable_date + * @property array $cast_to_immutable_date_serialization + * @property \Illuminate\Support\Collection $cast_to_immutable_custom_datetime + */ +class ArrayCastsWithComment extends Model +{ + protected $table = 'simple_casts'; + + protected $casts = [ + 'cast_to_array' => 'array', + 'cast_to_json' => 'json', + 'cast_to_collection' => 'collection', + + 'cast_to_encrypted_array' => 'array', + 'cast_to_encrypted_json' => 'json', + 'cast_to_encrypted_collection' => 'collection', + + 'cast_to_string' => 'string', + + 'cast_to_immutable_date' => 'array', + 'cast_to_immutable_date_serialization' => 'json', + 'cast_to_immutable_custom_datetime' => 'collection', + ]; +} diff --git a/tests/Console/ModelsCommand/ArrayCastsWithComment/Test.php b/tests/Console/ModelsCommand/ArrayCastsWithComment/Test.php new file mode 100644 index 0000000..3833a55 --- /dev/null +++ b/tests/Console/ModelsCommand/ArrayCastsWithComment/Test.php @@ -0,0 +1,24 @@ +app->make(ModelsCommand::class); + + $tester = $this->runCommand($command, [ + '--write' => true, + ]); + + $this->assertSame(0, $tester->getStatusCode()); + $this->assertStringContainsString('Written new phpDocBlock to', $tester->getDisplay()); + $this->assertMatchesMockedSnapshot(); + } +} diff --git a/tests/Console/ModelsCommand/ArrayCastsWithComment/__snapshots__/Test__test__1.php b/tests/Console/ModelsCommand/ArrayCastsWithComment/__snapshots__/Test__test__1.php new file mode 100644 index 0000000..0236723 --- /dev/null +++ b/tests/Console/ModelsCommand/ArrayCastsWithComment/__snapshots__/Test__test__1.php @@ -0,0 +1,94 @@ +|null $cast_to_array -- These three should not be duplicated + * @property array $cast_to_json some-description + * @property \Illuminate\Support\Collection $cast_to_collection some-description + * @property array|null $cast_to_encrypted_array -- These three are OK (no types) + * @property array $cast_to_encrypted_json some-description + * @property \Illuminate\Support\Collection $cast_to_encrypted_collection some-description + * @property string $cast_to_string -- The next three are OK (no description), this not included + * @property array|null $cast_to_immutable_date + * @property array $cast_to_immutable_date_serialization + * @property \Illuminate\Support\Collection $cast_to_immutable_custom_datetime + * @property string $cast_to_int + * @property string $cast_to_integer + * @property string $cast_to_real + * @property string $cast_to_float + * @property string $cast_to_double + * @property string $cast_to_decimal + * @property string $cast_to_bool + * @property string $cast_to_boolean + * @property string $cast_to_object + * @property string $cast_to_date + * @property string $cast_to_datetime + * @property string $cast_to_date_serialization + * @property string $cast_to_datetime_serialization + * @property string $cast_to_custom_datetime + * @property string $cast_to_immutable_datetime + * @property string $cast_to_immutable_datetime_serialization + * @property string $cast_to_timestamp + * @property string $cast_to_encrypted + * @property string $cast_to_encrypted_object + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment newModelQuery() + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment query() + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToArray($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToBool($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToBoolean($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToCollection($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToCustomDatetime($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToDate($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToDateSerialization($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToDatetime($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToDatetimeSerialization($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToDecimal($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToDouble($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToEncrypted($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToEncryptedArray($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToEncryptedCollection($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToEncryptedJson($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToEncryptedObject($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToFloat($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToImmutableCustomDatetime($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToImmutableDate($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToImmutableDateSerialization($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToImmutableDatetime($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToImmutableDatetimeSerialization($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToInt($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToInteger($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToJson($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToObject($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToReal($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToString($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArrayCastsWithComment whereCastToTimestamp($value) + * @mixin \Eloquent + */ +class ArrayCastsWithComment extends Model +{ + protected $table = 'simple_casts'; + + protected $casts = [ + 'cast_to_array' => 'array', + 'cast_to_json' => 'json', + 'cast_to_collection' => 'collection', + + 'cast_to_encrypted_array' => 'array', + 'cast_to_encrypted_json' => 'json', + 'cast_to_encrypted_collection' => 'collection', + + 'cast_to_string' => 'string', + + 'cast_to_immutable_date' => 'array', + 'cast_to_immutable_date_serialization' => 'json', + 'cast_to_immutable_custom_datetime' => 'collection', + ]; +} From 937495240214688e4d83e446cc2b5c6c8f15105a Mon Sep 17 00:00:00 2001 From: Markus Podar Date: Sat, 3 Feb 2024 20:54:09 +0100 Subject: [PATCH 2/2] Adapt snapshot testcase --- tests/Console/ModelsCommand/ArrayCastsWithComment/Test.php | 4 ++++ .../ArrayCastsWithComment/__snapshots__/Test__test__1.php | 3 +++ 2 files changed, 7 insertions(+) diff --git a/tests/Console/ModelsCommand/ArrayCastsWithComment/Test.php b/tests/Console/ModelsCommand/ArrayCastsWithComment/Test.php index 3833a55..a0be02e 100644 --- a/tests/Console/ModelsCommand/ArrayCastsWithComment/Test.php +++ b/tests/Console/ModelsCommand/ArrayCastsWithComment/Test.php @@ -9,6 +9,10 @@ use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand; class Test extends AbstractModelsCommand { + /** + * The generated snapshot is wrong until + * https://github.com/barryvdh/laravel-ide-helper/issues/1505 is fixed + */ public function test(): void { $command = $this->app->make(ModelsCommand::class); diff --git a/tests/Console/ModelsCommand/ArrayCastsWithComment/__snapshots__/Test__test__1.php b/tests/Console/ModelsCommand/ArrayCastsWithComment/__snapshots__/Test__test__1.php index 0236723..9dfa034 100644 --- a/tests/Console/ModelsCommand/ArrayCastsWithComment/__snapshots__/Test__test__1.php +++ b/tests/Console/ModelsCommand/ArrayCastsWithComment/__snapshots__/Test__test__1.php @@ -28,6 +28,9 @@ use Illuminate\Database\Eloquent\Model; * @property string $cast_to_bool * @property string $cast_to_boolean * @property string $cast_to_object + * @property array $cast_to_array + * @property array $cast_to_json + * @property \Illuminate\Support\Collection $cast_to_collection * @property string $cast_to_date * @property string $cast_to_datetime * @property string $cast_to_date_serialization