From f100aa7647d26b3dcd5194189d5e24fd7a3738d0 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sat, 28 Oct 2023 15:24:08 +0330 Subject: [PATCH 01/27] Create Casting model to test casts; --- tests/Models/Casting.php | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 tests/Models/Casting.php diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php new file mode 100644 index 000000000..e3dd136c4 --- /dev/null +++ b/tests/Models/Casting.php @@ -0,0 +1,22 @@ + 'int' + ]; +} From 7a6453f125a106a38474090421096ece9ddb144c Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sat, 28 Oct 2023 15:24:35 +0330 Subject: [PATCH 02/27] Add castAttribute method at top of setAttribute method; --- src/Eloquent/Model.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Eloquent/Model.php b/src/Eloquent/Model.php index 05a20bb31..cf08dc6d8 100644 --- a/src/Eloquent/Model.php +++ b/src/Eloquent/Model.php @@ -205,6 +205,11 @@ protected function getAttributeFromArray($key) /** @inheritdoc */ public function setAttribute($key, $value) { + //Add casts + if ($this->hasCast($key)) { + $value = $this->castAttribute($key, $value); + } + // Convert _id to ObjectID. if ($key === '_id' && is_string($value)) { $builder = $this->newBaseQueryBuilder(); From ff2aa6589947f57e359de81589d7ea8e3ac87045 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sat, 28 Oct 2023 15:25:09 +0330 Subject: [PATCH 03/27] Create IntegerTest.php --- tests/Casts/IntegerTest.php | 57 +++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 tests/Casts/IntegerTest.php diff --git a/tests/Casts/IntegerTest.php b/tests/Casts/IntegerTest.php new file mode 100644 index 000000000..6f30b292f --- /dev/null +++ b/tests/Casts/IntegerTest.php @@ -0,0 +1,57 @@ +create(['number' => 1]); + $check = Casting::query()->find($model->_id); + + self::assertIsInt($check->number); + self::assertEquals(1,$check->number); + + $model->update(['number' => 2]); + $check = Casting::query()->find($model->_id); + + self::assertIsInt($check->number); + self::assertEquals(2,$check->number); + } + /** + * @return void + * @group hans + */ + public function testIntAsString(): void + { + $model = Casting::query()->create(['number' => '1']); + + $check = Casting::query()->find($model->_id); + self::assertIsInt($check->number); + self::assertEquals(1,$check->number); + + $model->update(['number' => '1b']); + + $check = Casting::query()->find($model->_id); + self::assertIsInt($check->number); + self::assertEquals(1,$check->number); + + $model->update(['number' => 'a1b']); + + $check = Casting::query()->find($model->_id); + self::assertIsInt($check->number); + self::assertEquals(0,$check->number); + } +} From 0bca346609864d5f4ceb735a9f5ed1bdc6b61a06 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sat, 28 Oct 2023 16:16:19 +0330 Subject: [PATCH 04/27] WIP --- tests/Casts/IntegerTest.php | 35 +++++++++++++---------------------- tests/Models/Casting.php | 4 ++-- 2 files changed, 15 insertions(+), 24 deletions(-) diff --git a/tests/Casts/IntegerTest.php b/tests/Casts/IntegerTest.php index 6f30b292f..4c35d5781 100644 --- a/tests/Casts/IntegerTest.php +++ b/tests/Casts/IntegerTest.php @@ -18,40 +18,31 @@ protected function setUp(): void public function testInt(): void { - $model = Casting::query()->create(['number' => 1]); + $model = Casting::query()->create(['intNumber' => 1]); $check = Casting::query()->find($model->_id); - self::assertIsInt($check->number); - self::assertEquals(1,$check->number); + self::assertIsInt($check->intNumber); + self::assertEquals(1,$check->intNumber); - $model->update(['number' => 2]); + $model->update(['intNumber' => 2]); $check = Casting::query()->find($model->_id); - self::assertIsInt($check->number); - self::assertEquals(2,$check->number); + self::assertIsInt($check->intNumber); + self::assertEquals(2,$check->intNumber); } - /** - * @return void - * @group hans - */ + public function testIntAsString(): void { - $model = Casting::query()->create(['number' => '1']); - + $model = Casting::query()->create(['intNumber' => '1']); $check = Casting::query()->find($model->_id); - self::assertIsInt($check->number); - self::assertEquals(1,$check->number); - $model->update(['number' => '1b']); + self::assertIsInt($check->intNumber); + self::assertEquals(1,$check->intNumber); + $model->update(['intNumber' => '2']); $check = Casting::query()->find($model->_id); - self::assertIsInt($check->number); - self::assertEquals(1,$check->number); - $model->update(['number' => 'a1b']); - - $check = Casting::query()->find($model->_id); - self::assertIsInt($check->number); - self::assertEquals(0,$check->number); + self::assertIsInt($check->intNumber); + self::assertEquals(2,$check->intNumber); } } diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index e3dd136c4..1e619ef60 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -13,10 +13,10 @@ class Casting extends Eloquent protected $collection = 'casting'; protected $fillable = [ - 'number' + 'intNumber' ]; protected $casts = [ - 'number' => 'int' + 'intNumber' => 'int' ]; } From 5e5d3f6ca0dae221573af121ecd533b8cee4a700 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sat, 28 Oct 2023 16:35:03 +0330 Subject: [PATCH 05/27] Tests for float; --- tests/Casts/FloatTest.php | 48 +++++++++++++++++++++++++++++++++++++++ tests/Models/Casting.php | 6 +++-- 2 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 tests/Casts/FloatTest.php diff --git a/tests/Casts/FloatTest.php b/tests/Casts/FloatTest.php new file mode 100644 index 000000000..ef943cea5 --- /dev/null +++ b/tests/Casts/FloatTest.php @@ -0,0 +1,48 @@ +create(['floatNumber' => 1.79]); + $check = Casting::query()->find($model->_id); + + self::assertIsFloat($check->floatNumber); + self::assertEquals(1.79,$check->floatNumber); + + $model->update(['floatNumber' => 7E-5]); + $check = Casting::query()->find($model->_id); + + self::assertIsFloat($check->floatNumber); + self::assertEquals(7E-5,$check->floatNumber); + } + + public function testFloatAsString(): void + { + $model = Casting::query()->create(['floatNumber' => '1.79']); + $check = Casting::query()->find($model->_id); + + self::assertIsFloat($check->floatNumber); + self::assertEquals(1.79,$check->floatNumber); + + $model->update(['floatNumber' => '7E-5']); + $check = Casting::query()->find($model->_id); + + self::assertIsFloat($check->floatNumber); + self::assertEquals(7E-5,$check->floatNumber); + } +} diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index 1e619ef60..f39e4821b 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -13,10 +13,12 @@ class Casting extends Eloquent protected $collection = 'casting'; protected $fillable = [ - 'intNumber' + 'intNumber', + 'floatNumber', ]; protected $casts = [ - 'intNumber' => 'int' + 'intNumber' => 'int', + 'floatNumber' => 'float', ]; } From e4a41525ae851048a77ac36ce8fb6b171d74ca1c Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sat, 28 Oct 2023 17:23:17 +0330 Subject: [PATCH 06/27] override asDecimal method; --- src/Eloquent/Model.php | 28 ++++++++++++++++++++++++++++ tests/Casts/IntegerTest.php | 1 + tests/Models/Casting.php | 2 ++ 3 files changed, 31 insertions(+) diff --git a/src/Eloquent/Model.php b/src/Eloquent/Model.php index cf08dc6d8..8dad20deb 100644 --- a/src/Eloquent/Model.php +++ b/src/Eloquent/Model.php @@ -4,6 +4,9 @@ namespace MongoDB\Laravel\Eloquent; +use Brick\Math\BigDecimal; +use Brick\Math\Exception\MathException as BrickMathException; +use Brick\Math\RoundingMode; use DateTimeInterface; use Illuminate\Contracts\Queue\QueueableCollection; use Illuminate\Contracts\Queue\QueueableEntity; @@ -11,9 +14,11 @@ use Illuminate\Database\Eloquent\Model as BaseModel; use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Support\Arr; +use Illuminate\Support\Exceptions\MathException; use Illuminate\Support\Facades\Date; use Illuminate\Support\Str; use MongoDB\BSON\Binary; +use MongoDB\BSON\Decimal128; use MongoDB\BSON\ObjectID; use MongoDB\BSON\UTCDateTime; use MongoDB\Laravel\Query\Builder as QueryBuilder; @@ -71,6 +76,13 @@ abstract class Model extends BaseModel */ protected $parentRelation; + /** + * Determine storing or retrieving data from database + * + * @var bool + */ + protected $storingOnDB = false; + /** * List of field names to unset from the document on save. * @@ -205,6 +217,7 @@ protected function getAttributeFromArray($key) /** @inheritdoc */ public function setAttribute($key, $value) { + $this->storingOnDB = true; //Add casts if ($this->hasCast($key)) { $value = $this->castAttribute($key, $value); @@ -236,6 +249,21 @@ public function setAttribute($key, $value) return parent::setAttribute($key, $value); } + /** @inheritdoc */ + protected function asDecimal($value, $decimals) + { + try { + $value = (string) BigDecimal::of((string)$value)->toScale((int)$decimals, RoundingMode::HALF_UP); + if ($this->storingOnDB) { + $value = new Decimal128($value); + } + + return $value; + } catch (BrickMathException $e) { + throw new MathException('Unable to cast value to a decimal.', previous: $e); + } + } + /** @inheritdoc */ public function attributesToArray() { diff --git a/tests/Casts/IntegerTest.php b/tests/Casts/IntegerTest.php index 4c35d5781..515c5e3e5 100644 --- a/tests/Casts/IntegerTest.php +++ b/tests/Casts/IntegerTest.php @@ -7,6 +7,7 @@ use MongoDB\Laravel\Tests\Models\Casting; use MongoDB\Laravel\Tests\TestCase; +// TODO: Int32 and Int64 support class IntegerTest extends TestCase { protected function setUp(): void diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index f39e4821b..23200ffe1 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -15,10 +15,12 @@ class Casting extends Eloquent protected $fillable = [ 'intNumber', 'floatNumber', + 'decimalNumber', ]; protected $casts = [ 'intNumber' => 'int', 'floatNumber' => 'float', + 'decimalNumber' => 'decimal:2', ]; } From 06491a7009c6e7b56accd69c0d6c9bde8e0ac470 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sat, 28 Oct 2023 17:23:38 +0330 Subject: [PATCH 07/27] Tests for Decimal; --- tests/Casts/DecimalTest.php | 48 +++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 tests/Casts/DecimalTest.php diff --git a/tests/Casts/DecimalTest.php b/tests/Casts/DecimalTest.php new file mode 100644 index 000000000..67ea246b9 --- /dev/null +++ b/tests/Casts/DecimalTest.php @@ -0,0 +1,48 @@ +create(['decimalNumber' => 100.99]); + $check = Casting::query()->find($model->_id); + + self::assertIsString($check->decimalNumber); + self::assertEquals('100.99',$check->decimalNumber); + + $model->update(['decimalNumber' => 9999.9]); + $check = Casting::query()->find($model->_id); + + self::assertIsString($check->decimalNumber); + self::assertEquals('9999.90',$check->decimalNumber); + } + + public function testDecimalAsString(): void + { + $model = Casting::query()->create(['decimalNumber' => '120.79']); + $check = Casting::query()->find($model->_id); + + self::assertIsString($check->decimalNumber); + self::assertEquals('120.79',$check->decimalNumber); + + $model->update(['decimalNumber' => '795']); + $check = Casting::query()->find($model->_id); + + self::assertIsString($check->decimalNumber); + self::assertEquals('795.00',$check->decimalNumber); + } +} From c601d7820cd5672b3dbc5c75d2b881bbe919db98 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sat, 28 Oct 2023 17:38:29 +0330 Subject: [PATCH 08/27] Add tests for string; --- tests/Casts/DecimalTest.php | 2 +- tests/Casts/StringTest.php | 33 +++++++++++++++++++++++++++++++++ tests/Models/Casting.php | 3 +++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 tests/Casts/StringTest.php diff --git a/tests/Casts/DecimalTest.php b/tests/Casts/DecimalTest.php index 67ea246b9..3dc09c45b 100644 --- a/tests/Casts/DecimalTest.php +++ b/tests/Casts/DecimalTest.php @@ -6,7 +6,7 @@ use MongoDB\Laravel\Tests\Models\Casting; use MongoDB\Laravel\Tests\TestCase; -/** @group hans */ + class DecimalTest extends TestCase { protected function setUp(): void diff --git a/tests/Casts/StringTest.php b/tests/Casts/StringTest.php new file mode 100644 index 000000000..c96ad641d --- /dev/null +++ b/tests/Casts/StringTest.php @@ -0,0 +1,33 @@ +create(['stringContent' => "If I'ma shoot, I shoot to kill"]); + $check = Casting::query()->find($model->_id); + + self::assertIsString($check->stringContent); + self::assertEquals("If I'ma shoot, I shoot to kill",$check->stringContent); + + $model->update(['stringContent' => 'Do what I want to do at will']); + $check = Casting::query()->find($model->_id); + + self::assertIsString($check->stringContent); + self::assertEquals('Do what I want to do at will',$check->stringContent); + } +} diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index 23200ffe1..047ee8cd6 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -16,11 +16,14 @@ class Casting extends Eloquent 'intNumber', 'floatNumber', 'decimalNumber', + 'stringContent', + 'stringContent', ]; protected $casts = [ 'intNumber' => 'int', 'floatNumber' => 'float', 'decimalNumber' => 'decimal:2', + 'stringContent' => 'string', ]; } From c327eb0d99559d8f861ea0599b12f62e966e9de2 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sat, 28 Oct 2023 17:46:19 +0330 Subject: [PATCH 09/27] Add tests for boolean; --- tests/Casts/BooleanTest.php | 60 +++++++++++++++++++++++++++++++++++++ tests/Models/Casting.php | 2 ++ 2 files changed, 62 insertions(+) create mode 100644 tests/Casts/BooleanTest.php diff --git a/tests/Casts/BooleanTest.php b/tests/Casts/BooleanTest.php new file mode 100644 index 000000000..15786566a --- /dev/null +++ b/tests/Casts/BooleanTest.php @@ -0,0 +1,60 @@ +create(['booleanValue' => true]); + $check = Casting::query()->find($model->_id); + + self::assertIsBool($check->booleanValue); + self::assertEquals(true,$check->booleanValue); + + $model->update(['booleanValue' => false]); + $check = Casting::query()->find($model->_id); + + self::assertIsBool($check->booleanValue); + self::assertEquals(false,$check->booleanValue); + + $model->update(['booleanValue' => 1]); + $check = Casting::query()->find($model->_id); + + self::assertIsBool($check->booleanValue); + self::assertEquals(true,$check->booleanValue); + + $model->update(['booleanValue' => 0]); + $check = Casting::query()->find($model->_id); + + self::assertIsBool($check->booleanValue); + self::assertEquals(false,$check->booleanValue); + } + + public function testBoolAsString(): void + { + $model = Casting::query()->create(['booleanValue' => '1.79']); + $check = Casting::query()->find($model->_id); + + self::assertIsBool($check->booleanValue); + self::assertEquals(true,$check->booleanValue); + + $model->update(['booleanValue' => '0']); + $check = Casting::query()->find($model->_id); + + self::assertIsBool($check->booleanValue); + self::assertEquals(false,$check->booleanValue); + } +} diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index 047ee8cd6..c7db736f4 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -18,6 +18,7 @@ class Casting extends Eloquent 'decimalNumber', 'stringContent', 'stringContent', + 'booleanValue', ]; protected $casts = [ @@ -25,5 +26,6 @@ class Casting extends Eloquent 'floatNumber' => 'float', 'decimalNumber' => 'decimal:2', 'stringContent' => 'string', + 'booleanValue' => 'boolean', ]; } From 75bf7c14ad3ce0b25ffa6cfc52321901b4d7b1f8 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sat, 28 Oct 2023 21:05:10 +0330 Subject: [PATCH 10/27] Override fromJson method; --- src/Eloquent/Model.php | 10 ++++++++++ tests/Casts/IntegerTest.php | 1 - tests/Models/Casting.php | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Eloquent/Model.php b/src/Eloquent/Model.php index 8dad20deb..250b1461f 100644 --- a/src/Eloquent/Model.php +++ b/src/Eloquent/Model.php @@ -11,6 +11,7 @@ use Illuminate\Contracts\Queue\QueueableCollection; use Illuminate\Contracts\Queue\QueueableEntity; use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Database\Eloquent\Casts\Json; use Illuminate\Database\Eloquent\Model as BaseModel; use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Support\Arr; @@ -264,6 +265,15 @@ protected function asDecimal($value, $decimals) } } + /** @inheritdoc */ + public function fromJson($value, $asObject = false) + { + if ($this->storingOnDB && !is_string($value)) { + $value = Json::encode($value ?? ''); + } + return Json::decode($value ?? '', ! $asObject); + } + /** @inheritdoc */ public function attributesToArray() { diff --git a/tests/Casts/IntegerTest.php b/tests/Casts/IntegerTest.php index 515c5e3e5..4c35d5781 100644 --- a/tests/Casts/IntegerTest.php +++ b/tests/Casts/IntegerTest.php @@ -7,7 +7,6 @@ use MongoDB\Laravel\Tests\Models\Casting; use MongoDB\Laravel\Tests\TestCase; -// TODO: Int32 and Int64 support class IntegerTest extends TestCase { protected function setUp(): void diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index c7db736f4..f0e68ad91 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -19,6 +19,7 @@ class Casting extends Eloquent 'stringContent', 'stringContent', 'booleanValue', + 'objectValue', ]; protected $casts = [ @@ -27,5 +28,6 @@ class Casting extends Eloquent 'decimalNumber' => 'decimal:2', 'stringContent' => 'string', 'booleanValue' => 'boolean', + 'objectValue' => 'object', ]; } From b35c32d85e4023df0b15df162158a4497eb53b76 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sat, 28 Oct 2023 21:05:21 +0330 Subject: [PATCH 11/27] Tests for object; --- tests/Casts/ObjectTest.php | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 tests/Casts/ObjectTest.php diff --git a/tests/Casts/ObjectTest.php b/tests/Casts/ObjectTest.php new file mode 100644 index 000000000..ec770be28 --- /dev/null +++ b/tests/Casts/ObjectTest.php @@ -0,0 +1,33 @@ +create(['objectValue' => ['g' => 'G-Eazy']]); + $check = Casting::query()->find($model->_id); + + self::assertIsObject($check->objectValue); + self::assertEquals((object)['g' => 'G-Eazy'],$check->objectValue); + + $model->update(['objectValue' => ['Dont let me go' => 'Even the brightest of colors turn greys']]); + $check = Casting::query()->find($model->_id); + + self::assertIsObject($check->objectValue); + self::assertEquals((object)['Dont let me go' => 'Even the brightest of colors turn greys'],$check->objectValue); + } +} From 5b0a44e047372a5dada67a2d590613c3546bf411 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sat, 28 Oct 2023 21:09:25 +0330 Subject: [PATCH 12/27] Add tests for jsonl --- tests/Casts/JsonTest.php | 33 +++++++++++++++++++++++++++++++++ tests/Models/Casting.php | 2 ++ 2 files changed, 35 insertions(+) create mode 100644 tests/Casts/JsonTest.php diff --git a/tests/Casts/JsonTest.php b/tests/Casts/JsonTest.php new file mode 100644 index 000000000..b1a1c8444 --- /dev/null +++ b/tests/Casts/JsonTest.php @@ -0,0 +1,33 @@ +create(['jsonValue' => ['g' => 'G-Eazy']]); + $check = Casting::query()->find($model->_id); + + self::assertIsArray($check->jsonValue); + self::assertEquals(['g' => 'G-Eazy'],$check->jsonValue); + + $model->update(['jsonValue' => ['Dont let me go' => 'Even the longest of nights turn days']]); + $check = Casting::query()->find($model->_id); + + self::assertIsArray($check->jsonValue); + self::assertEquals(['Dont let me go' => 'Even the longest of nights turn days'],$check->jsonValue); + } +} diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index f0e68ad91..44120b0a0 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -20,6 +20,7 @@ class Casting extends Eloquent 'stringContent', 'booleanValue', 'objectValue', + 'jsonValue', ]; protected $casts = [ @@ -29,5 +30,6 @@ class Casting extends Eloquent 'stringContent' => 'string', 'booleanValue' => 'boolean', 'objectValue' => 'object', + 'jsonValue' => 'json', ]; } From 5bbe816fe73df8aeace68efafac261cb1877fecd Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sat, 28 Oct 2023 21:12:11 +0330 Subject: [PATCH 13/27] Add tests for collection; --- tests/Casts/CollectionTest.php | 35 ++++++++++++++++++++++++++++++++++ tests/Models/Casting.php | 2 ++ 2 files changed, 37 insertions(+) create mode 100644 tests/Casts/CollectionTest.php diff --git a/tests/Casts/CollectionTest.php b/tests/Casts/CollectionTest.php new file mode 100644 index 000000000..d58b74e9a --- /dev/null +++ b/tests/Casts/CollectionTest.php @@ -0,0 +1,35 @@ +create(['collectionValue' => ['g' => 'G-Eazy']]); + $check = Casting::query()->find($model->_id); + + self::assertInstanceOf(Collection::class,$check->collectionValue); + self::assertEquals(collect(['g' => 'G-Eazy']),$check->collectionValue); + + $model->update(['collectionValue' => ['Dont let me go' => 'Even the longest of nights turn days']]); + $check = Casting::query()->find($model->_id); + + self::assertInstanceOf(Collection::class,$check->collectionValue); + self::assertEquals(collect(['Dont let me go' => 'Even the longest of nights turn days']),$check->collectionValue); + } +} diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index 44120b0a0..4b9a851fa 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -21,6 +21,7 @@ class Casting extends Eloquent 'booleanValue', 'objectValue', 'jsonValue', + 'collectionValue', ]; protected $casts = [ @@ -31,5 +32,6 @@ class Casting extends Eloquent 'booleanValue' => 'boolean', 'objectValue' => 'object', 'jsonValue' => 'json', + 'collectionValue' => 'collection', ]; } From cf3b5cc7d2acf11a849260fb4c34a45de442a083 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sun, 29 Oct 2023 14:36:59 +0330 Subject: [PATCH 14/27] Add tests for date; --- tests/Casts/DateTest.php | 56 ++++++++++++++++++++++++++++++++++++++++ tests/Models/Casting.php | 2 ++ 2 files changed, 58 insertions(+) create mode 100644 tests/Casts/DateTest.php diff --git a/tests/Casts/DateTest.php b/tests/Casts/DateTest.php new file mode 100644 index 000000000..34622889d --- /dev/null +++ b/tests/Casts/DateTest.php @@ -0,0 +1,56 @@ +create(['dateField' => now()]); + $check = Casting::query()->find($model->_id); + + self::assertInstanceOf(Carbon::class,$check->dateField); + self::assertEquals(now()->startOfDay()->format('Y-m-d H:i:s'),(string)$check->dateField); + + $model->update(['dateField' => now()->subDay()]); + $check = Casting::query()->find($model->_id); + + self::assertInstanceOf(Carbon::class,$check->dateField); + self::assertEquals(now()->subDay()->startOfDay()->format('Y-m-d H:i:s'),(string)$check->dateField); + } + + public function testDateAsString(): void + { + $model = Casting::query()->create(['dateField' => '2023-10-29']); + $check = Casting::query()->find($model->_id); + + self::assertInstanceOf(Carbon::class,$check->dateField); + self::assertEquals( + Carbon::createFromTimestamp(1698577443)->startOfDay()->format('Y-m-d H:i:s'), + (string)$check->dateField + ); + + $model->update(['dateField' => '2023-10-28']); + $check = Casting::query()->find($model->_id); + + self::assertInstanceOf(Carbon::class,$check->dateField); + self::assertEquals( + Carbon::createFromTimestamp(1698577443)->subDay()->startOfDay()->format('Y-m-d H:i:s'), + (string)$check->dateField + ); + } +} diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index 4b9a851fa..dbd7ec1df 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -22,6 +22,7 @@ class Casting extends Eloquent 'objectValue', 'jsonValue', 'collectionValue', + 'dateField', ]; protected $casts = [ @@ -33,5 +34,6 @@ class Casting extends Eloquent 'objectValue' => 'object', 'jsonValue' => 'json', 'collectionValue' => 'collection', + 'dateField' => 'date', ]; } From e26283ea33b7980f1c666b3564f8673270b71cde Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sun, 29 Oct 2023 14:36:59 +0330 Subject: [PATCH 15/27] Add tests for date; --- tests/Casts/DateTest.php | 55 ++++++++++++++++++++++++++++++++++++++++ tests/Models/Casting.php | 2 ++ 2 files changed, 57 insertions(+) create mode 100644 tests/Casts/DateTest.php diff --git a/tests/Casts/DateTest.php b/tests/Casts/DateTest.php new file mode 100644 index 000000000..fe69bfa01 --- /dev/null +++ b/tests/Casts/DateTest.php @@ -0,0 +1,55 @@ +create(['dateField' => now()]); + $check = Casting::query()->find($model->_id); + + self::assertInstanceOf(Carbon::class,$check->dateField); + self::assertEquals(now()->startOfDay()->format('Y-m-d H:i:s'),(string)$check->dateField); + + $model->update(['dateField' => now()->subDay()]); + $check = Casting::query()->find($model->_id); + + self::assertInstanceOf(Carbon::class,$check->dateField); + self::assertEquals(now()->subDay()->startOfDay()->format('Y-m-d H:i:s'),(string)$check->dateField); + } + + public function testDateAsString(): void + { + $model = Casting::query()->create(['dateField' => '2023-10-29']); + $check = Casting::query()->find($model->_id); + + self::assertInstanceOf(Carbon::class,$check->dateField); + self::assertEquals( + Carbon::createFromTimestamp(1698577443)->startOfDay()->format('Y-m-d H:i:s'), + (string)$check->dateField + ); + + $model->update(['dateField' => '2023-10-28']); + $check = Casting::query()->find($model->_id); + + self::assertInstanceOf(Carbon::class,$check->dateField); + self::assertEquals( + Carbon::createFromTimestamp(1698577443)->subDay()->startOfDay()->format('Y-m-d H:i:s'), + (string)$check->dateField + ); + } +} diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index 4b9a851fa..dbd7ec1df 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -22,6 +22,7 @@ class Casting extends Eloquent 'objectValue', 'jsonValue', 'collectionValue', + 'dateField', ]; protected $casts = [ @@ -33,5 +34,6 @@ class Casting extends Eloquent 'objectValue' => 'object', 'jsonValue' => 'json', 'collectionValue' => 'collection', + 'dateField' => 'date', ]; } From 4528599d82b63d90b6dea06568a7fe9245510939 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sun, 29 Oct 2023 14:50:58 +0330 Subject: [PATCH 16/27] Add tests for datetime; --- tests/Casts/DatetimeTest.php | 55 ++++++++++++++++++++++++++++++++++++ tests/Models/Casting.php | 2 ++ 2 files changed, 57 insertions(+) create mode 100644 tests/Casts/DatetimeTest.php diff --git a/tests/Casts/DatetimeTest.php b/tests/Casts/DatetimeTest.php new file mode 100644 index 000000000..d19d23e17 --- /dev/null +++ b/tests/Casts/DatetimeTest.php @@ -0,0 +1,55 @@ +create(['datetimeField' => now()]); + $check = Casting::query()->find($model->_id); + + self::assertInstanceOf(Carbon::class,$check->datetimeField); + self::assertEquals(now()->format('Y-m-d H:i:s'),(string)$check->datetimeField); + + $model->update(['datetimeField' => now()->subDay()]); + $check = Casting::query()->find($model->_id); + + self::assertInstanceOf(Carbon::class,$check->datetimeField); + self::assertEquals(now()->subDay()->format('Y-m-d H:i:s'),(string)$check->datetimeField); + } + + public function testDateAsString(): void + { + $model = Casting::query()->create(['datetimeField' => '2023-10-29']); + $check = Casting::query()->find($model->_id); + + self::assertInstanceOf(Carbon::class,$check->datetimeField); + self::assertEquals( + Carbon::createFromTimestamp(1698577443)->startOfDay()->format('Y-m-d H:i:s'), + (string)$check->datetimeField + ); + + $model->update(['datetimeField' => '2023-10-28 11:04:03']); + $check = Casting::query()->find($model->_id); + + self::assertInstanceOf(Carbon::class,$check->datetimeField); + self::assertEquals( + Carbon::createFromTimestamp(1698577443)->subDay()->format('Y-m-d H:i:s'), + (string)$check->datetimeField + ); + } +} diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index dbd7ec1df..7a59ff310 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -23,6 +23,7 @@ class Casting extends Eloquent 'jsonValue', 'collectionValue', 'dateField', + 'datetimeField', ]; protected $casts = [ @@ -35,5 +36,6 @@ class Casting extends Eloquent 'jsonValue' => 'json', 'collectionValue' => 'collection', 'dateField' => 'date', + 'datetimeField' => 'datetime', ]; } From 4bc7351fbd64b67bd2c8056273f64f53126fbc2c Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sun, 29 Oct 2023 15:07:53 +0330 Subject: [PATCH 17/27] Update Model.php --- src/Eloquent/Model.php | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/src/Eloquent/Model.php b/src/Eloquent/Model.php index 250b1461f..8fd1aa2be 100644 --- a/src/Eloquent/Model.php +++ b/src/Eloquent/Model.php @@ -77,13 +77,6 @@ abstract class Model extends BaseModel */ protected $parentRelation; - /** - * Determine storing or retrieving data from database - * - * @var bool - */ - protected $storingOnDB = false; - /** * List of field names to unset from the document on save. * @@ -218,7 +211,6 @@ protected function getAttributeFromArray($key) /** @inheritdoc */ public function setAttribute($key, $value) { - $this->storingOnDB = true; //Add casts if ($this->hasCast($key)) { $value = $this->castAttribute($key, $value); @@ -255,11 +247,8 @@ protected function asDecimal($value, $decimals) { try { $value = (string) BigDecimal::of((string)$value)->toScale((int)$decimals, RoundingMode::HALF_UP); - if ($this->storingOnDB) { - $value = new Decimal128($value); - } - return $value; + return new Decimal128($value); } catch (BrickMathException $e) { throw new MathException('Unable to cast value to a decimal.', previous: $e); } @@ -268,7 +257,7 @@ protected function asDecimal($value, $decimals) /** @inheritdoc */ public function fromJson($value, $asObject = false) { - if ($this->storingOnDB && !is_string($value)) { + if (!is_string($value)) { $value = Json::encode($value ?? ''); } return Json::decode($value ?? '', ! $asObject); From 572dd943c3f27505dab51641a64dee2e8c40302b Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sun, 29 Oct 2023 15:13:26 +0330 Subject: [PATCH 18/27] WIP --- tests/Casts/BooleanTest.php | 10 ++++------ tests/Casts/CollectionTest.php | 6 ++---- tests/Casts/DateTest.php | 5 ++--- tests/Casts/DatetimeTest.php | 10 ++++------ tests/Casts/DecimalTest.php | 15 +++++++-------- tests/Casts/FloatTest.php | 10 ++++------ tests/Casts/IntegerTest.php | 10 ++++------ tests/Casts/JsonTest.php | 7 +++---- tests/Casts/ObjectTest.php | 5 ++--- tests/Casts/StringTest.php | 5 ++--- 10 files changed, 34 insertions(+), 49 deletions(-) diff --git a/tests/Casts/BooleanTest.php b/tests/Casts/BooleanTest.php index 15786566a..afab9336e 100644 --- a/tests/Casts/BooleanTest.php +++ b/tests/Casts/BooleanTest.php @@ -19,10 +19,9 @@ protected function setUp(): void public function testBool(): void { $model = Casting::query()->create(['booleanValue' => true]); - $check = Casting::query()->find($model->_id); - self::assertIsBool($check->booleanValue); - self::assertEquals(true,$check->booleanValue); + self::assertIsBool($model->booleanValue); + self::assertEquals(true,$model->booleanValue); $model->update(['booleanValue' => false]); $check = Casting::query()->find($model->_id); @@ -46,10 +45,9 @@ public function testBool(): void public function testBoolAsString(): void { $model = Casting::query()->create(['booleanValue' => '1.79']); - $check = Casting::query()->find($model->_id); - self::assertIsBool($check->booleanValue); - self::assertEquals(true,$check->booleanValue); + self::assertIsBool($model->booleanValue); + self::assertEquals(true,$model->booleanValue); $model->update(['booleanValue' => '0']); $check = Casting::query()->find($model->_id); diff --git a/tests/Casts/CollectionTest.php b/tests/Casts/CollectionTest.php index d58b74e9a..c4a74390e 100644 --- a/tests/Casts/CollectionTest.php +++ b/tests/Casts/CollectionTest.php @@ -8,7 +8,6 @@ use MongoDB\Laravel\Tests\Models\Casting; use MongoDB\Laravel\Tests\TestCase; -/** @group hans */ class CollectionTest extends TestCase { protected function setUp(): void @@ -21,10 +20,9 @@ protected function setUp(): void public function testCollection(): void { $model = Casting::query()->create(['collectionValue' => ['g' => 'G-Eazy']]); - $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Collection::class,$check->collectionValue); - self::assertEquals(collect(['g' => 'G-Eazy']),$check->collectionValue); + self::assertInstanceOf(Collection::class,$model->collectionValue); + self::assertEquals(collect(['g' => 'G-Eazy']),$model->collectionValue); $model->update(['collectionValue' => ['Dont let me go' => 'Even the longest of nights turn days']]); $check = Casting::query()->find($model->_id); diff --git a/tests/Casts/DateTest.php b/tests/Casts/DateTest.php index fe69bfa01..482f50215 100644 --- a/tests/Casts/DateTest.php +++ b/tests/Casts/DateTest.php @@ -20,10 +20,9 @@ protected function setUp(): void public function testDate(): void { $model = Casting::query()->create(['dateField' => now()]); - $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Carbon::class,$check->dateField); - self::assertEquals(now()->startOfDay()->format('Y-m-d H:i:s'),(string)$check->dateField); + self::assertInstanceOf(Carbon::class,$model->dateField); + self::assertEquals(now()->startOfDay()->format('Y-m-d H:i:s'),(string)$model->dateField); $model->update(['dateField' => now()->subDay()]); $check = Casting::query()->find($model->_id); diff --git a/tests/Casts/DatetimeTest.php b/tests/Casts/DatetimeTest.php index d19d23e17..225e56b47 100644 --- a/tests/Casts/DatetimeTest.php +++ b/tests/Casts/DatetimeTest.php @@ -20,10 +20,9 @@ protected function setUp(): void public function testDate(): void { $model = Casting::query()->create(['datetimeField' => now()]); - $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Carbon::class,$check->datetimeField); - self::assertEquals(now()->format('Y-m-d H:i:s'),(string)$check->datetimeField); + self::assertInstanceOf(Carbon::class,$model->datetimeField); + self::assertEquals(now()->format('Y-m-d H:i:s'),(string)$model->datetimeField); $model->update(['datetimeField' => now()->subDay()]); $check = Casting::query()->find($model->_id); @@ -35,12 +34,11 @@ public function testDate(): void public function testDateAsString(): void { $model = Casting::query()->create(['datetimeField' => '2023-10-29']); - $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Carbon::class,$check->datetimeField); + self::assertInstanceOf(Carbon::class,$model->datetimeField); self::assertEquals( Carbon::createFromTimestamp(1698577443)->startOfDay()->format('Y-m-d H:i:s'), - (string)$check->datetimeField + (string)$model->datetimeField ); $model->update(['datetimeField' => '2023-10-28 11:04:03']); diff --git a/tests/Casts/DecimalTest.php b/tests/Casts/DecimalTest.php index 3dc09c45b..2d8c87867 100644 --- a/tests/Casts/DecimalTest.php +++ b/tests/Casts/DecimalTest.php @@ -4,6 +4,7 @@ namespace MongoDB\Laravel\Tests\Casts; +use MongoDB\BSON\Decimal128; use MongoDB\Laravel\Tests\Models\Casting; use MongoDB\Laravel\Tests\TestCase; @@ -19,30 +20,28 @@ protected function setUp(): void public function testDecimal(): void { $model = Casting::query()->create(['decimalNumber' => 100.99]); - $check = Casting::query()->find($model->_id); - self::assertIsString($check->decimalNumber); - self::assertEquals('100.99',$check->decimalNumber); + self::assertInstanceOf(Decimal128::class,$model->decimalNumber); + self::assertEquals('100.99',$model->decimalNumber); $model->update(['decimalNumber' => 9999.9]); $check = Casting::query()->find($model->_id); - self::assertIsString($check->decimalNumber); + self::assertInstanceOf(Decimal128::class,$model->decimalNumber); self::assertEquals('9999.90',$check->decimalNumber); } public function testDecimalAsString(): void { $model = Casting::query()->create(['decimalNumber' => '120.79']); - $check = Casting::query()->find($model->_id); - self::assertIsString($check->decimalNumber); - self::assertEquals('120.79',$check->decimalNumber); + self::assertInstanceOf(Decimal128::class,$model->decimalNumber); + self::assertEquals('120.79',$model->decimalNumber); $model->update(['decimalNumber' => '795']); $check = Casting::query()->find($model->_id); - self::assertIsString($check->decimalNumber); + self::assertInstanceOf(Decimal128::class,$model->decimalNumber); self::assertEquals('795.00',$check->decimalNumber); } } diff --git a/tests/Casts/FloatTest.php b/tests/Casts/FloatTest.php index ef943cea5..731836c44 100644 --- a/tests/Casts/FloatTest.php +++ b/tests/Casts/FloatTest.php @@ -19,10 +19,9 @@ protected function setUp(): void public function testFloat(): void { $model = Casting::query()->create(['floatNumber' => 1.79]); - $check = Casting::query()->find($model->_id); - self::assertIsFloat($check->floatNumber); - self::assertEquals(1.79,$check->floatNumber); + self::assertIsFloat($model->floatNumber); + self::assertEquals(1.79,$model->floatNumber); $model->update(['floatNumber' => 7E-5]); $check = Casting::query()->find($model->_id); @@ -34,10 +33,9 @@ public function testFloat(): void public function testFloatAsString(): void { $model = Casting::query()->create(['floatNumber' => '1.79']); - $check = Casting::query()->find($model->_id); - self::assertIsFloat($check->floatNumber); - self::assertEquals(1.79,$check->floatNumber); + self::assertIsFloat($model->floatNumber); + self::assertEquals(1.79,$model->floatNumber); $model->update(['floatNumber' => '7E-5']); $check = Casting::query()->find($model->_id); diff --git a/tests/Casts/IntegerTest.php b/tests/Casts/IntegerTest.php index 4c35d5781..ff080ff87 100644 --- a/tests/Casts/IntegerTest.php +++ b/tests/Casts/IntegerTest.php @@ -19,10 +19,9 @@ protected function setUp(): void public function testInt(): void { $model = Casting::query()->create(['intNumber' => 1]); - $check = Casting::query()->find($model->_id); - self::assertIsInt($check->intNumber); - self::assertEquals(1,$check->intNumber); + self::assertIsInt($model->intNumber); + self::assertEquals(1,$model->intNumber); $model->update(['intNumber' => 2]); $check = Casting::query()->find($model->_id); @@ -34,10 +33,9 @@ public function testInt(): void public function testIntAsString(): void { $model = Casting::query()->create(['intNumber' => '1']); - $check = Casting::query()->find($model->_id); - self::assertIsInt($check->intNumber); - self::assertEquals(1,$check->intNumber); + self::assertIsInt($model->intNumber); + self::assertEquals(1,$model->intNumber); $model->update(['intNumber' => '2']); $check = Casting::query()->find($model->_id); diff --git a/tests/Casts/JsonTest.php b/tests/Casts/JsonTest.php index b1a1c8444..115f9f4c7 100644 --- a/tests/Casts/JsonTest.php +++ b/tests/Casts/JsonTest.php @@ -19,12 +19,11 @@ protected function setUp(): void public function testJson(): void { $model = Casting::query()->create(['jsonValue' => ['g' => 'G-Eazy']]); - $check = Casting::query()->find($model->_id); - self::assertIsArray($check->jsonValue); - self::assertEquals(['g' => 'G-Eazy'],$check->jsonValue); + self::assertIsArray($model->jsonValue); + self::assertEquals(['g' => 'G-Eazy'],$model->jsonValue); - $model->update(['jsonValue' => ['Dont let me go' => 'Even the longest of nights turn days']]); + $model->update(['jsonValue' => json_encode(['Dont let me go' => 'Even the longest of nights turn days'])]); $check = Casting::query()->find($model->_id); self::assertIsArray($check->jsonValue); diff --git a/tests/Casts/ObjectTest.php b/tests/Casts/ObjectTest.php index ec770be28..9fe83aac3 100644 --- a/tests/Casts/ObjectTest.php +++ b/tests/Casts/ObjectTest.php @@ -19,10 +19,9 @@ protected function setUp(): void public function testObject(): void { $model = Casting::query()->create(['objectValue' => ['g' => 'G-Eazy']]); - $check = Casting::query()->find($model->_id); - self::assertIsObject($check->objectValue); - self::assertEquals((object)['g' => 'G-Eazy'],$check->objectValue); + self::assertIsObject($model->objectValue); + self::assertEquals((object)['g' => 'G-Eazy'],$model->objectValue); $model->update(['objectValue' => ['Dont let me go' => 'Even the brightest of colors turn greys']]); $check = Casting::query()->find($model->_id); diff --git a/tests/Casts/StringTest.php b/tests/Casts/StringTest.php index c96ad641d..5f6ac481f 100644 --- a/tests/Casts/StringTest.php +++ b/tests/Casts/StringTest.php @@ -19,10 +19,9 @@ protected function setUp(): void public function testString(): void { $model = Casting::query()->create(['stringContent' => "If I'ma shoot, I shoot to kill"]); - $check = Casting::query()->find($model->_id); - self::assertIsString($check->stringContent); - self::assertEquals("If I'ma shoot, I shoot to kill",$check->stringContent); + self::assertIsString($model->stringContent); + self::assertEquals("If I'ma shoot, I shoot to kill",$model->stringContent); $model->update(['stringContent' => 'Do what I want to do at will']); $check = Casting::query()->find($model->_id); From acaa868c293268b65817076c20ccc95c317c42d0 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sun, 29 Oct 2023 16:04:19 +0330 Subject: [PATCH 19/27] Fix phpcs; --- src/Eloquent/Model.php | 5 +++-- tests/Casts/BooleanTest.php | 12 ++++++------ tests/Casts/CollectionTest.php | 10 ++++++---- tests/Casts/DateTest.php | 18 ++++++++++-------- tests/Casts/DatetimeTest.php | 18 ++++++++++-------- tests/Casts/DecimalTest.php | 16 ++++++++-------- tests/Casts/FloatTest.php | 8 ++++---- tests/Casts/IntegerTest.php | 8 ++++---- tests/Casts/JsonTest.php | 6 ++++-- tests/Casts/ObjectTest.php | 4 ++-- tests/Casts/StringTest.php | 4 ++-- tests/Models/Casting.php | 3 +-- 12 files changed, 60 insertions(+), 52 deletions(-) diff --git a/src/Eloquent/Model.php b/src/Eloquent/Model.php index 8fd1aa2be..17328290e 100644 --- a/src/Eloquent/Model.php +++ b/src/Eloquent/Model.php @@ -246,7 +246,7 @@ public function setAttribute($key, $value) protected function asDecimal($value, $decimals) { try { - $value = (string) BigDecimal::of((string)$value)->toScale((int)$decimals, RoundingMode::HALF_UP); + $value = (string) BigDecimal::of((string) $value)->toScale((int) $decimals, RoundingMode::HALF_UP); return new Decimal128($value); } catch (BrickMathException $e) { @@ -257,9 +257,10 @@ protected function asDecimal($value, $decimals) /** @inheritdoc */ public function fromJson($value, $asObject = false) { - if (!is_string($value)) { + if (! is_string($value)) { $value = Json::encode($value ?? ''); } + return Json::decode($value ?? '', ! $asObject); } diff --git a/tests/Casts/BooleanTest.php b/tests/Casts/BooleanTest.php index afab9336e..91b836aa1 100644 --- a/tests/Casts/BooleanTest.php +++ b/tests/Casts/BooleanTest.php @@ -21,25 +21,25 @@ public function testBool(): void $model = Casting::query()->create(['booleanValue' => true]); self::assertIsBool($model->booleanValue); - self::assertEquals(true,$model->booleanValue); + self::assertEquals(true, $model->booleanValue); $model->update(['booleanValue' => false]); $check = Casting::query()->find($model->_id); self::assertIsBool($check->booleanValue); - self::assertEquals(false,$check->booleanValue); + self::assertEquals(false, $check->booleanValue); $model->update(['booleanValue' => 1]); $check = Casting::query()->find($model->_id); self::assertIsBool($check->booleanValue); - self::assertEquals(true,$check->booleanValue); + self::assertEquals(true, $check->booleanValue); $model->update(['booleanValue' => 0]); $check = Casting::query()->find($model->_id); self::assertIsBool($check->booleanValue); - self::assertEquals(false,$check->booleanValue); + self::assertEquals(false, $check->booleanValue); } public function testBoolAsString(): void @@ -47,12 +47,12 @@ public function testBoolAsString(): void $model = Casting::query()->create(['booleanValue' => '1.79']); self::assertIsBool($model->booleanValue); - self::assertEquals(true,$model->booleanValue); + self::assertEquals(true, $model->booleanValue); $model->update(['booleanValue' => '0']); $check = Casting::query()->find($model->_id); self::assertIsBool($check->booleanValue); - self::assertEquals(false,$check->booleanValue); + self::assertEquals(false, $check->booleanValue); } } diff --git a/tests/Casts/CollectionTest.php b/tests/Casts/CollectionTest.php index c4a74390e..20df04772 100644 --- a/tests/Casts/CollectionTest.php +++ b/tests/Casts/CollectionTest.php @@ -8,6 +8,8 @@ use MongoDB\Laravel\Tests\Models\Casting; use MongoDB\Laravel\Tests\TestCase; +use function collect; + class CollectionTest extends TestCase { protected function setUp(): void @@ -21,13 +23,13 @@ public function testCollection(): void { $model = Casting::query()->create(['collectionValue' => ['g' => 'G-Eazy']]); - self::assertInstanceOf(Collection::class,$model->collectionValue); - self::assertEquals(collect(['g' => 'G-Eazy']),$model->collectionValue); + self::assertInstanceOf(Collection::class, $model->collectionValue); + self::assertEquals(collect(['g' => 'G-Eazy']), $model->collectionValue); $model->update(['collectionValue' => ['Dont let me go' => 'Even the longest of nights turn days']]); $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Collection::class,$check->collectionValue); - self::assertEquals(collect(['Dont let me go' => 'Even the longest of nights turn days']),$check->collectionValue); + self::assertInstanceOf(Collection::class, $check->collectionValue); + self::assertEquals(collect(['Dont let me go' => 'Even the longest of nights turn days']), $check->collectionValue); } } diff --git a/tests/Casts/DateTest.php b/tests/Casts/DateTest.php index 482f50215..068dfc29b 100644 --- a/tests/Casts/DateTest.php +++ b/tests/Casts/DateTest.php @@ -8,6 +8,8 @@ use MongoDB\Laravel\Tests\Models\Casting; use MongoDB\Laravel\Tests\TestCase; +use function now; + class DateTest extends TestCase { protected function setUp(): void @@ -21,14 +23,14 @@ public function testDate(): void { $model = Casting::query()->create(['dateField' => now()]); - self::assertInstanceOf(Carbon::class,$model->dateField); - self::assertEquals(now()->startOfDay()->format('Y-m-d H:i:s'),(string)$model->dateField); + self::assertInstanceOf(Carbon::class, $model->dateField); + self::assertEquals(now()->startOfDay()->format('Y-m-d H:i:s'), (string) $model->dateField); $model->update(['dateField' => now()->subDay()]); $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Carbon::class,$check->dateField); - self::assertEquals(now()->subDay()->startOfDay()->format('Y-m-d H:i:s'),(string)$check->dateField); + self::assertInstanceOf(Carbon::class, $check->dateField); + self::assertEquals(now()->subDay()->startOfDay()->format('Y-m-d H:i:s'), (string) $check->dateField); } public function testDateAsString(): void @@ -36,19 +38,19 @@ public function testDateAsString(): void $model = Casting::query()->create(['dateField' => '2023-10-29']); $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Carbon::class,$check->dateField); + self::assertInstanceOf(Carbon::class, $check->dateField); self::assertEquals( Carbon::createFromTimestamp(1698577443)->startOfDay()->format('Y-m-d H:i:s'), - (string)$check->dateField + (string) $check->dateField, ); $model->update(['dateField' => '2023-10-28']); $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Carbon::class,$check->dateField); + self::assertInstanceOf(Carbon::class, $check->dateField); self::assertEquals( Carbon::createFromTimestamp(1698577443)->subDay()->startOfDay()->format('Y-m-d H:i:s'), - (string)$check->dateField + (string) $check->dateField, ); } } diff --git a/tests/Casts/DatetimeTest.php b/tests/Casts/DatetimeTest.php index 225e56b47..83789726a 100644 --- a/tests/Casts/DatetimeTest.php +++ b/tests/Casts/DatetimeTest.php @@ -8,6 +8,8 @@ use MongoDB\Laravel\Tests\Models\Casting; use MongoDB\Laravel\Tests\TestCase; +use function now; + class DatetimeTest extends TestCase { protected function setUp(): void @@ -21,33 +23,33 @@ public function testDate(): void { $model = Casting::query()->create(['datetimeField' => now()]); - self::assertInstanceOf(Carbon::class,$model->datetimeField); - self::assertEquals(now()->format('Y-m-d H:i:s'),(string)$model->datetimeField); + self::assertInstanceOf(Carbon::class, $model->datetimeField); + self::assertEquals(now()->format('Y-m-d H:i:s'), (string) $model->datetimeField); $model->update(['datetimeField' => now()->subDay()]); $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Carbon::class,$check->datetimeField); - self::assertEquals(now()->subDay()->format('Y-m-d H:i:s'),(string)$check->datetimeField); + self::assertInstanceOf(Carbon::class, $check->datetimeField); + self::assertEquals(now()->subDay()->format('Y-m-d H:i:s'), (string) $check->datetimeField); } public function testDateAsString(): void { $model = Casting::query()->create(['datetimeField' => '2023-10-29']); - self::assertInstanceOf(Carbon::class,$model->datetimeField); + self::assertInstanceOf(Carbon::class, $model->datetimeField); self::assertEquals( Carbon::createFromTimestamp(1698577443)->startOfDay()->format('Y-m-d H:i:s'), - (string)$model->datetimeField + (string) $model->datetimeField, ); $model->update(['datetimeField' => '2023-10-28 11:04:03']); $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Carbon::class,$check->datetimeField); + self::assertInstanceOf(Carbon::class, $check->datetimeField); self::assertEquals( Carbon::createFromTimestamp(1698577443)->subDay()->format('Y-m-d H:i:s'), - (string)$check->datetimeField + (string) $check->datetimeField, ); } } diff --git a/tests/Casts/DecimalTest.php b/tests/Casts/DecimalTest.php index 2d8c87867..363af6f64 100644 --- a/tests/Casts/DecimalTest.php +++ b/tests/Casts/DecimalTest.php @@ -21,27 +21,27 @@ public function testDecimal(): void { $model = Casting::query()->create(['decimalNumber' => 100.99]); - self::assertInstanceOf(Decimal128::class,$model->decimalNumber); - self::assertEquals('100.99',$model->decimalNumber); + self::assertInstanceOf(Decimal128::class, $model->decimalNumber); + self::assertEquals('100.99', $model->decimalNumber); $model->update(['decimalNumber' => 9999.9]); $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Decimal128::class,$model->decimalNumber); - self::assertEquals('9999.90',$check->decimalNumber); + self::assertInstanceOf(Decimal128::class, $model->decimalNumber); + self::assertEquals('9999.90', $check->decimalNumber); } public function testDecimalAsString(): void { $model = Casting::query()->create(['decimalNumber' => '120.79']); - self::assertInstanceOf(Decimal128::class,$model->decimalNumber); - self::assertEquals('120.79',$model->decimalNumber); + self::assertInstanceOf(Decimal128::class, $model->decimalNumber); + self::assertEquals('120.79', $model->decimalNumber); $model->update(['decimalNumber' => '795']); $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Decimal128::class,$model->decimalNumber); - self::assertEquals('795.00',$check->decimalNumber); + self::assertInstanceOf(Decimal128::class, $model->decimalNumber); + self::assertEquals('795.00', $check->decimalNumber); } } diff --git a/tests/Casts/FloatTest.php b/tests/Casts/FloatTest.php index 731836c44..60d693c48 100644 --- a/tests/Casts/FloatTest.php +++ b/tests/Casts/FloatTest.php @@ -21,13 +21,13 @@ public function testFloat(): void $model = Casting::query()->create(['floatNumber' => 1.79]); self::assertIsFloat($model->floatNumber); - self::assertEquals(1.79,$model->floatNumber); + self::assertEquals(1.79, $model->floatNumber); $model->update(['floatNumber' => 7E-5]); $check = Casting::query()->find($model->_id); self::assertIsFloat($check->floatNumber); - self::assertEquals(7E-5,$check->floatNumber); + self::assertEquals(7E-5, $check->floatNumber); } public function testFloatAsString(): void @@ -35,12 +35,12 @@ public function testFloatAsString(): void $model = Casting::query()->create(['floatNumber' => '1.79']); self::assertIsFloat($model->floatNumber); - self::assertEquals(1.79,$model->floatNumber); + self::assertEquals(1.79, $model->floatNumber); $model->update(['floatNumber' => '7E-5']); $check = Casting::query()->find($model->_id); self::assertIsFloat($check->floatNumber); - self::assertEquals(7E-5,$check->floatNumber); + self::assertEquals(7E-5, $check->floatNumber); } } diff --git a/tests/Casts/IntegerTest.php b/tests/Casts/IntegerTest.php index ff080ff87..272f08905 100644 --- a/tests/Casts/IntegerTest.php +++ b/tests/Casts/IntegerTest.php @@ -21,13 +21,13 @@ public function testInt(): void $model = Casting::query()->create(['intNumber' => 1]); self::assertIsInt($model->intNumber); - self::assertEquals(1,$model->intNumber); + self::assertEquals(1, $model->intNumber); $model->update(['intNumber' => 2]); $check = Casting::query()->find($model->_id); self::assertIsInt($check->intNumber); - self::assertEquals(2,$check->intNumber); + self::assertEquals(2, $check->intNumber); } public function testIntAsString(): void @@ -35,12 +35,12 @@ public function testIntAsString(): void $model = Casting::query()->create(['intNumber' => '1']); self::assertIsInt($model->intNumber); - self::assertEquals(1,$model->intNumber); + self::assertEquals(1, $model->intNumber); $model->update(['intNumber' => '2']); $check = Casting::query()->find($model->_id); self::assertIsInt($check->intNumber); - self::assertEquals(2,$check->intNumber); + self::assertEquals(2, $check->intNumber); } } diff --git a/tests/Casts/JsonTest.php b/tests/Casts/JsonTest.php index 115f9f4c7..7e8ed4c9c 100644 --- a/tests/Casts/JsonTest.php +++ b/tests/Casts/JsonTest.php @@ -7,6 +7,8 @@ use MongoDB\Laravel\Tests\Models\Casting; use MongoDB\Laravel\Tests\TestCase; +use function json_encode; + class JsonTest extends TestCase { protected function setUp(): void @@ -21,12 +23,12 @@ public function testJson(): void $model = Casting::query()->create(['jsonValue' => ['g' => 'G-Eazy']]); self::assertIsArray($model->jsonValue); - self::assertEquals(['g' => 'G-Eazy'],$model->jsonValue); + self::assertEquals(['g' => 'G-Eazy'], $model->jsonValue); $model->update(['jsonValue' => json_encode(['Dont let me go' => 'Even the longest of nights turn days'])]); $check = Casting::query()->find($model->_id); self::assertIsArray($check->jsonValue); - self::assertEquals(['Dont let me go' => 'Even the longest of nights turn days'],$check->jsonValue); + self::assertEquals(['Dont let me go' => 'Even the longest of nights turn days'], $check->jsonValue); } } diff --git a/tests/Casts/ObjectTest.php b/tests/Casts/ObjectTest.php index 9fe83aac3..e48cfaaf9 100644 --- a/tests/Casts/ObjectTest.php +++ b/tests/Casts/ObjectTest.php @@ -21,12 +21,12 @@ public function testObject(): void $model = Casting::query()->create(['objectValue' => ['g' => 'G-Eazy']]); self::assertIsObject($model->objectValue); - self::assertEquals((object)['g' => 'G-Eazy'],$model->objectValue); + self::assertEquals((object) ['g' => 'G-Eazy'], $model->objectValue); $model->update(['objectValue' => ['Dont let me go' => 'Even the brightest of colors turn greys']]); $check = Casting::query()->find($model->_id); self::assertIsObject($check->objectValue); - self::assertEquals((object)['Dont let me go' => 'Even the brightest of colors turn greys'],$check->objectValue); + self::assertEquals((object) ['Dont let me go' => 'Even the brightest of colors turn greys'], $check->objectValue); } } diff --git a/tests/Casts/StringTest.php b/tests/Casts/StringTest.php index 5f6ac481f..f0e70db3c 100644 --- a/tests/Casts/StringTest.php +++ b/tests/Casts/StringTest.php @@ -21,12 +21,12 @@ public function testString(): void $model = Casting::query()->create(['stringContent' => "If I'ma shoot, I shoot to kill"]); self::assertIsString($model->stringContent); - self::assertEquals("If I'ma shoot, I shoot to kill",$model->stringContent); + self::assertEquals("If I'ma shoot, I shoot to kill", $model->stringContent); $model->update(['stringContent' => 'Do what I want to do at will']); $check = Casting::query()->find($model->_id); self::assertIsString($check->stringContent); - self::assertEquals('Do what I want to do at will',$check->stringContent); + self::assertEquals('Do what I want to do at will', $check->stringContent); } } diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index 7a59ff310..cbfe32058 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -5,11 +5,10 @@ namespace MongoDB\Laravel\Tests\Models; use MongoDB\Laravel\Eloquent\Model as Eloquent; -use MongoDB\Laravel\Relations\EmbedsMany; class Casting extends Eloquent { - protected $connection = 'mongodb'; + protected $connection = 'mongodb'; protected $collection = 'casting'; protected $fillable = [ From fdaa9dcb662296cfb350de0a3125b8a8ff0d6730 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Mon, 30 Oct 2023 16:13:37 +0330 Subject: [PATCH 20/27] Update BooleanTest.php assertEquals replaced with assertSame; --- tests/Casts/BooleanTest.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/Casts/BooleanTest.php b/tests/Casts/BooleanTest.php index 91b836aa1..efc037921 100644 --- a/tests/Casts/BooleanTest.php +++ b/tests/Casts/BooleanTest.php @@ -21,25 +21,25 @@ public function testBool(): void $model = Casting::query()->create(['booleanValue' => true]); self::assertIsBool($model->booleanValue); - self::assertEquals(true, $model->booleanValue); + self::assertSame(true, $model->booleanValue); $model->update(['booleanValue' => false]); $check = Casting::query()->find($model->_id); self::assertIsBool($check->booleanValue); - self::assertEquals(false, $check->booleanValue); + self::assertSame(false, $check->booleanValue); $model->update(['booleanValue' => 1]); $check = Casting::query()->find($model->_id); self::assertIsBool($check->booleanValue); - self::assertEquals(true, $check->booleanValue); + self::assertSame(true, $check->booleanValue); $model->update(['booleanValue' => 0]); $check = Casting::query()->find($model->_id); self::assertIsBool($check->booleanValue); - self::assertEquals(false, $check->booleanValue); + self::assertSame(false, $check->booleanValue); } public function testBoolAsString(): void @@ -47,12 +47,12 @@ public function testBoolAsString(): void $model = Casting::query()->create(['booleanValue' => '1.79']); self::assertIsBool($model->booleanValue); - self::assertEquals(true, $model->booleanValue); + self::assertSame(true, $model->booleanValue); $model->update(['booleanValue' => '0']); $check = Casting::query()->find($model->_id); self::assertIsBool($check->booleanValue); - self::assertEquals(false, $check->booleanValue); + self::assertSame(false, $check->booleanValue); } } From fc504ee2b26cddd1a71e6ab3d0cff74a05f0b6e9 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Mon, 30 Oct 2023 16:46:03 +0330 Subject: [PATCH 21/27] Test values after update; --- tests/Casts/BooleanTest.php | 20 ++++++++------------ tests/Casts/CollectionTest.php | 5 ++--- tests/Casts/DateTest.php | 15 ++++++--------- tests/Casts/DatetimeTest.php | 10 ++++------ tests/Casts/DecimalTest.php | 6 ++---- tests/Casts/FloatTest.php | 10 ++++------ tests/Casts/IntegerTest.php | 10 ++++------ tests/Casts/JsonTest.php | 5 ++--- tests/Casts/ObjectTest.php | 5 ++--- tests/Casts/StringTest.php | 5 ++--- 10 files changed, 36 insertions(+), 55 deletions(-) diff --git a/tests/Casts/BooleanTest.php b/tests/Casts/BooleanTest.php index efc037921..8be2a4def 100644 --- a/tests/Casts/BooleanTest.php +++ b/tests/Casts/BooleanTest.php @@ -24,22 +24,19 @@ public function testBool(): void self::assertSame(true, $model->booleanValue); $model->update(['booleanValue' => false]); - $check = Casting::query()->find($model->_id); - self::assertIsBool($check->booleanValue); - self::assertSame(false, $check->booleanValue); + self::assertIsBool($model->booleanValue); + self::assertSame(false, $model->booleanValue); $model->update(['booleanValue' => 1]); - $check = Casting::query()->find($model->_id); - self::assertIsBool($check->booleanValue); - self::assertSame(true, $check->booleanValue); + self::assertIsBool($model->booleanValue); + self::assertSame(true, $model->booleanValue); $model->update(['booleanValue' => 0]); - $check = Casting::query()->find($model->_id); - self::assertIsBool($check->booleanValue); - self::assertSame(false, $check->booleanValue); + self::assertIsBool($model->booleanValue); + self::assertSame(false, $model->booleanValue); } public function testBoolAsString(): void @@ -50,9 +47,8 @@ public function testBoolAsString(): void self::assertSame(true, $model->booleanValue); $model->update(['booleanValue' => '0']); - $check = Casting::query()->find($model->_id); - self::assertIsBool($check->booleanValue); - self::assertSame(false, $check->booleanValue); + self::assertIsBool($model->booleanValue); + self::assertSame(false, $model->booleanValue); } } diff --git a/tests/Casts/CollectionTest.php b/tests/Casts/CollectionTest.php index 20df04772..67498c092 100644 --- a/tests/Casts/CollectionTest.php +++ b/tests/Casts/CollectionTest.php @@ -27,9 +27,8 @@ public function testCollection(): void self::assertEquals(collect(['g' => 'G-Eazy']), $model->collectionValue); $model->update(['collectionValue' => ['Dont let me go' => 'Even the longest of nights turn days']]); - $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Collection::class, $check->collectionValue); - self::assertEquals(collect(['Dont let me go' => 'Even the longest of nights turn days']), $check->collectionValue); + self::assertInstanceOf(Collection::class, $model->collectionValue); + self::assertEquals(collect(['Dont let me go' => 'Even the longest of nights turn days']), $model->collectionValue); } } diff --git a/tests/Casts/DateTest.php b/tests/Casts/DateTest.php index 068dfc29b..d312d2661 100644 --- a/tests/Casts/DateTest.php +++ b/tests/Casts/DateTest.php @@ -27,30 +27,27 @@ public function testDate(): void self::assertEquals(now()->startOfDay()->format('Y-m-d H:i:s'), (string) $model->dateField); $model->update(['dateField' => now()->subDay()]); - $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Carbon::class, $check->dateField); - self::assertEquals(now()->subDay()->startOfDay()->format('Y-m-d H:i:s'), (string) $check->dateField); + self::assertInstanceOf(Carbon::class, $model->dateField); + self::assertEquals(now()->subDay()->startOfDay()->format('Y-m-d H:i:s'), (string) $model->dateField); } public function testDateAsString(): void { $model = Casting::query()->create(['dateField' => '2023-10-29']); - $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Carbon::class, $check->dateField); + self::assertInstanceOf(Carbon::class, $model->dateField); self::assertEquals( Carbon::createFromTimestamp(1698577443)->startOfDay()->format('Y-m-d H:i:s'), - (string) $check->dateField, + (string) $model->dateField, ); $model->update(['dateField' => '2023-10-28']); - $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Carbon::class, $check->dateField); + self::assertInstanceOf(Carbon::class, $model->dateField); self::assertEquals( Carbon::createFromTimestamp(1698577443)->subDay()->startOfDay()->format('Y-m-d H:i:s'), - (string) $check->dateField, + (string) $model->dateField, ); } } diff --git a/tests/Casts/DatetimeTest.php b/tests/Casts/DatetimeTest.php index 83789726a..77a9cb4b6 100644 --- a/tests/Casts/DatetimeTest.php +++ b/tests/Casts/DatetimeTest.php @@ -27,10 +27,9 @@ public function testDate(): void self::assertEquals(now()->format('Y-m-d H:i:s'), (string) $model->datetimeField); $model->update(['datetimeField' => now()->subDay()]); - $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Carbon::class, $check->datetimeField); - self::assertEquals(now()->subDay()->format('Y-m-d H:i:s'), (string) $check->datetimeField); + self::assertInstanceOf(Carbon::class, $model->datetimeField); + self::assertEquals(now()->subDay()->format('Y-m-d H:i:s'), (string) $model->datetimeField); } public function testDateAsString(): void @@ -44,12 +43,11 @@ public function testDateAsString(): void ); $model->update(['datetimeField' => '2023-10-28 11:04:03']); - $check = Casting::query()->find($model->_id); - self::assertInstanceOf(Carbon::class, $check->datetimeField); + self::assertInstanceOf(Carbon::class, $model->datetimeField); self::assertEquals( Carbon::createFromTimestamp(1698577443)->subDay()->format('Y-m-d H:i:s'), - (string) $check->datetimeField, + (string) $model->datetimeField, ); } } diff --git a/tests/Casts/DecimalTest.php b/tests/Casts/DecimalTest.php index 363af6f64..535328fe4 100644 --- a/tests/Casts/DecimalTest.php +++ b/tests/Casts/DecimalTest.php @@ -25,10 +25,9 @@ public function testDecimal(): void self::assertEquals('100.99', $model->decimalNumber); $model->update(['decimalNumber' => 9999.9]); - $check = Casting::query()->find($model->_id); self::assertInstanceOf(Decimal128::class, $model->decimalNumber); - self::assertEquals('9999.90', $check->decimalNumber); + self::assertEquals('9999.90', $model->decimalNumber); } public function testDecimalAsString(): void @@ -39,9 +38,8 @@ public function testDecimalAsString(): void self::assertEquals('120.79', $model->decimalNumber); $model->update(['decimalNumber' => '795']); - $check = Casting::query()->find($model->_id); self::assertInstanceOf(Decimal128::class, $model->decimalNumber); - self::assertEquals('795.00', $check->decimalNumber); + self::assertEquals('795.00', $model->decimalNumber); } } diff --git a/tests/Casts/FloatTest.php b/tests/Casts/FloatTest.php index 60d693c48..e4d90cae9 100644 --- a/tests/Casts/FloatTest.php +++ b/tests/Casts/FloatTest.php @@ -24,10 +24,9 @@ public function testFloat(): void self::assertEquals(1.79, $model->floatNumber); $model->update(['floatNumber' => 7E-5]); - $check = Casting::query()->find($model->_id); - self::assertIsFloat($check->floatNumber); - self::assertEquals(7E-5, $check->floatNumber); + self::assertIsFloat($model->floatNumber); + self::assertEquals(7E-5, $model->floatNumber); } public function testFloatAsString(): void @@ -38,9 +37,8 @@ public function testFloatAsString(): void self::assertEquals(1.79, $model->floatNumber); $model->update(['floatNumber' => '7E-5']); - $check = Casting::query()->find($model->_id); - self::assertIsFloat($check->floatNumber); - self::assertEquals(7E-5, $check->floatNumber); + self::assertIsFloat($model->floatNumber); + self::assertEquals(7E-5, $model->floatNumber); } } diff --git a/tests/Casts/IntegerTest.php b/tests/Casts/IntegerTest.php index 272f08905..53b9494d6 100644 --- a/tests/Casts/IntegerTest.php +++ b/tests/Casts/IntegerTest.php @@ -24,10 +24,9 @@ public function testInt(): void self::assertEquals(1, $model->intNumber); $model->update(['intNumber' => 2]); - $check = Casting::query()->find($model->_id); - self::assertIsInt($check->intNumber); - self::assertEquals(2, $check->intNumber); + self::assertIsInt($model->intNumber); + self::assertEquals(2, $model->intNumber); } public function testIntAsString(): void @@ -38,9 +37,8 @@ public function testIntAsString(): void self::assertEquals(1, $model->intNumber); $model->update(['intNumber' => '2']); - $check = Casting::query()->find($model->_id); - self::assertIsInt($check->intNumber); - self::assertEquals(2, $check->intNumber); + self::assertIsInt($model->intNumber); + self::assertEquals(2, $model->intNumber); } } diff --git a/tests/Casts/JsonTest.php b/tests/Casts/JsonTest.php index 7e8ed4c9c..99473c5d8 100644 --- a/tests/Casts/JsonTest.php +++ b/tests/Casts/JsonTest.php @@ -26,9 +26,8 @@ public function testJson(): void self::assertEquals(['g' => 'G-Eazy'], $model->jsonValue); $model->update(['jsonValue' => json_encode(['Dont let me go' => 'Even the longest of nights turn days'])]); - $check = Casting::query()->find($model->_id); - self::assertIsArray($check->jsonValue); - self::assertEquals(['Dont let me go' => 'Even the longest of nights turn days'], $check->jsonValue); + self::assertIsArray($model->jsonValue); + self::assertEquals(['Dont let me go' => 'Even the longest of nights turn days'], $model->jsonValue); } } diff --git a/tests/Casts/ObjectTest.php b/tests/Casts/ObjectTest.php index e48cfaaf9..3217b23fc 100644 --- a/tests/Casts/ObjectTest.php +++ b/tests/Casts/ObjectTest.php @@ -24,9 +24,8 @@ public function testObject(): void self::assertEquals((object) ['g' => 'G-Eazy'], $model->objectValue); $model->update(['objectValue' => ['Dont let me go' => 'Even the brightest of colors turn greys']]); - $check = Casting::query()->find($model->_id); - self::assertIsObject($check->objectValue); - self::assertEquals((object) ['Dont let me go' => 'Even the brightest of colors turn greys'], $check->objectValue); + self::assertIsObject($model->objectValue); + self::assertEquals((object) ['Dont let me go' => 'Even the brightest of colors turn greys'], $model->objectValue); } } diff --git a/tests/Casts/StringTest.php b/tests/Casts/StringTest.php index f0e70db3c..e289344b3 100644 --- a/tests/Casts/StringTest.php +++ b/tests/Casts/StringTest.php @@ -24,9 +24,8 @@ public function testString(): void self::assertEquals("If I'ma shoot, I shoot to kill", $model->stringContent); $model->update(['stringContent' => 'Do what I want to do at will']); - $check = Casting::query()->find($model->_id); - self::assertIsString($check->stringContent); - self::assertEquals('Do what I want to do at will', $check->stringContent); + self::assertIsString($model->stringContent); + self::assertEquals('Do what I want to do at will', $model->stringContent); } } From 187cfc073afdd71d792076fab0e69309b1fcb4f2 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Mon, 30 Oct 2023 16:56:50 +0330 Subject: [PATCH 22/27] Another sentence used; --- tests/Casts/StringTest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/Casts/StringTest.php b/tests/Casts/StringTest.php index e289344b3..120fb9b19 100644 --- a/tests/Casts/StringTest.php +++ b/tests/Casts/StringTest.php @@ -18,14 +18,14 @@ protected function setUp(): void public function testString(): void { - $model = Casting::query()->create(['stringContent' => "If I'ma shoot, I shoot to kill"]); + $model = Casting::query()->create(['stringContent' => 'Home is behind The world ahead And there are many paths to tread']); self::assertIsString($model->stringContent); - self::assertEquals("If I'ma shoot, I shoot to kill", $model->stringContent); + self::assertEquals('Home is behind The world ahead And there are many paths to tread', $model->stringContent); - $model->update(['stringContent' => 'Do what I want to do at will']); + $model->update(['stringContent' => "Losing hope, don't mean I'm hopeless And maybe all I need is time"]); self::assertIsString($model->stringContent); - self::assertEquals('Do what I want to do at will', $model->stringContent); + self::assertEquals("Losing hope, don't mean I'm hopeless And maybe all I need is time", $model->stringContent); } } From 8d9736baaf3c7e63a6e3f0f9be05c906ee32d901 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Mon, 30 Oct 2023 17:03:50 +0330 Subject: [PATCH 23/27] CastBinaryUuid merged into Casting; --- tests/Casts/BinaryUuidTest.php | 12 ++++++------ tests/Models/CastBinaryUuid.php | 17 ----------------- tests/Models/Casting.php | 3 +++ 3 files changed, 9 insertions(+), 23 deletions(-) delete mode 100644 tests/Models/CastBinaryUuid.php diff --git a/tests/Casts/BinaryUuidTest.php b/tests/Casts/BinaryUuidTest.php index 8a79b1500..2183c12fa 100644 --- a/tests/Casts/BinaryUuidTest.php +++ b/tests/Casts/BinaryUuidTest.php @@ -6,7 +6,7 @@ use Generator; use MongoDB\BSON\Binary; -use MongoDB\Laravel\Tests\Models\CastBinaryUuid; +use MongoDB\Laravel\Tests\Models\Casting; use MongoDB\Laravel\Tests\TestCase; use function hex2bin; @@ -17,15 +17,15 @@ protected function setUp(): void { parent::setUp(); - CastBinaryUuid::truncate(); + Casting::truncate(); } /** @dataProvider provideBinaryUuidCast */ public function testBinaryUuidCastModel(string $expectedUuid, string|Binary $saveUuid, Binary $queryUuid): void { - CastBinaryUuid::create(['uuid' => $saveUuid]); + Casting::create(['uuid' => $saveUuid]); - $model = CastBinaryUuid::firstWhere('uuid', $queryUuid); + $model = Casting::firstWhere('uuid', $queryUuid); $this->assertNotNull($model); $this->assertSame($expectedUuid, $model->uuid); } @@ -43,9 +43,9 @@ public function testQueryByStringDoesNotCast(): void { $uuid = '0c103357-3806-48c9-a84b-867dcb625cfb'; - CastBinaryUuid::create(['uuid' => $uuid]); + Casting::create(['uuid' => $uuid]); - $model = CastBinaryUuid::firstWhere('uuid', $uuid); + $model = Casting::firstWhere('uuid', $uuid); $this->assertNull($model); } } diff --git a/tests/Models/CastBinaryUuid.php b/tests/Models/CastBinaryUuid.php deleted file mode 100644 index 3d8b82941..000000000 --- a/tests/Models/CastBinaryUuid.php +++ /dev/null @@ -1,17 +0,0 @@ - BinaryUuid::class, - ]; -} diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index cbfe32058..5f825f954 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -4,6 +4,7 @@ namespace MongoDB\Laravel\Tests\Models; +use MongoDB\Laravel\Eloquent\Casts\BinaryUuid; use MongoDB\Laravel\Eloquent\Model as Eloquent; class Casting extends Eloquent @@ -12,6 +13,7 @@ class Casting extends Eloquent protected $collection = 'casting'; protected $fillable = [ + 'uuid', 'intNumber', 'floatNumber', 'decimalNumber', @@ -26,6 +28,7 @@ class Casting extends Eloquent ]; protected $casts = [ + 'uuid' => BinaryUuid::class, 'intNumber' => 'int', 'floatNumber' => 'float', 'decimalNumber' => 'decimal:2', From 64ef1540c65a17807a9d54d36cc7fc86409a47a3 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Mon, 30 Oct 2023 17:05:50 +0330 Subject: [PATCH 24/27] CastObjectId merged into Casting; --- tests/Casts/ObjectIdTest.php | 12 ++++++------ tests/Models/CastObjectId.php | 17 ----------------- tests/Models/Casting.php | 3 +++ 3 files changed, 9 insertions(+), 23 deletions(-) delete mode 100644 tests/Models/CastObjectId.php diff --git a/tests/Casts/ObjectIdTest.php b/tests/Casts/ObjectIdTest.php index 8d3e9daf4..0359a04e8 100644 --- a/tests/Casts/ObjectIdTest.php +++ b/tests/Casts/ObjectIdTest.php @@ -6,7 +6,7 @@ use Generator; use MongoDB\BSON\ObjectId; -use MongoDB\Laravel\Tests\Models\CastObjectId; +use MongoDB\Laravel\Tests\Models\Casting; use MongoDB\Laravel\Tests\TestCase; class ObjectIdTest extends TestCase @@ -15,7 +15,7 @@ protected function setUp(): void { parent::setUp(); - CastObjectId::truncate(); + Casting::truncate(); } /** @dataProvider provideObjectIdCast */ @@ -23,9 +23,9 @@ public function testStoreObjectId(string|ObjectId $saveObjectId, ObjectId $query { $stringObjectId = (string) $saveObjectId; - CastObjectId::create(['oid' => $saveObjectId]); + Casting::create(['oid' => $saveObjectId]); - $model = CastObjectId::firstWhere('oid', $queryObjectId); + $model = Casting::firstWhere('oid', $queryObjectId); $this->assertNotNull($model); $this->assertSame($stringObjectId, $model->oid); } @@ -44,9 +44,9 @@ public function testQueryByStringDoesNotCast(): void $objectId = new ObjectId(); $stringObjectId = (string) $objectId; - CastObjectId::create(['oid' => $objectId]); + Casting::create(['oid' => $objectId]); - $model = CastObjectId::firstWhere('oid', $stringObjectId); + $model = Casting::firstWhere('oid', $stringObjectId); $this->assertNull($model); } } diff --git a/tests/Models/CastObjectId.php b/tests/Models/CastObjectId.php deleted file mode 100644 index 2f4e7f5d5..000000000 --- a/tests/Models/CastObjectId.php +++ /dev/null @@ -1,17 +0,0 @@ - ObjectId::class, - ]; -} diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index 5f825f954..e92e6517c 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -5,6 +5,7 @@ namespace MongoDB\Laravel\Tests\Models; use MongoDB\Laravel\Eloquent\Casts\BinaryUuid; +use MongoDB\Laravel\Eloquent\Casts\ObjectId; use MongoDB\Laravel\Eloquent\Model as Eloquent; class Casting extends Eloquent @@ -14,6 +15,7 @@ class Casting extends Eloquent protected $fillable = [ 'uuid', + 'oid', 'intNumber', 'floatNumber', 'decimalNumber', @@ -29,6 +31,7 @@ class Casting extends Eloquent protected $casts = [ 'uuid' => BinaryUuid::class, + 'oid' => ObjectId::class, 'intNumber' => 'int', 'floatNumber' => 'float', 'decimalNumber' => 'decimal:2', From 696135f09a30fcb8793d44813d9ca04272fd2f0b Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Mon, 30 Oct 2023 17:07:21 +0330 Subject: [PATCH 25/27] Revert "CastObjectId merged into Casting;" This reverts commit 64ef1540c65a17807a9d54d36cc7fc86409a47a3. --- tests/Casts/ObjectIdTest.php | 12 ++++++------ tests/Models/CastObjectId.php | 17 +++++++++++++++++ tests/Models/Casting.php | 3 --- 3 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 tests/Models/CastObjectId.php diff --git a/tests/Casts/ObjectIdTest.php b/tests/Casts/ObjectIdTest.php index 0359a04e8..8d3e9daf4 100644 --- a/tests/Casts/ObjectIdTest.php +++ b/tests/Casts/ObjectIdTest.php @@ -6,7 +6,7 @@ use Generator; use MongoDB\BSON\ObjectId; -use MongoDB\Laravel\Tests\Models\Casting; +use MongoDB\Laravel\Tests\Models\CastObjectId; use MongoDB\Laravel\Tests\TestCase; class ObjectIdTest extends TestCase @@ -15,7 +15,7 @@ protected function setUp(): void { parent::setUp(); - Casting::truncate(); + CastObjectId::truncate(); } /** @dataProvider provideObjectIdCast */ @@ -23,9 +23,9 @@ public function testStoreObjectId(string|ObjectId $saveObjectId, ObjectId $query { $stringObjectId = (string) $saveObjectId; - Casting::create(['oid' => $saveObjectId]); + CastObjectId::create(['oid' => $saveObjectId]); - $model = Casting::firstWhere('oid', $queryObjectId); + $model = CastObjectId::firstWhere('oid', $queryObjectId); $this->assertNotNull($model); $this->assertSame($stringObjectId, $model->oid); } @@ -44,9 +44,9 @@ public function testQueryByStringDoesNotCast(): void $objectId = new ObjectId(); $stringObjectId = (string) $objectId; - Casting::create(['oid' => $objectId]); + CastObjectId::create(['oid' => $objectId]); - $model = Casting::firstWhere('oid', $stringObjectId); + $model = CastObjectId::firstWhere('oid', $stringObjectId); $this->assertNull($model); } } diff --git a/tests/Models/CastObjectId.php b/tests/Models/CastObjectId.php new file mode 100644 index 000000000..2f4e7f5d5 --- /dev/null +++ b/tests/Models/CastObjectId.php @@ -0,0 +1,17 @@ + ObjectId::class, + ]; +} diff --git a/tests/Models/Casting.php b/tests/Models/Casting.php index e92e6517c..5f825f954 100644 --- a/tests/Models/Casting.php +++ b/tests/Models/Casting.php @@ -5,7 +5,6 @@ namespace MongoDB\Laravel\Tests\Models; use MongoDB\Laravel\Eloquent\Casts\BinaryUuid; -use MongoDB\Laravel\Eloquent\Casts\ObjectId; use MongoDB\Laravel\Eloquent\Model as Eloquent; class Casting extends Eloquent @@ -15,7 +14,6 @@ class Casting extends Eloquent protected $fillable = [ 'uuid', - 'oid', 'intNumber', 'floatNumber', 'decimalNumber', @@ -31,7 +29,6 @@ class Casting extends Eloquent protected $casts = [ 'uuid' => BinaryUuid::class, - 'oid' => ObjectId::class, 'intNumber' => 'int', 'floatNumber' => 'float', 'decimalNumber' => 'decimal:2', From 6b81529616ac7287201b5425893961d3f8b622fc Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Mon, 30 Oct 2023 17:36:06 +0330 Subject: [PATCH 26/27] Float casted to integer test; --- tests/Casts/IntegerTest.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/Casts/IntegerTest.php b/tests/Casts/IntegerTest.php index 53b9494d6..f1a11dba5 100644 --- a/tests/Casts/IntegerTest.php +++ b/tests/Casts/IntegerTest.php @@ -27,6 +27,11 @@ public function testInt(): void self::assertIsInt($model->intNumber); self::assertEquals(2, $model->intNumber); + + $model->update(['intNumber' => 9.6]); + + self::assertIsInt($model->intNumber); + self::assertEquals(9, $model->intNumber); } public function testIntAsString(): void @@ -40,5 +45,10 @@ public function testIntAsString(): void self::assertIsInt($model->intNumber); self::assertEquals(2, $model->intNumber); + + $model->update(['intNumber' => '9.6']); + + self::assertIsInt($model->intNumber); + self::assertEquals(9, $model->intNumber); } } From c715194649362cf4e81973304e0e373c121ab178 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Mon, 30 Oct 2023 17:53:06 +0330 Subject: [PATCH 27/27] Add tests with \DateTime to DateTest; --- tests/Casts/DateTest.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/Casts/DateTest.php b/tests/Casts/DateTest.php index d312d2661..e0c775503 100644 --- a/tests/Casts/DateTest.php +++ b/tests/Casts/DateTest.php @@ -4,6 +4,7 @@ namespace MongoDB\Laravel\Tests\Casts; +use DateTime; use Illuminate\Support\Carbon; use MongoDB\Laravel\Tests\Models\Casting; use MongoDB\Laravel\Tests\TestCase; @@ -30,6 +31,16 @@ public function testDate(): void self::assertInstanceOf(Carbon::class, $model->dateField); self::assertEquals(now()->subDay()->startOfDay()->format('Y-m-d H:i:s'), (string) $model->dateField); + + $model->update(['dateField' => new DateTime()]); + + self::assertInstanceOf(Carbon::class, $model->dateField); + self::assertEquals(now()->startOfDay()->format('Y-m-d H:i:s'), (string) $model->dateField); + + $model->update(['dateField' => (new DateTime())->modify('-1 day')]); + + self::assertInstanceOf(Carbon::class, $model->dateField); + self::assertEquals(now()->subDay()->startOfDay()->format('Y-m-d H:i:s'), (string) $model->dateField); } public function testDateAsString(): void