Skip to content

Commit

Permalink
Merge pull request #25 from WouterJ/fix-sf3
Browse files Browse the repository at this point in the history
Also fix KeyValueRowType
  • Loading branch information
Burgov committed May 31, 2016
2 parents 2810ccb + 07f3133 commit c6ad5dc
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 27 deletions.
5 changes: 4 additions & 1 deletion Form/Type/KeyValueRowType.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,11 @@ public function setDefaultOptions(OptionsResolverInterface $resolver)

public function configureOptions(OptionsResolver $resolver)
{
// check if Form component version 2.8+ is used
$isSf28 = method_exists('Symfony\Component\Form\AbstractType', 'getBlockPrefix');

$resolver->setDefaults(array(
'key_type' => 'text',
'key_type' => $isSf28 ? 'Symfony\Component\Form\Extension\Core\Type\TextType' : 'text',
'key_options' => array(),
'value_options' => array(),
'allowed_keys' => null
Expand Down
5 changes: 2 additions & 3 deletions Form/Type/KeyValueType.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

use Burgov\Bundle\KeyValueFormBundle\Form\DataTransformer\HashToKeyValueArrayTransformer;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
Expand Down Expand Up @@ -49,10 +48,10 @@ public function configureOptions(OptionsResolver $resolver)
$isSf28 = method_exists('Symfony\Component\Form\AbstractType', 'getBlockPrefix');

$resolver->setDefaults(array(
$isSf28 ? 'entry_type' : 'type' => $isSf28 ? KeyValueRowType::class : 'burgov_key_value_row',
$isSf28 ? 'entry_type' : 'type' => $isSf28 ? __NAMESPACE__.'\KeyValueRowType' : 'burgov_key_value_row',
'allow_add' => true,
'allow_delete' => true,
'key_type' => $isSf28 ? TextType::class : 'text',
'key_type' => $isSf28 ? 'Symfony\Component\Form\Extension\Core\Type\TextType' : 'text',
'key_options' => array(),
'value_options' => array(),
'allowed_keys' => null,
Expand Down
85 changes: 62 additions & 23 deletions Tests/Form/Type/KeyValueTypeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,36 @@
use Burgov\Bundle\KeyValueFormBundle\Form\Type\KeyValueType;
use Symfony\Component\Form\AbstractExtension;
use Symfony\Component\Form\Extension\Core\ChoiceList\ObjectChoiceList;
use Symfony\Component\Form\ChoiceList\ArrayChoiceList;
use Symfony\Component\Form\Test\TypeTestCase;

class KeyValueTypeTest extends TypeTestCase
{
private static $isSf28;
private static $typeNames = array();

public function setUp()
{
parent::setUp();

if (null === self::$isSf28) {
self::$isSf28 = method_exists('Symfony\Component\Form\AbstractType', 'getBlockPrefix');
if (self::$isSf28) {
self::$typeNames = array(
'choice' => 'Symfony\Component\Form\Extension\Core\Type\ChoiceType',
'text' => 'Symfony\Component\Form\Extension\Core\Type\TextType',
'burgov_key_value' => 'Burgov\Bundle\KeyValueFormBundle\Form\Type\KeyValueType',
);
} else {
self::$typeNames = array(
'choice' => 'choice',
'text' => 'text',
'burgov_key_value' => 'burgov_key_value',
);
}
}
}

public function getExtensions()
{
return array(new ConcreteExtension());
Expand Down Expand Up @@ -43,20 +69,23 @@ public function testSubmitValidData()
'key3' => '1',
);

$builder = $this->factory->createBuilder('burgov_key_value', $originalData, array(
'value_type' => 'text',
'key_options' => array('label' => 'label_key'),
'value_options' => array('label' => 'label_value')));

$form = $builder->getForm();
$form = $this->factory->create(
self::$typeNames['burgov_key_value'],
$originalData,
array(
'value_type' => self::$typeNames['text'],
'key_options' => array('label' => 'label_key'),
'value_options' => array('label' => 'label_value')
)
);

$this->assertFormTypes(array('text', 'text'), array('text', 'text'), $form);
$this->assertFormTypes(array(self::$typeNames['text'], self::$typeNames['text']), array(self::$typeNames['text'], self::$typeNames['text']), $form);
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);

$form->submit($submitData);
$this->assertTrue($form->isValid(), $form->getErrorsAsString());
$this->assertTrue($form->isValid(), $form->getErrors());

$this->assertFormTypes(array('text', 'text', 'text'), array('text', 'text', 'text'), $form);
$this->assertFormTypes(array(self::$typeNames['text'], self::$typeNames['text'], self::$typeNames['text']), array(self::$typeNames['text'], self::$typeNames['text'], self::$typeNames['text']), $form);
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);

$this->assertSame($expectedData, $form->getData());
Expand All @@ -72,15 +101,26 @@ public function testWithChoiceType()
$obj2->id = 2;
$obj2->name = 'choice2';

$builder = $this->factory->createBuilder('burgov_key_value', null, array(
'value_type' => 'choice',
'key_options' => array('label' => 'label_key'),
'value_options' => array(
'choice_list' => new ObjectChoiceList(array($obj1, $obj2), 'name', array(), null, 'id'),
'label' => 'label_value'
)));
$valueOptions = array('label' => 'label_value');
if (self::$isSf28) {
// Symfony 2.8+
$valueOptions['choices'] = array($obj1, $obj2);
$valueOptions['choice_name'] = 'id';
$valueOptions['choice_value'] = 'name';
} else {
// Symfony <2.8
$valueOptions['choice_list'] = new ObjectChoiceList(array($obj1, $obj2), 'name', array(), null, 'id');
}

$form = $builder->getForm();
$form = $this->factory->create(
self::$typeNames['burgov_key_value'],
null,
array(
'value_type' => self::$typeNames['choice'],
'key_options' => array('label' => 'label_key'),
'value_options' => $valueOptions,
)
);

$this->assertFormTypes(array(), array(), $form);
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);
Expand All @@ -96,7 +136,7 @@ public function testWithChoiceType()
)
));

