From f2d5531479f383d731c2186793b3f3c8684be4cf Mon Sep 17 00:00:00 2001 From: Jose Lorenzo Rodriguez Date: Mon, 16 Sep 2013 23:31:36 +0200 Subject: [PATCH] Testing setters --- Cake/ORM/Entity.php | 2 +- Cake/Test/TestCase/ORM/EntityTest.php | 102 ++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 Cake/Test/TestCase/ORM/EntityTest.php diff --git a/Cake/ORM/Entity.php b/Cake/ORM/Entity.php index 9facaf59415..6422137d9d0 100644 --- a/Cake/ORM/Entity.php +++ b/Cake/ORM/Entity.php @@ -86,7 +86,7 @@ public function __set($property, $value) { * or bypass them * @return \Cake\ORM\Entity */ - public function set($property, $value = false, $useSetters = true) { + public function set($property, $value = true, $useSetters = true) { if (is_string($property)) { $property = [$property => $value]; } else { diff --git a/Cake/Test/TestCase/ORM/EntityTest.php b/Cake/Test/TestCase/ORM/EntityTest.php new file mode 100644 index 00000000000..f11d27cd4d2 --- /dev/null +++ b/Cake/Test/TestCase/ORM/EntityTest.php @@ -0,0 +1,102 @@ +set('foo', 'bar'); + $this->assertEquals('bar', $entity->foo); + + $entity->set('foo', 'baz'); + $this->assertEquals('baz', $entity->foo); + + $entity->set('id', 1); + $this->assertSame(1, $entity->id); + } + +/** + * Tests setting multiple properties without custom setters + * + * @return void + */ + public function testSetMultiplePropertiesNOSetters() { + $entity = new Entity; + $entity->set(['foo' => 'bar', 'id' => 1]); + $this->assertEquals('bar', $entity->foo); + $this->assertSame(1, $entity->id); + + $entity->set(['foo' => 'baz', 'id' => 2, 'thing' => 3]); + $this->assertEquals('baz', $entity->foo); + $this->assertSame(2, $entity->id); + $this->assertSame(3, $entity->thing); + } + +/** + * Tests setting a single property using a setter function + * + * @return void + */ + public function testSetOneParamWithSetter() { + $entity = $this->getMock('\Cake\ORM\Entity', ['setName']); + $entity->expects($this->once())->method('setName') + ->with('Jones') + ->will($this->returnCallback(function($name) { + $this->assertEquals('Jones', $name); + return 'Dr. ' . $name; + })); + $entity->set('name', 'Jones'); + $this->assertEquals('Dr. Jones', $entity->name); + } + +/** + * Tests setting multiple properties using a setter function + * + * @return void + */ + public function testMultipleWithSetter() { + $entity = $this->getMock('\Cake\ORM\Entity', ['setName', 'setStuff']); + $entity->expects($this->once())->method('setName') + ->with('Jones') + ->will($this->returnCallback(function($name) { + $this->assertEquals('Jones', $name); + return 'Dr. ' . $name; + })); + $entity->expects($this->once())->method('setStuff') + ->with(['a', 'b']) + ->will($this->returnCallback(function($stuff) { + $this->assertEquals(['a', 'b'], $stuff); + return ['c', 'd']; + })); + $entity->set(['name' => 'Jones', 'stuff' => ['a', 'b']]); + $this->assertEquals('Dr. Jones', $entity->name); + $this->assertEquals(['c', 'd'], $entity->stuff); + } + +}