Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
setCompound example
use
Symfony\Component\Form\FormInterface;
class
ResizeFormListenerTest
extends
TestCase
{
private
FormFactoryInterface
$factory
;
private
FormInterface
$form
;
protected
function
setUp
(
)
: void
{
$this
->factory =
(
new
FormFactoryBuilder
(
)
)
->
getFormFactory
(
)
;
$this
->form =
$this
->
getBuilder
(
)
->
setCompound
(
true
)
->
setDataMapper
(
new
DataMapper
(
)
)
->
getForm
(
)
;
}
protected
function
getBuilder
(
$name
= 'name'
)
{
return
new
FormBuilder
(
$name
, null,
new
EventDispatcher
(
)
,
$this
->factory
)
;
}
protected
function
getForm
(
$name
= 'name'
)
{
$this
->form->
get
(
'lastName'
)
->
addError
(
new
FormError
(
'Invalid'
)
)
;
$this
->
assertFalse
(
$this
->form->
isValid
(
)
)
;
}
public
function
testDisabledFormsValidEvenIfChildrenInvalid
(
)
{
$form
=
$this
->
getBuilder
(
'person'
)
->
setDisabled
(
true
)
->
setCompound
(
true
)
->
setDataMapper
(
new
DataMapper
(
)
)
->
add
(
$this
->
getBuilder
(
'name'
)
)
->
getForm
(
)
;
$form
->
submit
(
[
'name' => 'Jacques Doe'
]
)
;
$form
->
get
(
'name'
)
->
addError
(
new
FormError
(
'Invalid'
)
)
;
$this
->
assertTrue
(
$form
->
isValid
(
)
)
;
}
$this
->params =
[
'foo' => 'bar'
]
;
}
protected
function
getForm
(
$name
= 'name',
$propertyPath
= null,
$dataClass
= null,
$errorMapping
=
[
]
,
$inheritData
= false,
$synchronized
= true, array
$options
=
[
]
)
{
$config
=
new
FormConfigBuilder
(
$name
,
$dataClass
,
$this
->dispatcher,
[
'error_mapping' =>
$errorMapping
,
]
+
$options
)
;
$config
->
setMapped
(
$options
[
'mapped'
]
?? true
)
;
$config
->
setInheritData
(
$inheritData
)
;
$config
->
setPropertyPath
(
$propertyPath
)
;
$config
->
setCompound
(
true
)
;
$config
->
setDataMapper
(
new
DataMapper
(
)
)
;
$config
->
setErrorBubbling
(
$options
[
'error_bubbling'
]
?? false
)
;
if
(
!
$synchronized
)
{
$config
->
addViewTransformer
(
new
CallbackTransformer
(
static
fn
(
$normData
)
=>
$normData
,
static
fn
(
)
=>
throw
new
TransformationFailedException
(
)
)
)
;
}
return
new
Form
(
$config
)
;
}
$isDataOptionSet
= \
array_key_exists
(
'data',
$options
)
;
$builder
->
setRequired
(
$options
[
'required'
]
)
->
setErrorBubbling
(
$options
[
'error_bubbling'
]
)
->
setEmptyData
(
$options
[
'empty_data'
]
)
->
setPropertyPath
(
$options
[
'property_path'
]
)
->
setMapped
(
$options
[
'mapped'
]
)
->
setByReference
(
$options
[
'by_reference'
]
)
->
setInheritData
(
$options
[
'inherit_data'
]
)
->
setCompound
(
$options
[
'compound'
]
)
->
setData
(
$isDataOptionSet
?
$options
[
'data'
]
: null
)
->
setDataLocked
(
$isDataOptionSet
)
->
setDataMapper
(
$options
[
'compound'
]
?
$this
->dataMapper : null
)
->
setMethod
(
$options
[
'method'
]
)
->
setAction
(
$options
[
'action'
]
)
;
if
(
$options
[
'trim'
]
)
{
$builder
->
addEventSubscriber
(
new
TrimListener
(
)
)
;
}
$builder
->
setIsEmptyCallback
(
$options
[
'is_empty_callback'
]
)
;
}
$this
->validator = Validation::
createValidator
(
)
;
$this
->listener =
new
ValidationListener
(
$this
->validator,
new
ViolationMapper
(
)
)
;
$this
->message = 'Message';
$this
->messageTemplate = 'Message template';
$this
->params =
[
'foo' => 'bar'
]
;
}
private
function
createForm
(
$name
= '',
$compound
= false
)
{
$config
=
new
FormBuilder
(
$name
, null,
new
EventDispatcher
(
)
,
(
new
FormFactoryBuilder
(
)
)
->
getFormFactory
(
)
)
;
$config
->
setCompound
(
$compound
)
;
if
(
$compound
)
{
$config
->
setDataMapper
(
new
DataMapper
(
)
)
;
}
return
new
Form
(
$config
)
;
}
// More specific mapping tests can be found in ViolationMapperTest
public
function
testMapViolation
(
)
{
'resolved_options' =>
[
'a' => 'bar',
'b' => 'foo',
'c' => 'baz',
]
,
]
,
$this
->dataExtractor->
extractConfiguration
(
$form
)
)
;
}
public
function
testExtractConfigurationBuildsIdRecursively
(
)
{
$grandParent
=
$this
->
createBuilder
(
'grandParent'
)
->
setCompound
(
true
)
->
setDataMapper
(
new
DataMapper
(
)
)
->
getForm
(
)
;
$parent
=
$this
->
createBuilder
(
'parent'
)
->
setCompound
(
true
)
->
setDataMapper
(
new
DataMapper
(
)
)
->
getForm
(
)
;
$form
=
$this
->
createBuilder
(
'name'
)
->
setType
(
new
ResolvedFormType
(
new
HiddenType
(
)
)
)
->
getForm
(
)
;
$grandParent
->
add
(
$parent
)
;
if
(
null !==
$method
)
{
$config
->
setMethod
(
$method
)
;
}
return
new
Form
(
$config
)
;
}
protected
function
createBuilder
(
$name
,
$compound
= false, array
$options
=
[
]
)
{
$builder
=
new
FormBuilder
(
$name
, null,
new
EventDispatcher
(
)
,
new
FormFactory
(
new
FormRegistry
(
[
]
,
new
ResolvedFormTypeFactory
(
)
)
)
,
$options
)
;
$builder
->
setCompound
(
$compound
)
;
if
(
$compound
)
{
$builder
->
setDataMapper
(
new
DataMapper
(
)
)
;
}
return
$builder
;
}
}
$form
=
$this
->
getBuilder
(
''
)
->
getForm
(
)
;
$form
->
setParent
(
null
)
;
$this
->
assertNull
(
$form
->
getParent
(
)
)
;
}
public
function
testFormCannotHaveEmptyNameNotInRootLevel
(
)
{
$this
->
expectException
(
LogicException::
class
)
;
$this
->
expectExceptionMessage
(
'A form with an empty name cannot have a parent form.'
)
;
$this
->
getBuilder
(
)
->
setCompound
(
true
)
->
setDataMapper
(
new
DataMapper
(
)
)
->
add
(
$this
->
getBuilder
(
''
)
)
->
getForm
(
)
;
}
public
function
testGetPropertyPathReturnsConfiguredPath
(
)
{
$form
=
$this
->
getBuilder
(
)
->
setPropertyPath
(
'address.street'
)
->
getForm
(
)
;
$this
->
assertEquals
(
new
PropertyPath
(
'address.street'
)
,
$form
->
getPropertyPath
(
)
)
;
}
$this
->
assertTrue
(
$form
->
isRequired
(
)
)
;
}
public
function
testSubmittedDataIsTrimmedBeforeTransforming
(
)
{
$form
=
$this
->factory->
createBuilder
(
static
::TESTED_TYPE
)
->
addViewTransformer
(
new
FixedDataTransformer
(
[
'' => '',
'reverse[a]' => 'a',
]
)
)
->
setCompound
(
false
)
->
getForm
(
)
;
$form
->
submit
(
' a '
)
;
$this
->
assertEquals
(
'a',
$form
->
getViewData
(
)
)
;
$this
->
assertEquals
(
'reverse[a]',
$form
->
getData
(
)
)
;
}
public
function
testSubmittedDataIsNotTrimmedBeforeTransformingIfNoTrimming
(
)
{
$form
=
$this
->factory->
createBuilder
(
static
::TESTED_TYPE, null,
[
'trim' => false
]
)
$this
->validator->
validate
(
$form
,
new
Form
(
)
)
;
$this
->
assertNoViolation
(
)
;
}
public
function
testValidateChildIfValidConstraint
(
)
{
$object
=
new
\
stdClass
(
)
;
$parent
=
$this
->
getBuilder
(
'parent'
)
->
setCompound
(
true
)
->
setDataMapper
(
new
DataMapper
(
)
)
->
getForm
(
)
;
$options
=
[
'validation_groups' =>
[
'group1', 'group2'
]
,
'constraints' =>
[
new
Valid
(
)
]
,
]
;
$form
=
$this
->
getCompoundForm
(
$object
,
$options
)
;
$parent
->
add
(
$form
)
;
$parent
->
submit
(
[
]
)
;
$this
->
expectValidateAt
(
0, 'data',
$object
,
[
'group1', 'group2'
]
)
;