$this->assertFormTypes(array('text', 'text'), array('choice', 'choice'), $form);
$this->assertFormTypes(array(self::$typeNames['text'], self::$typeNames['text']), array(self::$typeNames['choice'], self::$typeNames['choice']), $form);
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);

$this->assertTrue($form->isValid());
Expand All @@ -106,14 +146,12 @@ public function testWithChoiceType()

public function testWithCustomKeyType()
{
$builder = $this->factory->createBuilder('burgov_key_value', null, array(
$form = $this->factory->create(self::$typeNames['burgov_key_value'], null, array(
'key_type' => 'country',
'value_type' => 'integer',
'key_options' => array('label' => 'label_key'),
));

$form = $builder->getForm();

$this->assertFormTypes(array(), array(), $form);
$this->assertFormOptions(array(array('label' => 'label_key'), array()), $form);

Expand Down Expand Up @@ -141,10 +179,11 @@ private function assertFormTypes(array $keys, array $values, $form)
$this->assertCount(count($values), $form);
for ($i = 0; $i < count($form); $i++) {
if (isset($keys[$i])) {
$this->assertEquals($keys[$i], $form->get($i)->get('key')->getConfig()->getType()->getInnerType()->getName());

$this->assertInstanceOf($keys[$i], $form->get($i)->get('key')->getConfig()->getType()->getInnerType());
}
if (isset($values[$i])) {
$this->assertEquals($values[$i], $form->get($i)->get('value')->getConfig()->getType()->getInnerType()->getName());
$this->assertInstanceOf($values[$i], $form->get($i)->get('value')->getConfig()->getType()->getInnerType());
}
}
}
Expand Down

0 comments on commit c6ad5dc

Please sign in to comment.