8000 [Form] Fixed ValidatorTypeGuesser to guess properties without constraints not to be required by webmozart · Pull Request #12004 · symfony/symfony · GitHub
[go: up one dir, main page]

Skip to content

[Form] Fixed ValidatorTypeGuesser to guess properties without constraints not to be required #12004

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 24, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions src/Symfony/Component/Form/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
CHANGELOG
=========


2.3.0
------
-----

* deprecated FormPerformanceTestCase and FormIntegrationTestCase in the Symfony\Component\Form\Tests namespace and moved them to the Symfony\Component\Form\Test namespace
* deprecated TypeTestCase in the Symfony\Component\Form\Tests\Extension\Core\Type namespace and moved it to the Symfony\Component\Form\Test namespace
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -276,10 +276,10 @@ protected function guess($class, $property, \Closure $closure, $defaultValue = n
}
}
}
}

if (null !== $defaultValue) {
$guesses[] = new ValueGuess($defaultValue, Guess::LOW_CONFIDENCE);
}
if (null !== $defaultValue) {
$guesses[] = new ValueGuess($defaultValue, Guess::LOW_CONFIDENCE);
}

return Guess::getBestGuess($guesses);
Expand Down
8000
Original file line number Diff line number Diff line change
Expand Up @@ -13,32 +13,91 @@

use Symfony\Component\Form\Extension\Validator\ValidatorTypeGuesser;
use Symfony\Component\Form\Guess\Guess;
use Symfony\Component\Form\Guess\ValueGuess;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\NotNull;
use Symfony\Component\Validator\Constraints\Range;
use Symfony\Component\Validator\Constraints\True;
use Symfony\Component\Validator\Constraints\Type;
use Symfony\Component\Validator\Mapping\ClassMetadata;

/**
* @author franek <franek@chicour.net>
*/
* @author franek <franek@chicour.net>
* @author Bernhard Schussek <bschussek@gmail.com>
*/
class ValidatorTypeGuesserTest extends \PHPUnit_Framework_TestCase
{
private $typeGuesser;
const TEST_CLASS = 'Symfony\Component\Form\Tests\Extension\Validator\ValidatorTypeGuesserTest_TestClass';

const TEST_PROPERTY = 'property';

/**
* @var ValidatorTypeGuesser
*/
private $guesser;

/**
* @var ClassMetadata
*/
private $metadata;

/**
* @var \PHPUnit_Framework_MockObject_MockObject
*/
private $metadataFactory;

public function setUp()
protected function setUp()
{
if (!class_exists('Symfony\Component\Validator\Constraint')) {
$this->markTestSkipped('The "Validator" component is not available');
}

$metadataFactory = $this->getMock('Symfony\Component\Validator\MetadataFactoryInterface');
$this->metadata = new ClassMetadata(self::TEST_CLASS);
$this->metadataFactory = $this->getMock('Symfony\Component\Validator\MetadataFactoryInterface');
$this->metadataFactory->expects($this->any())
->method('getMetadataFor')
->with(self::TEST_CLASS)
->will($this->returnValue($this->metadata));
$this->guesser = new ValidatorTypeGuesser($this->metadataFactory);
}

public function guessRequiredProvider()
{
return array(
array(new NotNull(), new ValueGuess(true, Guess::HIGH_CONFIDENCE)),
array(new NotBlank(), new ValueGuess(true, Guess::HIGH_CONFIDENCE)),
array(new True(), new ValueGuess(true, Guess::HIGH_CONFIDENCE)),
array(new Length(10), new ValueGuess(false, Guess::LOW_CONFIDENCE)),
array(new Range(array('min' => 1, 'max' => 20)), new ValueGuess(false, Guess::LOW_CONFIDENCE)),
);
}

/**
* @dataProvider guessRequiredProvider
*/
public function testGuessRequired($constraint, $guess)
{
// add distracting constraint
$this->metadata->addPropertyConstraint(self::TEST_PROPERTY, new Email());

// add constraint under test
$this->metadata->addPropertyConstraint(self::TEST_PROPERTY, $constraint);

$this->typeGuesser = new ValidatorTypeGuesser($metadataFactory);
$this->assertEquals($guess, $this->guesser->guessRequired(self::TEST_CLASS, self::TEST_PROPERTY));
}

public function testGuessRequiredReturnsFalseForUnmappedProperties()
{
$this->assertEquals(new ValueGuess(false, Guess::LOW_CONFIDENCE), $this->guesser->guessRequired(self::TEST_CLASS, self::TEST_PROPERTY));
}

public function testGuessMaxLengthForConstraintWithMaxValue()
{
$constraint = new Length(array('max' => '2'));

$result = $this->typeGuesser->guessMaxLengthForConstraint($constraint);
$result = $this->guesser->guessMaxLengthForConstraint($constraint);
$this->assertInstanceOf('Symfony\Component\Form\Guess\ValueGuess', $result);
$this->assertEquals(2, $result->getValue());
$this->assertEquals(Guess::HIGH_CONFIDENCE, $result->getConfidence());
Expand All @@ -48,30 +107,35 @@ public function testGuessMaxLengthForConstraintWithMinValue()
{
$constraint = new Length(array('min' => '2'));

$result = $this->typeGuesser->guessMaxLengthForConstraint($constraint);
$result = $this->guesser->guessMaxLengthForConstraint($constraint);
$this->assertNull($result);
}

public function maxLengthTypeProvider()
{
return array (
array('double'),
array('float'),
array('numeric'),
array('real'),
);
}

/**
* @dataProvider dataProviderTestGuessMaxLengthForConstraintWithType
*/
* @dataProvider maxLengthTypeProvider
*/
public function testGuessMaxLengthForConstraintWithType($type)
{
$constraint = new Type($type);

$result = $this->typeGuesser->guessMaxLengthForConstraint($constraint);
$result = $this->guesser->guessMaxLengthForConstraint($constraint);
$this->assertInstanceOf('Symfony\Component\Form\Guess\ValueGuess', $result);
$this->assertEquals(null, $result->getValue());
$this->assertNull($result->getValue());
$this->assertEquals(Guess::MEDIUM_CONFIDENCE, $result->getConfidence());
}
}

public static function dataProviderTestGuessMaxLengthForConstraintWithType()
{
return array (
array('double'),
array('float'),
array('numeric'),
array('real'),
);
}
class ValidatorTypeGuesserTest_TestClass
{
private $property;
}
0