Skip to content

Commit 5a7f718

Browse files
committed
Add more cast tests
1 parent b76f575 commit 5a7f718

File tree

9 files changed

+131
-5
lines changed

9 files changed

+131
-5
lines changed

tests/Casts/BooleanTest.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,42 @@ public function testBoolAsString(): void
5050

5151
self::assertIsBool($model->booleanValue);
5252
self::assertSame(false, $model->booleanValue);
53+
54+
$model->update(['booleanValue' => 'false']);
55+
56+
self::assertIsBool($model->booleanValue);
57+
self::assertSame(true, $model->booleanValue);
58+
59+
$model->update(['booleanValue' => '0.0']);
60+
61+
self::assertIsBool($model->booleanValue);
62+
self::assertSame(true, $model->booleanValue);
63+
64+
$model->update(['booleanValue' => 'true']);
65+
66+
self::assertIsBool($model->booleanValue);
67+
self::assertSame(true, $model->booleanValue);
68+
}
69+
70+
public function testBoolAsNumber(): void
71+
{
72+
$model = Casting::query()->create(['booleanValue' => 1]);
73+
74+
self::assertIsBool($model->booleanValue);
75+
self::assertSame(true, $model->booleanValue);
76+
77+
$model->update(['booleanValue' => 0]);
78+
79+
self::assertIsBool($model->booleanValue);
80+
self::assertSame(false, $model->booleanValue);
81+
82+
$model->update(['booleanValue' => 1.79]);
83+
84+
self::assertIsBool($model->booleanValue);
85+
self::assertSame(true, $model->booleanValue);
86+
87+
$model->update(['booleanValue' => 0.0]);
88+
self::assertIsBool($model->booleanValue);
89+
self::assertSame(false, $model->booleanValue);
5390
}
5491
}

tests/Casts/CollectionTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,19 @@ public function testCollection(): void
2424
$model = Casting::query()->create(['collectionValue' => ['g' => 'G-Eazy']]);
2525

2626
self::assertInstanceOf(Collection::class, $model->collectionValue);
27+
self::assertIsString($model->getRawOriginal('collectionValue'));
2728
self::assertEquals(collect(['g' => 'G-Eazy']), $model->collectionValue);
2829

2930
$model->update(['collectionValue' => ['Dont let me go' => 'Even the longest of nights turn days']]);
3031

3132
self::assertInstanceOf(Collection::class, $model->collectionValue);
33+
self::assertIsString($model->getRawOriginal('collectionValue'));
3234
self::assertEquals(collect(['Dont let me go' => 'Even the longest of nights turn days']), $model->collectionValue);
35+
36+
$model->update(['collectionValue' => [['Dont let me go' => 'Even the longest of nights turn days']]]);
37+
38+
self::assertInstanceOf(Collection::class, $model->collectionValue);
39+
self::assertIsString($model->getRawOriginal('collectionValue'));
40+
self::assertEquals(collect([['Dont let me go' => 'Even the longest of nights turn days']]), $model->collectionValue);
3341
}
3442
}

tests/Casts/DateTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Carbon\CarbonImmutable;
88
use DateTime;
99
use Illuminate\Support\Carbon;
10+
use MongoDB\BSON\UTCDateTime;
1011
use MongoDB\Laravel\Tests\Models\Casting;
1112
use MongoDB\Laravel\Tests\TestCase;
1213

@@ -31,17 +32,26 @@ public function testDate(): void
3132
$model->update(['dateField' => now()->subDay()]);
3233

3334
self::assertInstanceOf(Carbon::class, $model->dateField);
35+
self::assertInstanceOf(UTCDateTime::class, $model->getRawOriginal('dateField'));
3436
self::assertEquals(now()->subDay()->startOfDay()->format('Y-m-d H:i:s'), (string) $model->dateField);
3537

3638
$model->update(['dateField' => new DateTime()]);
3739

3840
self::assertInstanceOf(Carbon::class, $model->dateField);
41+
self::assertInstanceOf(UTCDateTime::class, $model->getRawOriginal('dateField'));
3942
self::assertEquals(now()->startOfDay()->format('Y-m-d H:i:s'), (string) $model->dateField);
4043

4144
$model->update(['dateField' => (new DateTime())->modify('-1 day')]);
4245

4346
self::assertInstanceOf(Carbon::class, $model->dateField);
47+
self::assertInstanceOf(UTCDateTime::class, $model->getRawOriginal('dateField'));
4448
self::assertEquals(now()->subDay()->startOfDay()->format('Y-m-d H:i:s'), (string) $model->dateField);
49+
50+
$refetchedModel = Casting::query()->find($model->getKey());
51+
52+
self::assertInstanceOf(Carbon::class, $refetchedModel->dateField);
53+
self::assertInstanceOf(UTCDateTime::class, $model->getRawOriginal('dateField'));
54+
self::assertEquals(now()->subDay()->startOfDay()->format('Y-m-d H:i:s'), (string) $refetchedModel->dateField);
4555
}
4656

