From 225d52c0f87c140ecb23f7f67391c79f59aad502 Mon Sep 17 00:00:00 2001 From: Mark Story Date: Sat, 9 Jan 2016 19:15:50 -0500 Subject: [PATCH] Cover a few more cases in the various type classes. --- src/Database/Type.php | 2 + src/Database/Type/UuidType.php | 2 +- tests/TestCase/Database/Type/BoolTypeTest.php | 130 ++++++++++++ .../Database/Type/DateTimeTypeTest.php | 17 ++ .../TestCase/Database/Type/StringTypeTest.php | 1 - tests/TestCase/Database/Type/UuidTypeTest.php | 11 +- tests/TestCase/Database/TypeTest.php | 190 ------------------ 7 files changed, 160 insertions(+), 193 deletions(-) create mode 100644 tests/TestCase/Database/Type/BoolTypeTest.php diff --git a/src/Database/Type.php b/src/Database/Type.php index 30d9f2fc597..69a063674c0 100644 --- a/src/Database/Type.php +++ b/src/Database/Type.php @@ -245,6 +245,7 @@ public function toStatement($value, Driver $driver) * * @param mixed $value The value to convert to a boolean. * @return bool + * @deprecated 3.1.8 This method is now unused. */ public static function boolval($value) { @@ -261,6 +262,7 @@ public static function boolval($value) * * @param mixed $value The value to convert to a string. * @return bool + * @deprecated 3.1.8 This method is now unused. */ public static function strval($value) { diff --git a/src/Database/Type/UuidType.php b/src/Database/Type/UuidType.php index 2b78110524d..d7ccb0b711f 100644 --- a/src/Database/Type/UuidType.php +++ b/src/Database/Type/UuidType.php @@ -59,7 +59,7 @@ public function newId() */ public function marshal($value) { - if ($value === null || $value === '') { + if ($value === null || $value === '' || is_array($value)) { return null; } return (string)$value; diff --git a/tests/TestCase/Database/Type/BoolTypeTest.php b/tests/TestCase/Database/Type/BoolTypeTest.php new file mode 100644 index 00000000000..373b895cf6b --- /dev/null +++ b/tests/TestCase/Database/Type/BoolTypeTest.php @@ -0,0 +1,130 @@ +type = Type::build('boolean'); + $this->driver = $this->getMock('Cake\Database\Driver'); + } + + /** + * Test converting to database format + * + * @return void + */ + public function testToDatabase() + { + $this->assertNull($this->type->toDatabase(null, $this->driver)); + $this->assertTrue($this->type->toDatabase(true, $this->driver)); + $this->assertFalse($this->type->toDatabase(false, $this->driver)); + $this->assertTrue($this->type->toDatabase(1, $this->driver)); + $this->assertFalse($this->type->toDatabase(0, $this->driver)); + $this->assertTrue($this->type->toDatabase('1', $this->driver)); + $this->assertFalse($this->type->toDatabase('0', $this->driver)); + } + + /** + * Test converting an array to boolean results in an exception + * + * @expectedException InvalidArgumentException + * @return void + */ + public function testToDatabaseInvalid() + { + $this->type->toDatabase([1, 2], $this->driver); + } + + + /** + * Tests that passing an invalid value will throw an exception + * + * @expectedException InvalidArgumentException + * @return void + */ + public function testToDatabseInvalidArray() + { + $this->type->toDatabase([1, 2, 3], $this->driver); + } + + /** + * Test convertring string booleans to PHP values. + * + * @return void + */ + public function testToPHP() + { + $this->assertTrue($this->type->toPHP(true, $this->driver)); + $this->assertTrue($this->type->toPHP(1, $this->driver)); + $this->assertTrue($this->type->toPHP('1', $this->driver)); + $this->assertTrue($this->type->toPHP('TRUE', $this->driver)); + $this->assertTrue($this->type->toPHP('true', $this->driver)); + + $this->assertFalse($this->type->toPHP(false, $this->driver)); + $this->assertFalse($this->type->toPHP(0, $this->driver)); + $this->assertFalse($this->type->toPHP('0', $this->driver)); + $this->assertFalse($this->type->toPHP('FALSE', $this->driver)); + $this->assertFalse($this->type->toPHP('false', $this->driver)); + $this->assertTrue($this->type->toPHP(['2', '3'], $this->driver)); + } + + /** + * Test marshalling booleans + * + * @return void + */ + public function testMarshal() + { + $this->assertTrue($this->type->marshal(true)); + $this->assertTrue($this->type->marshal(1)); + $this->assertTrue($this->type->marshal('1')); + $this->assertTrue($this->type->marshal('true')); + + $this->assertFalse($this->type->marshal('false')); + $this->assertFalse($this->type->marshal('0')); + $this->assertFalse($this->type->marshal(0)); + $this->assertFalse($this->type->marshal('')); + $this->assertTrue($this->type->marshal('not empty')); + $this->assertTrue($this->type->marshal(['2', '3'])); + } + + /** + * Test convertring booleans to PDO types. + * + * @return void + */ + public function testToStatement() + { + $this->assertEquals(PDO::PARAM_NULL, $this->type->toStatement(null, $this->driver)); + $this->assertEquals(PDO::PARAM_BOOL, $this->type->toStatement(true, $this->driver)); + $this->assertEquals(PDO::PARAM_BOOL, $this->type->toStatement(false, $this->driver)); + } +} diff --git a/tests/TestCase/Database/Type/DateTimeTypeTest.php b/tests/TestCase/Database/Type/DateTimeTypeTest.php index ab676bae45a..fa64bb5c13d 100644 --- a/tests/TestCase/Database/Type/DateTimeTypeTest.php +++ b/tests/TestCase/Database/Type/DateTimeTypeTest.php @@ -220,6 +220,23 @@ public function testMarshal($value, $expected) } } + /** + * Test that useLocaleParser() can disable locale parsing. + * + * @return void + */ + public function testLocaleParserDisable() + { + $expected = new Time('13-10-2013 23:28:00'); + $this->type->useLocaleParser(); + $result = $this->type->marshal('10/13/2013 11:28pm'); + $this->assertEquals($expected, $result); + + $this->type->useLocaleParser(false); + $result = $this->type->marshal('10/13/2013 11:28pm'); + $this->assertNotEquals($expected, $result); + } + /** * Tests marshalling dates using the locale aware parser * diff --git a/tests/TestCase/Database/Type/StringTypeTest.php b/tests/TestCase/Database/Type/StringTypeTest.php index e53926fbd3e..b3e0e08b740 100644 --- a/tests/TestCase/Database/Type/StringTypeTest.php +++ b/tests/TestCase/Database/Type/StringTypeTest.php @@ -15,7 +15,6 @@ namespace Cake\Test\TestCase\Database\Type; use Cake\Database\Type; -use Cake\Database\Type\IntegerType; use Cake\TestSuite\TestCase; use \PDO; diff --git a/tests/TestCase/Database/Type/UuidTypeTest.php b/tests/TestCase/Database/Type/UuidTypeTest.php index 3c52146bb3f..fc7320652f1 100644 --- a/tests/TestCase/Database/Type/UuidTypeTest.php +++ b/tests/TestCase/Database/Type/UuidTypeTest.php @@ -65,6 +65,12 @@ public function testToDatabase() $result = $this->type->toDatabase(2, $this->driver); $this->assertSame('2', $result); + + $result = $this->type->toDatabase(null, $this->driver); + $this->assertNull($result); + + $result = $this->type->toDatabase('', $this->driver); + $this->assertNull($result); } /** @@ -97,8 +103,11 @@ public function testNewId() * * @return void */ - public function testMarshalEmptyString() + public function testMarshal() { $this->assertNull($this->type->marshal('')); + $this->assertSame('2', $this->type->marshal(2)); + $this->assertSame('word', $this->type->marshal('word')); + $this->assertNull($this->type->marshal([1, 2])); } } diff --git a/tests/TestCase/Database/TypeTest.php b/tests/TestCase/Database/TypeTest.php index c7b1d96f27d..9bb258bcaf0 100644 --- a/tests/TestCase/Database/TypeTest.php +++ b/tests/TestCase/Database/TypeTest.php @@ -91,7 +91,6 @@ public function basicTypesProvider() return [ ['string'], ['text'], - ['boolean'] ]; } @@ -193,195 +192,6 @@ public function testBigintegerToStatement() $this->assertEquals(PDO::PARAM_INT, $type->toStatement($integer, $driver)); } - /** - * Tests string from database are converted correctly to PHP - * - * @return void - */ - public function testStringToPHP() - { - $type = Type::build('string'); - $string = 'foo'; - $driver = $this->getMock('\Cake\Database\Driver'); - $this->assertEquals('foo', $type->toPHP($string, $driver)); - $this->assertEquals('3', $type->toPHP(3, $driver)); - $this->assertEquals('3.14159', $type->toPHP(3.14159, $driver)); - } - - /** - * Tests that passing a non-scalar value will thow an exception - * - * @expectedException InvalidArgumentException - * @return void - */ - public function testStringToDatabaseNoScalar() - { - $type = Type::build('string'); - $driver = $this->getMock('\Cake\Database\Driver'); - $type->toDatabase(['123'], $driver); - } - - /** - * Tests integers from PHP are converted correctly to statement value - * - * @return void - */ - public function testStringToStatement() - { - $type = Type::build('string'); - $string = '3'; - $driver = $this->getMock('\Cake\Database\Driver'); - $this->assertEquals(PDO::PARAM_STR, $type->toStatement($string, $driver)); - } - - /** - * Tests integers from database are converted correctly to PHP - * - * @return void - */ - public function testTextToPHP() - { - $type = Type::build('string'); - $string = 'foo'; - $driver = $this->getMock('\Cake\Database\Driver'); - $this->assertEquals('foo', $type->toPHP($string, $driver)); - $this->assertEquals('3', $type->toPHP(3, $driver)); - $this->assertEquals('3.14159', $type->toPHP(3.14159, $driver)); - } - - /** - * Tests integers from PHP are converted correctly to statement value - * - * @return void - */ - public function testTextToStatement() - { - $type = Type::build('string'); - $string = '3'; - $driver = $this->getMock('\Cake\Database\Driver'); - $this->assertEquals(PDO::PARAM_STR, $type->toStatement($string, $driver)); - } - - /** - * Test converting booleans to database types. - * - * @return void - */ - public function testBooleanToDatabase() - { - $type = Type::build('boolean'); - $driver = $this->getMock('\Cake\Database\Driver'); - - $this->assertNull($type->toDatabase(null, $driver)); - $this->assertTrue($type->toDatabase(true, $driver)); - $this->assertFalse($type->toDatabase(false, $driver)); - $this->assertTrue($type->toDatabase(1, $driver)); - $this->assertFalse($type->toDatabase(0, $driver)); - $this->assertTrue($type->toDatabase('1', $driver)); - $this->assertFalse($type->toDatabase('0', $driver)); - } - - /** - * Test converting an array to boolean results in an exception - * - * @expectedException InvalidArgumentException - * @return void - */ - public function testBooleanToDatabaseError() - { - $type = Type::build('boolean'); - $driver = $this->getMock('\Cake\Database\Driver'); - $this->assertTrue($type->toDatabase([1, 2], $driver)); - } - - /** - * Test convertring booleans to PDO types. - * - * @return void - */ - public function testBooleanToStatement() - { - $type = Type::build('boolean'); - $driver = $this->getMock('\Cake\Database\Driver'); - - $this->assertEquals(PDO::PARAM_BOOL, $type->toStatement(true, $driver)); - $this->assertEquals(PDO::PARAM_BOOL, $type->toStatement(false, $driver)); - } - - /** - * Test convertring string booleans to PHP values. - * - * @return void - */ - public function testBooleanToPHP() - { - $type = Type::build('boolean'); - $driver = $this->getMock('\Cake\Database\Driver'); - - $this->assertTrue($type->toPHP(true, $driver)); - $this->assertTrue($type->toPHP(1, $driver)); - $this->assertTrue($type->toPHP('1', $driver)); - $this->assertTrue($type->toPHP('TRUE', $driver)); - $this->assertTrue($type->toPHP('true', $driver)); - - $this->assertFalse($type->toPHP(false, $driver)); - $this->assertFalse($type->toPHP(0, $driver)); - $this->assertFalse($type->toPHP('0', $driver)); - $this->assertFalse($type->toPHP('FALSE', $driver)); - $this->assertFalse($type->toPHP('false', $driver)); - $this->assertTrue($type->toPHP(['2', '3'], $driver)); - } - - /** - * Test marshalling booleans - * - * @return void - */ - public function testBooleanMarshal() - { - $type = Type::build('boolean'); - $this->assertTrue($type->marshal(true)); - $this->assertTrue($type->marshal(1)); - $this->assertTrue($type->marshal('1')); - $this->assertTrue($type->marshal('true')); - - $this->assertFalse($type->marshal('false')); - $this->assertFalse($type->marshal('0')); - $this->assertFalse($type->marshal(0)); - $this->assertFalse($type->marshal('')); - $this->assertTrue($type->marshal('not empty')); - $this->assertTrue($type->marshal(['2', '3'])); - } - - - /** - * Tests uuid from database are converted correctly to PHP - * - * @return void - */ - public function testUuidToPHP() - { - $type = Type::build('uuid'); - $string = 'abc123-de456-fg789'; - $driver = $this->getMock('\Cake\Database\Driver'); - $this->assertEquals($string, $type->toPHP($string, $driver)); - $this->assertEquals('3', $type->toPHP(3, $driver)); - $this->assertEquals('3.14159', $type->toPHP(3.14159, $driver)); - } - - /** - * Tests integers from PHP are converted correctly to statement value - * - * @return void - */ - public function testUuidToStatement() - { - $type = Type::build('uuid'); - $string = 'abc123-def456-ghi789'; - $driver = $this->getMock('\Cake\Database\Driver'); - $this->assertEquals(PDO::PARAM_STR, $type->toStatement($string, $driver)); - } - /** * Tests decimal from database are converted correctly to PHP *