Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Cover a few more cases in the various type classes.
  • Loading branch information
markstory committed Jan 10, 2016
1 parent 33c03f4 commit 225d52c
Show file tree
Hide file tree
Showing 7 changed files with 160 additions and 193 deletions.
2 changes: 2 additions & 0 deletions src/Database/Type.php
Expand Up @@ -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)
{
Expand All @@ -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)
{
Expand Down
2 changes: 1 addition & 1 deletion src/Database/Type/UuidType.php
Expand Up @@ -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;
Expand Down
130 changes: 130 additions & 0 deletions tests/TestCase/Database/Type/BoolTypeTest.php
@@ -0,0 +1,130 @@
<?php
/**
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @since 3.1.7
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace Cake\Test\TestCase\Database\Type;

use Cake\Database\Type;
use Cake\TestSuite\TestCase;
use \PDO;

/**
* Test for the Boolean type.
*/
class BoolTypeTest extends TestCase
{

/**
* Setup
*
* @return void
*/
public function setUp()
{
parent::setUp();
$this->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));
}
}
17 changes: 17 additions & 0 deletions tests/TestCase/Database/Type/DateTimeTypeTest.php
Expand Up @@ -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
*
Expand Down
1 change: 0 additions & 1 deletion tests/TestCase/Database/Type/StringTypeTest.php
Expand Up @@ -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;

Expand Down
11 changes: 10 additions & 1 deletion tests/TestCase/Database/Type/UuidTypeTest.php
Expand Up @@ -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);
}

/**
Expand Down Expand Up @@ -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]));
}
}

0 comments on commit 225d52c

Please sign in to comment.