4757
public function testDateAsString(): void

tests/Casts/DatetimeTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Carbon\CarbonImmutable;
88
use DateTime;
99
use Illuminate\Support\Carbon;
10+
use MongoDB\BSON\UTCDateTime;
1011
use MongoDB\Laravel\Tests\Models\Casting;
1112
use MongoDB\Laravel\Tests\TestCase;
1213

@@ -27,11 +28,13 @@ public function testDatetime(): void
2728
$model = Casting::query()->create(['datetimeField' => now()]);
2829

2930
self::assertInstanceOf(Carbon::class, $model->datetimeField);
31+
self::assertInstanceOf(UTCDateTime::class, $model->getRawOriginal('datetimeField'));
3032
self::assertEquals(now()->format('Y-m-d H:i:s'), (string) $model->datetimeField);
3133

3234
$model->update(['datetimeField' => now()->subDay()]);
3335

3436
self::assertInstanceOf(Carbon::class, $model->datetimeField);
37+
self::assertInstanceOf(UTCDateTime::class, $model->getRawOriginal('datetimeField'));
3538
self::assertEquals(now()->subDay()->format('Y-m-d H:i:s'), (string) $model->datetimeField);
3639
}
3740

@@ -40,6 +43,7 @@ public function testDatetimeAsString(): void
4043
$model = Casting::query()->create(['datetimeField' => '2023-10-29']);
4144

4245
self::assertInstanceOf(Carbon::class, $model->datetimeField);
46+
self::assertInstanceOf(UTCDateTime::class, $model->getRawOriginal('datetimeField'));
4347
self::assertEquals(
4448
Carbon::createFromTimestamp(1698577443)->startOfDay()->format('Y-m-d H:i:s'),
4549
(string) $model->datetimeField,
@@ -48,6 +52,7 @@ public function testDatetimeAsString(): void
4852
$model->update(['datetimeField' => '2023-10-28 11:04:03']);
4953

5054
self::assertInstanceOf(Carbon::class, $model->datetimeField);
55+
self::assertInstanceOf(UTCDateTime::class, $model->getRawOriginal('datetimeField'));
5156
self::assertEquals(
5257
Carbon::createFromTimestamp(1698577443)->subDay()->format('Y-m-d H:i:s'),
5358
(string) $model->datetimeField,
@@ -82,6 +87,7 @@ public function testImmutableDatetime(): void
8287
$model->update(['immutableDatetimeField' => '2023-10-28 11:04:03']);
8388

8489
self::assertInstanceOf(CarbonImmutable::class, $model->immutableDatetimeField);
90+
self::assertInstanceOf(UTCDateTime::class, $model->getRawOriginal('immutableDatetimeField'));
8591
self::assertEquals(
8692
Carbon::createFromTimestamp(1698577443)->subDay()->format('Y-m-d H:i:s'),
8793
(string) $model->immutableDatetimeField,

tests/Casts/DecimalTest.php

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,56 @@ public function testDecimal(): void
2121
{
2222
$model = Casting::query()->create(['decimalNumber' => 100.99]);
2323

24-
self::assertInstanceOf(Decimal128::class, $model->decimalNumber);
24+
self::assertIsString($model->decimalNumber);
25+
self::assertInstanceOf(Decimal128::class, $model->getRawOriginal('decimalNumber'));
2526
self::assertEquals('100.99', $model->decimalNumber);
2627

2728
$model->update(['decimalNumber' => 9999.9]);
2829

29-
self::assertInstanceOf(Decimal128::class, $model->decimalNumber);
30+
self::assertIsString($model->decimalNumber);
31+
self::assertInstanceOf(Decimal128::class, $model->getRawOriginal('decimalNumber'));
3032
self::assertEquals('9999.90', $model->decimalNumber);
33+
34+
$model->update(['decimalNumber' => 9999.00000009]);
35+
36+
self::assertIsString($model->decimalNumber);
37+
self::assertInstanceOf(Decimal128::class, $model->getRawOriginal('decimalNumber'));
38+
self::assertEquals('9999.00', $model->decimalNumber);
3139
}
3240

3341
public function testDecimalAsString(): void
3442
{
3543
$model = Casting::query()->create(['decimalNumber' => '120.79']);
3644

37-
self::assertInstanceOf(Decimal128::class, $model->decimalNumber);
45+
self::assertIsString($model->decimalNumber);
46+
self::assertInstanceOf(Decimal128::class, $model->getRawOriginal('decimalNumber'));
3847
self::assertEquals('120.79', $model->decimalNumber);
3948

4049
$model->update(['decimalNumber' => '795']);
4150

42-
self::assertInstanceOf(Decimal128::class, $model->decimalNumber);
51+
self::assertIsString($model->decimalNumber);
52+
self::assertInstanceOf(Decimal128::class, $model->getRawOriginal('decimalNumber'));
4353
self::assertEquals('795.00', $model->decimalNumber);
54+
55+
$model->update(['decimalNumber' => '1234.99999999999']);
56+
57+
self::assertIsString($model->decimalNumber);
58+
self::assertInstanceOf(Decimal128::class, $model->getRawOriginal('decimalNumber'));
59+
self::assertEquals('1235.00', $model->decimalNumber);
60+
}
61+
62+
public function testDecimalAsDecimal128(): void
63+
{
64+
$model = Casting::query()->create(['decimalNumber' => new Decimal128('100.99')]);
65+
66+
self::assertIsString($model->decimalNumber);
67+
self::assertInstanceOf(Decimal128::class, $model->getRawOriginal('decimalNumber'));
68+
self::assertEquals('100.99', $model->decimalNumber);
69+
70+
$model->update(['decimalNumber' => new Decimal128('9999.9')]);
71+
72+
self::assertIsString($model->decimalNumber);
73+
self::assertInstanceOf(Decimal128::class, $model->getRawOriginal('decimalNumber'));
74+
self::assertEquals('9999.90', $model->decimalNumber);
4475
}
4576
}

tests/Casts/IntegerTest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,22 @@ public function testIntAsString(): void
5151
self::assertIsInt($model->intNumber);
5252
self::assertEquals(9, $model->intNumber);
5353
}
54+
55+
public function testIntAsFloat(): void
56+
{
57+
$model = Casting::query()->create(['intNumber' => 1.0]);
58+
59+
self::assertIsInt($model->intNumber);
60+
self::assertEquals(1, $model->intNumber);
61+
62+
$model->update(['intNumber' => 2.0]);
63+
64+
self::assertIsInt($model->intNumber);
65+
self::assertEquals(2, $model->intNumber);
66+
67+
$model->update(['intNumber' => 9.6]);
68+
69+
self::assertIsInt($model->intNumber);
70+
self::assertEquals(9, $model->intNumber);
71+
}
5472
}

