Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
setMetadataFactory example
use
Symfony\Component\Validator\Validation;
use
Symfony\Component\Validator\Validator\ValidatorInterface;
class
FormValidatorFunctionalTest
extends
TestCase
{
private
ValidatorInterface
$validator
;
private
FormFactoryInterface
$formFactory
;
protected
function
setUp
(
)
: void
{
$this
->validator = Validation::
createValidatorBuilder
(
)
->
setMetadataFactory
(
new
LazyLoadingMetadataFactory
(
new
StaticMethodLoader
(
)
)
)
->
getValidator
(
)
;
$this
->formFactory =
(
new
FormFactoryBuilder
(
)
)
->
addExtension
(
new
ValidatorExtension
(
$this
->validator
)
)
->
getFormFactory
(
)
;
}
public
function
testDataConstraintsInvalidateFormEvenIfFieldIsNotSubmitted
(
)
{
$form
=
$this
->formFactory->
create
(
FooType::
class
)
;
$form
->
submit
(
[
'baz' => 'foobar'
]
, false
)
;
]
,
'groups' => 'non_default_group',
]
)
, 'non_default_group'
)
;
$this
->
assertCount
(
1,
$violations
)
;
}
public
function
testContextIsPropagatedToNestedConstraints
(
)
{
$validator
= Validation::
createValidatorBuilder
(
)
->
setMetadataFactory
(
new
class
(
)
implements
MetadataFactoryInterface
{
public
function
getMetadataFor
(
$classOrObject
)
: MetadataInterface
{
return
(
new
ClassMetadata
(
ExpressionConstraintNested::
class
)
)
->
addPropertyConstraint
(
'foo',
new
AtLeastOneOf
(
[
new
NotNull
(
)
,
new
Expression
(
'this.getFoobar() in ["bar", "baz"]'
)
,
]
)
)
;
}
public
function
hasMetadataFor
(
$classOrObject
)
: bool
{
if
(
Form::
class
===
$classOrObject
||
$classOrObject
instanceof Form
)
{
return
$formMetadata
;
}
return
new
ClassMetadata
(
\
is_string
(
$classOrObject
)
?
$classOrObject
:
$classOrObject
::
class
)
;
}
)
;
$validator
= Validation::
createValidatorBuilder
(
)
->
setMetadataFactory
(
$metadataFactory
)
->
getValidator
(
)
;
$form
= Forms::
createFormFactoryBuilder
(
)
->
addExtension
(
new
ValidatorExtension
(
$validator
)
)
->
getFormFactory
(
)
->
create
(
FormTypeTest::TESTED_TYPE,
new
Author
(
)
,
[
'validation_groups' =>
new
GroupSequence
(
[
'First', 'Second'
]
)
]
)
->
add
(
'firstName', TextTypeTest::TESTED_TYPE
)
->
add
(
'lastName', TextTypeTest::TESTED_TYPE,
[
'constraints' =>
[
new
Length
(
[
'min' => 10, 'groups' =>
[
'First'
]
]
)
,
]
,
]
)
class
ValidatorExtensionTest
extends
TestCase
{
public
function
test2Dot5ValidationApi
(
)
{
$metadata
=
new
ClassMetadata
(
Form::
class
)
;
$metadataFactory
=
new
FakeMetadataFactory
(
)
;
$metadataFactory
->
addMetadata
(
$metadata
)
;
$validator
= Validation::
createValidatorBuilder
(
)
->
setMetadataFactory
(
$metadataFactory
)
->
getValidator
(
)
;
$extension
=
new
ValidatorExtension
(
$validator
, false
)
;
$this
->
assertInstanceOf
(
ValidatorTypeGuesser::
class
,
$extension
->
loadTypeGuesser
(
)
)
;
$this
->
assertCount
(
1,
$metadata
->
getConstraints
(
)
)
;
$this
->
assertInstanceOf
(
FormConstraint::
class
,
$metadata
->
getConstraints
(
)
[
0
]
)
;
$this
->
assertSame
(
CascadingStrategy::NONE,
$metadata
->cascadingStrategy
)
;
$this
->
assertSame
(
TraversalStrategy::NONE,
$metadata
->traversalStrategy
)
;