Skip to content

Commit

Permalink
[Validator] Fix LazyLoadingMetadataFactory with PSR6Cache for non cla…
Browse files Browse the repository at this point in the history
…ssname if tested values isn't an existing class
  • Loading branch information
Pascal Montoya authored and Pascal Montoya committed Apr 9, 2018
1 parent 16edba5 commit cd91420
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
Expand Up @@ -90,17 +90,17 @@ public function getMetadataFor($value)
return $this->loadedClasses[$class];
}

if (!class_exists($class) && !interface_exists($class)) {
throw new NoSuchMetadataException(sprintf('The class or interface "%s" does not exist.', $class));
}

if (null !== $this->cache && false !== ($metadata = $this->cache->read($class))) {
// Include constraints from the parent class
$this->mergeConstraints($metadata);

return $this->loadedClasses[$class] = $metadata;
}

if (!class_exists($class) && !interface_exists($class)) {
throw new NoSuchMetadataException(sprintf('The class or interface "%s" does not exist.', $class));
}

$metadata = new ClassMetadata($class);

if (null !== $this->loader) {
Expand Down
Expand Up @@ -149,6 +149,21 @@ public function testReadMetadataFromCache()
$this->assertEquals($metadata, $factory->getMetadataFor(self::PARENT_CLASS));
}

/**
* @expectedException \Symfony\Component\Validator\Exception\NoSuchMetadataException
*/
public function testNonClassNameStringValues()
{
$testedValue = 'error@example.com';
$loader = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Loader\LoaderInterface')->getMock();
$cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock();
$factory = new LazyLoadingMetadataFactory($loader, $cache);
$cache
->expects($this->never())
->method('read');
$factory->getMetadataFor($testedValue);
}

public function testMetadataCacheWithRuntimeConstraint()
{
$cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock();
Expand Down

0 comments on commit cd91420

Please sign in to comment.