tests/Casts/JsonTest.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,17 @@ public function testJson(): void
2525
self::assertIsArray($model->jsonValue);
2626
self::assertEquals(['g' => 'G-Eazy'], $model->jsonValue);
2727

28-
$model->update(['jsonValue' => json_encode(['Dont let me go' => 'Even the longest of nights turn days'])]);
28+
$model->update(['jsonValue' => ['Dont let me go' => 'Even the longest of nights turn days']]);
2929

3030
self::assertIsArray($model->jsonValue);
31+
self::assertIsString($model->getRawOriginal('jsonValue'));
3132
self::assertEquals(['Dont let me go' => 'Even the longest of nights turn days'], $model->jsonValue);
33+
34+
$json = json_encode(['it will encode json' => 'even if it is already json']);
35+
$model->update(['jsonValue' => $json]);
36+
37+
self::assertIsString($model->jsonValue);
38+
self::assertIsString($model->getRawOriginal('jsonValue'));
39+
self::assertEquals($json, $model->jsonValue);
3240
}
3341
}

tests/Casts/ObjectTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@ public function testObject(): void
2121
$model = Casting::query()->create(['objectValue' => ['g' => 'G-Eazy']]);
2222

2323
self::assertIsObject($model->objectValue);
24+
self::assertIsString($model->getRawOriginal('objectValue'));
2425
self::assertEquals((object) ['g' => 'G-Eazy'], $model->objectValue);
2526

2627
$model->update(['objectValue' => ['Dont let me go' => 'Even the brightest of colors turn greys']]);
2728

2829
self::assertIsObject($model->objectValue);
30+
self::assertIsString($model->getRawOriginal('objectValue'));
2931
self::assertEquals((object) ['Dont let me go' => 'Even the brightest of colors turn greys'], $model->objectValue);
3032
}
3133
}

tests/Casts/StringTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,11 @@ public function testString(): void
2727

2828
self::assertIsString($model->stringContent);
2929
self::assertEquals("Losing hope, don't mean I'm hopeless And maybe all I need is time", $model->stringContent);
30+
31+
$now = now();
32+
$model->update(['stringContent' => now()]);
33+
34+
self::assertIsString($model->stringContent);
35+
self::assertEquals((string) $now, $model->stringContent);
3036
}
3137
}

0 commit comments

Comments
 (0)