Skip to content

Commit

Permalink
Ensure types are correct, and unsupported field types map to their al…
Browse files Browse the repository at this point in the history
…iases
  • Loading branch information
craig committed Jun 9, 2012
1 parent 381ce08 commit 514205d
Show file tree
Hide file tree
Showing 6 changed files with 117 additions and 19 deletions.
Expand Up @@ -168,7 +168,7 @@ final class Boolean extends TranslatableProperty
*/
final class Name extends TranslatableProperty
{
public $type = 'string';
public $type = 'name';
}
/**
* String that is an absolute or relative path in the repository
Expand All @@ -177,7 +177,7 @@ final class Name extends TranslatableProperty
*/
final class Path extends TranslatableProperty
{
public $type = 'string';
public $type = 'path';
}
/**
* String that is validated to be an URI
Expand All @@ -186,7 +186,7 @@ final class Path extends TranslatableProperty
*/
final class Uri extends TranslatableProperty
{
public $type = 'string';
public $type = 'uri';
}
/**
* Large numbers bcmath compatible strings
Expand All @@ -195,7 +195,7 @@ final class Uri extends TranslatableProperty
*/
final class Decimal extends TranslatableProperty
{
public $type = 'string';
public $type = 'decimal';
}

/**
Expand Down
4 changes: 4 additions & 0 deletions lib/Doctrine/ODM/PHPCR/Mapping/ClassMetadata.php
Expand Up @@ -919,6 +919,10 @@ public function mapField(array $mapping)
if ($mapping['type'] === 'int') {
$mapping['type'] = 'long';
}

if ($mapping['type'] === 'float') {
$mapping['type'] = 'double';
}

// Add the field to the list of translatable fields
if (isset($mapping['translated']) && $mapping['translated']) {
Expand Down
4 changes: 0 additions & 4 deletions lib/Doctrine/ODM/PHPCR/Mapping/Driver/XmlDriver.php
Expand Up @@ -85,10 +85,6 @@ public function loadMetadataForClass($className, ClassMetadata $class)
if ($key === 'id' || $key === 'multivalue') {
$mapping[$key] = ('true' === $mapping[$key]) ? true : false;
}
// Large numbers bcmath compatible strings
if($key === 'type' && $value == 'decimal') {
$mapping[$key] = 'string';
}
}
$class->mapField($mapping);
}
Expand Down
8 changes: 0 additions & 8 deletions lib/Doctrine/ODM/PHPCR/Mapping/Driver/YamlDriver.php
Expand Up @@ -82,15 +82,7 @@ public function loadMetadataForClass($className, ClassMetadata $class)
if (is_string($mapping)) {
$type = $mapping;
$mapping = array();

// Large numbers bcmath compatible strings
if($type == 'decimal') {
$type = 'string';
}

$mapping['type'] = $type;


}
if (!isset($mapping['fieldName'])) {
$mapping['fieldName'] = $fieldName;
Expand Down
26 changes: 24 additions & 2 deletions tests/Doctrine/Tests/ODM/PHPCR/Functional/PropertyTest.php
Expand Up @@ -3,6 +3,7 @@
namespace Doctrine\Tests\ODM\PHPCR\Functional;

use Doctrine\ODM\PHPCR\Mapping\Annotations as PHPCRODM;
use PHPCR\PropertyType;

/**
* @group functional
Expand Down Expand Up @@ -46,24 +47,45 @@ public function testPropertyname()
$doc->date = $date;
$doc->boolean = true;
$doc->name = 'aname';
$doc->path = '../';
$doc->path = '../a';
$doc->uri = 'http://cmf.symfony.com:8080/about.html#there';

$this->dm->persist($doc);
$this->dm->flush();
$this->dm->clear();

$this->assertTrue($this->node->getNode('p')->hasProperty('string'));
$this->assertEquals(PropertyType::STRING, $this->node->getNode('p')->getProperty('string')->getType());

$this->assertTrue($this->node->getNode('p')->hasProperty('long'));
$this->assertEquals(PropertyType::LONG, $this->node->getNode('p')->getProperty('long')->getType());

$this->assertTrue($this->node->getNode('p')->hasProperty('int'));
$this->assertEquals(PropertyType::LONG, $this->node->getNode('p')->getProperty('int')->getType());

$this->assertTrue($this->node->getNode('p')->hasProperty('decimal'));
$this->assertEquals(PropertyType::DECIMAL, $this->node->getNode('p')->getProperty('decimal')->getType());

$this->assertTrue($this->node->getNode('p')->hasProperty('double'));
$this->assertEquals(PropertyType::DOUBLE, $this->node->getNode('p')->getProperty('double')->getType());

$this->assertTrue($this->node->getNode('p')->hasProperty('float'));
$this->assertEquals(PropertyType::DOUBLE, $this->node->getNode('p')->getProperty('float')->getType());

$this->assertTrue($this->node->getNode('p')->hasProperty('date'));
$this->assertEquals(PropertyType::DATE, $this->node->getNode('p')->getProperty('date')->getType());

$this->assertTrue($this->node->getNode('p')->hasProperty('boolean'));
$this->assertEquals(PropertyType::BOOLEAN, $this->node->getNode('p')->getProperty('boolean')->getType());

$this->assertTrue($this->node->getNode('p')->hasProperty('name'));
$this->assertEquals(PropertyType::NAME, $this->node->getNode('p')->getProperty('name')->getType());

$this->assertTrue($this->node->getNode('p')->hasProperty('path'));
$this->assertEquals(PropertyType::PATH, $this->node->getNode('p')->getProperty('path')->getType());

$this->assertTrue($this->node->getNode('p')->hasProperty('uri'));
$this->assertEquals(PropertyType::URI, $this->node->getNode('p')->getProperty('uri')->getType());

$doc = $this->dm->find($this->type, '/functional/p');
$this->assertNotNull($doc->string);
Expand All @@ -85,7 +107,7 @@ public function testPropertyname()
$this->assertNotNull($doc->name);
$this->assertEquals('aname', $doc->name);
$this->assertNotNull($doc->path);
$this->assertEquals('../', $doc->path);
$this->assertEquals('../a', $doc->path);
$this->assertNotNull($doc->uri);
$this->assertEquals('http://cmf.symfony.com:8080/about.html#there', $doc->uri);
}
Expand Down
Expand Up @@ -146,14 +146,26 @@ public function testLongFieldMappings($class)
return $class;
}

/**
* @depends testFieldMappings
* @param ClassMetadata $class
*/
public function testIntFieldMappings($class)
{
$this->assertEquals('int', $class->fieldMappings['int']['name']);
$this->assertEquals('long', $class->fieldMappings['int']['type']);

return $class;
}

