From 652618d5c103bd1a0db728bbed853503ce4a21fa Mon Sep 17 00:00:00 2001 From: Mauro Moreno Date: Sat, 21 Jul 2018 07:15:47 -0300 Subject: [PATCH 1/4] Added missing tests for addVisible, addHidden and casts --- src/Model.php | 1 + tests/ModelTest.php | 39 ++++++++++++++++++++++++++++++++++++++- tests/stubs/ModelStub.php | 8 ++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/Model.php b/src/Model.php index a684e7d..1417064 100644 --- a/src/Model.php +++ b/src/Model.php @@ -947,4 +947,5 @@ public function __toString() { return $this->toJson(); } + } diff --git a/tests/ModelTest.php b/tests/ModelTest.php index fa82336..361158d 100644 --- a/tests/ModelTest.php +++ b/tests/ModelTest.php @@ -68,6 +68,13 @@ public function testToArray() $this->assertEquals('foo', $array['name']); $this->assertFalse(isset($array['password'])); $this->assertEquals($array, $model->jsonSerialize()); + + $model->addHidden(['name']); + $model->addVisible('password'); + $array = $model->toArray(); + $this->assertTrue(is_array($array)); + $this->assertFalse(isset($array['name'])); + $this->assertTrue(isset($array['password'])); } public function testToJson() @@ -159,21 +166,37 @@ public function testCasts() $model = new ModelStub; $model->score = '0.34'; $model->data = ['foo' => 'bar']; + $model->count = 1; + $model->object_data = ['foo' => 'bar']; $model->active = 'true'; + $model->default = 'bar'; + $model->collection_data = json_encode([['foo' => 'bar', 'baz' => 'bat']]); $this->assertTrue(is_float($model->score)); $this->assertTrue(is_array($model->data)); $this->assertTrue(is_bool($model->active)); + $this->assertTrue(is_int($model->count)); + $this->assertEquals('bar', $model->default); + $this->assertInstanceOf('\stdClass', $model->object_data); + $this->assertInstanceOf(\Illuminate\Support\Collection::class, $model->collection_data); $attributes = $model->getAttributes(); $this->assertTrue(is_string($attributes['score'])); $this->assertTrue(is_string($attributes['data'])); $this->assertTrue(is_string($attributes['active'])); + $this->assertTrue(is_int($attributes['count'])); + $this->assertTrue(is_string($attributes['default'])); + $this->assertTrue(is_string($attributes['object_data'])); + $this->assertTrue(is_string($attributes['collection_data'])); $array = $model->toArray(); $this->assertTrue(is_float($array['score'])); $this->assertTrue(is_array($array['data'])); $this->assertTrue(is_bool($array['active'])); + $this->assertTrue(is_int($array['count'])); + $this->assertEquals('bar', $array['default']); + $this->assertInstanceOf('\stdClass', $array['object_data']); + $this->assertInstanceOf(\Illuminate\Support\Collection::class, $array['collection_data']); } public function testGuarded() @@ -195,9 +218,23 @@ public function testGuarded() ModelStub::reguard(); } + public function testGuardedCallback() + { + ModelStub::unguard(); + $mock = $this->getMockBuilder('stdClass') + ->setMethods(['callback']) + ->getMock(); + $mock->expects($this->once()) + ->method('callback') + ->will($this->returnValue('foo')); + $string = ModelStub::unguarded([$mock, 'callback']); + $this->assertEquals('foo', $string); + ModelStub::reguard(); + } + public function testTotallyGuarded() { - $this->setExpectedException('Jenssegers\Model\MassAssignmentException'); + $this->expectException('Jenssegers\Model\MassAssignmentException'); $model = new ModelStub(); $model->guard(['*']); diff --git a/tests/stubs/ModelStub.php b/tests/stubs/ModelStub.php index 163f776..a543c89 100644 --- a/tests/stubs/ModelStub.php +++ b/tests/stubs/ModelStub.php @@ -12,6 +12,10 @@ class ModelStub extends Model 'data' => 'array', 'active' => 'bool', 'secret' => 'string', + 'count' => 'int', + 'object_data' => 'object', + 'collection_data' => 'collection', + 'foo' => 'bar', ]; protected $guarded = [ @@ -25,6 +29,10 @@ class ModelStub extends Model 'score', 'data', 'active', + 'count', + 'object_data', + 'default', + 'collection_data', ]; public function getListItemsAttribute($value) From 2473773e0eb46a3d1d28a96d6208fdfed0b4426e Mon Sep 17 00:00:00 2001 From: Mauro Moreno Date: Sat, 21 Jul 2018 07:19:41 -0300 Subject: [PATCH 2/4] Remove blank line --- src/Model.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Model.php b/src/Model.php index 1417064..a684e7d 100644 --- a/src/Model.php +++ b/src/Model.php @@ -947,5 +947,4 @@ public function __toString() { return $this->toJson(); } - } From 369016a9db6ec9a22bee7b074f104c84443c5e52 Mon Sep 17 00:00:00 2001 From: Mauro Moreno Date: Sat, 21 Jul 2018 07:25:56 -0300 Subject: [PATCH 3/4] Fix tests for <5.6 --- tests/ModelTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/ModelTest.php b/tests/ModelTest.php index 361158d..4fcb99f 100644 --- a/tests/ModelTest.php +++ b/tests/ModelTest.php @@ -178,7 +178,7 @@ public function testCasts() $this->assertTrue(is_int($model->count)); $this->assertEquals('bar', $model->default); $this->assertInstanceOf('\stdClass', $model->object_data); - $this->assertInstanceOf(\Illuminate\Support\Collection::class, $model->collection_data); + $this->assertInstanceOf('\Illuminate\Support\Collection', $model->collection_data); $attributes = $model->getAttributes(); $this->assertTrue(is_string($attributes['score'])); @@ -196,7 +196,7 @@ public function testCasts() $this->assertTrue(is_int($array['count'])); $this->assertEquals('bar', $array['default']); $this->assertInstanceOf('\stdClass', $array['object_data']); - $this->assertInstanceOf(\Illuminate\Support\Collection::class, $array['collection_data']); + $this->assertInstanceOf('\Illuminate\Support\Collection', $array['collection_data']); } public function testGuarded() @@ -234,7 +234,7 @@ public function testGuardedCallback() public function testTotallyGuarded() { - $this->expectException('Jenssegers\Model\MassAssignmentException'); + $this->setExpectedException('Jenssegers\Model\MassAssignmentException'); $model = new ModelStub(); $model->guard(['*']); From 2aae1564e16249f93e05c0f669731b13eca34dae Mon Sep 17 00:00:00 2001 From: Mauro Moreno Date: Sat, 21 Jul 2018 11:12:31 -0300 Subject: [PATCH 4/4] Encode collection --- src/Model.php | 3 ++- tests/ModelTest.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Model.php b/src/Model.php index a684e7d..cfc73a0 100644 --- a/src/Model.php +++ b/src/Model.php @@ -652,8 +652,9 @@ protected function hasCast($key) */ protected function isJsonCastable($key) { + $castables = ['array', 'json', 'object', 'collection']; return $this->hasCast($key) && - in_array($this->getCastType($key), ['array', 'json', 'object'], true); + in_array($this->getCastType($key), $castables, true); } /** diff --git a/tests/ModelTest.php b/tests/ModelTest.php index 4fcb99f..eb063f9 100644 --- a/tests/ModelTest.php +++ b/tests/ModelTest.php @@ -170,7 +170,7 @@ public function testCasts() $model->object_data = ['foo' => 'bar']; $model->active = 'true'; $model->default = 'bar'; - $model->collection_data = json_encode([['foo' => 'bar', 'baz' => 'bat']]); + $model->collection_data = [['foo' => 'bar', 'baz' => 'bat']]; $this->assertTrue(is_float($model->score)); $this->assertTrue(is_array($model->data));