/**
* @depends testFieldMappings
* @param ClassMetadata $class
*/
public function testDecimalFieldMappings($class)
{
$this->assertEquals('decimal', $class->fieldMappings['decimal']['name']);
$this->assertEquals('string', $class->fieldMappings['decimal']['type']);
$this->assertEquals('decimal', $class->fieldMappings['decimal']['type']);

return $class;
}
Expand All @@ -169,4 +181,76 @@ public function testDoubleFieldMappings($class)

return $class;
}

/**
* @depends testFieldMappings
* @param ClassMetadata $class
*/
public function testFloatFieldMappings($class)
{
$this->assertEquals('float', $class->fieldMappings['float']['name']);
$this->assertEquals('double', $class->fieldMappings['float']['type']);

return $class;
}

/**
* @depends testFieldMappings
* @param ClassMetadata $class
*/
public function testDateFieldMappings($class)
{
$this->assertEquals('date', $class->fieldMappings['date']['name']);
$this->assertEquals('date', $class->fieldMappings['date']['type']);

return $class;
}

/**
* @depends testFieldMappings
* @param ClassMetadata $class
*/
public function testBooleanFieldMappings($class)
{
$this->assertEquals('boolean', $class->fieldMappings['boolean']['name']);
$this->assertEquals('boolean', $class->fieldMappings['boolean']['type']);

return $class;
}

/**
* @depends testFieldMappings
* @param ClassMetadata $class
*/
public function testNameFieldMappings($class)
{
$this->assertEquals('name', $class->fieldMappings['name']['name']);
$this->assertEquals('name', $class->fieldMappings['name']['type']);

return $class;
}

/**
* @depends testFieldMappings
* @param ClassMetadata $class
*/
public function testPathFieldMappings($class)
{
$this->assertEquals('path', $class->fieldMappings['path']['name']);
$this->assertEquals('path', $class->fieldMappings['path']['type']);

return $class;
}

/**
* @depends testFieldMappings
* @param ClassMetadata $class
*/
public function testUriFieldMappings($class)
{
$this->assertEquals('uri', $class->fieldMappings['uri']['name']);
$this->assertEquals('uri', $class->fieldMappings['uri']['type']);

return $class;
}
}

0 comments on commit 514205d

Please sign in to comment.