Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b0dab62

Browse files
committed
[Form] Hardened test suite for empty data
1 parent 46e3745 commit b0dab62

19 files changed

+241
-4
lines changed

src/Symfony/Bridge/Doctrine/Tests/Form/Type/EntityTypeTest.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1543,4 +1543,43 @@ public function testSetDataNonEmptyArraySubmitNullMultiple()
15431543
$this->assertEquals(array(), $form->getNormData());
15441544
$this->assertSame(array(), $form->getViewData(), 'View data is always an array');
15451545
}
1546+
1547+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = null)
1548+
{
1549+
$emptyData = '1';
1550+
$entity1 = new SingleIntIdEntity(1, 'Foo');
1551+
$this->persist(array($entity1));
1552+
1553+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
1554+
'em' => 'default',
1555+
'class' => self::SINGLE_IDENT_CLASS,
1556+
'empty_data' => $emptyData,
1557+
));
1558+
$form->submit(null);
1559+
1560+
$this->assertSame($emptyData, $form->getViewData());
1561+
$this->assertSame($entity1, $form->getNormData());
1562+
$this->assertSame($entity1, $form->getData());
1563+
}
1564+
1565+
public function testSubmitNullMultipleUsesDefaultEmptyData()
1566+
{
1567+
$emptyData = array('1');
1568+
$entity1 = new SingleIntIdEntity(1, 'Foo');
1569+
$this->persist(array($entity1));
1570+
1571+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
1572+
'em' => 'default',
1573+
'class' => self::SINGLE_IDENT_CLASS,
1574+
'multiple' => true,
1575+
'empty_data' => $emptyData,
1576+
));
1577+
$form->submit(null);
1578+
1579+
$collection = new ArrayCollection(array($entity1));
1580+
1581+
$this->assertSame($emptyData, $form->getViewData());
1582+
$this->assertEquals($collection, $form->getNormData());
1583+
$this->assertEquals($collection, $form->getData());
1584+
}
15461585
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/BaseTypeTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,28 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
145145
$this->assertSame($view, $form->getViewData());
146146
}
147147

148+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = null)
149+
{
150+
$builder = $this->factory->createBuilder($this->getTestedType());
151+
152+
if ($builder->getCompound()) {
153+
$emptyData = array();
154+
foreach ($builder as $field) {
155+
// empty children should map null (model data) in the compound view data
156+
$emptyData[$field->getName()] = null;
157+
}
158+
} else {
159+
// simple fields share the view and the model format, unless they use a transformer
160+
$expectedData = $emptyData;
161+
}
162+
163+
$form = $builder->setEmptyData($emptyData)->getForm()->submit(null);
164+
165+
$this->assertSame($emptyData, $form->getViewData());
166+
$this->assertSame($expectedData, $form->getNormData());
167+
$this->assertSame($expectedData, $form->getData());
168+
}
169+
148170
protected function getTestedType()
149171
{
150172
return static::TESTED_TYPE;

src/Symfony/Component/Form/Tests/Extension/Core/Type/ButtonTypeTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,16 @@ public function testCreateButtonInstances()
3232
{
3333
$this->assertInstanceOf('Symfony\Component\Form\Button', $this->factory->create(static::TESTED_TYPE));
3434
}
35+
36+
/**
37+
* @expectedException \Symfony\Component\Form\Exception\BadMethodCallException
38+
* @expectedExceptionMessage Buttons do not support empty data.
39+
*
40+
* @param string $emptyData
41+
* @param null $expectedData
42+
*/
43+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = null)
44+
{
45+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
46+
}
3547
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/CheckboxTypeTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,17 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
187187
{
188188
parent::testSubmitNull(false, false, null);
189189
}
190+
191+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = true)
192+
{
193+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
194+
'empty_data' => $emptyData,
195+
));
196+
$form->submit(null);
197+
198+
// view data is transformed to the string true value
199+
$this->assertSame('1', $form->getViewData());
200+
$this->assertSame($expectedData, $form->getNormData());
201+
$this->assertSame($expectedData, $form->getData());
202+
}
190203
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/ChoiceTypeTest.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -684,19 +684,20 @@ public function testSubmitSingleNonExpandedObjectChoices()
684684
$this->assertTrue($form->isSynchronized());
685685
}
686686

687-
public function testSubmitSingleChoiceWithEmptyData()
687+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = null)
688688
{
689689
$form = $this->factory->create(static::TESTED_TYPE, null, array(
690690
'multiple' => false,
691691
'expanded' => false,
692-
'choices' => array('test'),
692+
// empty data must match string choice value
693+
'choices' => array($emptyData),
693694
'choices_as_values' => true,
694-
'empty_data' => 'test',
695+
'empty_data' => $emptyData,
695696
));
696697

697698
$form->submit(null);
698699

699-
$this->assertSame('test', $form->getData());
700+
$this->assertSame($emptyData, $form->getData());
700701
}
701702

702703
public function testSubmitSingleChoiceWithEmptyDataAndInitialData()

src/Symfony/Component/Form/Tests/Extension/Core/Type/CollectionTypeTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,4 +410,10 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
410410
{
411411
parent::testSubmitNull(array(), array(), array());
412412
}
413+
414+
public function testSubmitNullUsesDefaultEmptyData($emptyData = array(), $expectedData = array())
415+
{
416+
// resize form listener always set an empty array
417+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
418+
}
413419
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/CountryTypeTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,9 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
6666
{
6767
parent::testSubmitNull($expected, $norm, '');
6868
}
69+
70+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'FR', $expectedData = 'FR')
71+
{
72+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
73+
}
6974
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/CurrencyTypeTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,9 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
4949
{
5050
parent::testSubmitNull($expected, $norm, '');
5151
}
52+
53+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'EUR', $expectedData = 'EUR')
54+
{
55+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
56+
}
5257
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,4 +615,20 @@ public function testSubmitNullWithSingleText()
615615
$this->assertNull($form->getNormData());
616616
$this->assertSame('', $form->getViewData());
617617
}
618+
619+
public function testSubmitNullUsesDefaultEmptyData($emptyData = array(), $expectedData = null)
620+
{
621+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
622+
'empty_data' => $emptyData,
623+
));
624+
$form->submit(null);
625+
626+
// view transformer writes back empty strings in the view data
627+
$this->assertSame(
628+
array('date' => array('year' => '', 'month' => '', 'day' => ''), 'time' => array('hour' => '', 'minute' => '')),
629+
$form->getViewData()
630+
);
631+
$this->assertSame($expectedData, $form->getNormData());
632+
$this->assertSame($expectedData, $form->getData());
633+
}
618634
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,4 +1003,33 @@ public function testSubmitNullWithSingleText()
10031003
$this->assertNull($form->getNormData());
10041004
$this->assertSame('', $form->getViewData());
10051005
}
1006+
1007+
public function testSubmitNullUsesDefaultEmptyData($emptyData = array(), $expectedData = null)
1008+
{
1009+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
1010+
'empty_data' => $emptyData,
1011+
));
1012+
$form->submit(null);
1013+
1014+
// view transformer write back empty strings in the view data
1015+
$this->assertSame(array('year' => '', 'month' => '', 'day' => ''), $form->getViewData());
1016+
$this->assertSame($expectedData, $form->getNormData());
1017+
$this->assertSame($expectedData, $form->getData());
1018+
}
1019+
1020+
public function testSingleTextSubmitNullUsesDefaultEmptyData()
1021+
{
1022+
$emptyData = '2018-11-11';
1023+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
1024+
'widget' => 'single_text',
1025+
'empty_data' => $emptyData,
1026+
));
1027+
$form->submit(null);
1028+
1029+
$date = new \DateTime($emptyData);
1030+
1031+
$this->assertSame($emptyData, $form->getViewData());
1032+
$this->assertEquals($date, $form->getNormData());
1033+
$this->assertEquals($date, $form->getData());
1034+
}
10061035
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/FormTypeTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,11 @@ public function testDataClassMustBeValidClassOrInterface()
227227
));
228228
}
229229

230+
public function testSubmitNullUsesDefaultEmptyData($emptyData = array(), $expectedData = array())
231+
{
232+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
233+
}
234+
230235
public function testSubmitWithEmptyDataCreatesObjectIfClassAvailable()
231236
{
232237
$form = $this->factory->createBuilder(static::TESTED_TYPE, null, array(

src/Symfony/Component/Form/Tests/Extension/Core/Type/IntegerTypeTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,16 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
4848
{
4949
parent::testSubmitNull($expected, $norm, '');
5050
}
51+
52+
public function testSubmitNullUsesDefaultEmptyData($emptyData = '10', $expectedData = 10)
53+
{
54+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
55+
'empty_data' => $emptyData,
56+
));
57+
$form->submit(null);
58+
59+
$this->assertSame($emptyData, $form->getViewData());
60+
$this->assertSame($expectedData, $form->getNormData());
61+
$this->assertSame($expectedData, $form->getData());
62+
}
5163
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/LanguageTypeTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,9 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
5959
{
6060
parent::testSubmitNull($expected, $norm, '');
6161
}
62+
63+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'en', $expectedData = 'en')
64+
{
65+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
66+
}
6267
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/LocaleTypeTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,9 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
4949
{
5050
parent::testSubmitNull($expected, $norm, '');
5151
}
52+
53+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'en', $expectedData = 'en')
54+
{
55+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
56+
}
5257
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/MoneyTypeTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,16 @@ public function testMoneyPatternWithoutCurrency()
8080

8181
$this->assertSame('{{ widget }}', $view->vars['money_pattern']);
8282
}
83+
84+
public function testSubmitNullUsesDefaultEmptyData($emptyData = '10.00', $expectedData = 10.0)
85+
{
86+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
87+
'empty_data' => $emptyData,
88+
));
89+
$form->submit(null);
90+
91+
$this->assertSame($emptyData, $form->getViewData());
92+
$this->assertSame($expectedData, $form->getNormData());
93+
$this->assertSame($expectedData, $form->getData());
94+
}
8395
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/NumberTypeTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,16 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
7373
{
7474
parent::testSubmitNull($expected, $norm, '');
7575
}
76+
77+
public function testSubmitNullUsesDefaultEmptyData($emptyData = '10', $expectedData = 10.0)
78+
{
79+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
80+
'empty_data' => $emptyData,
81+
));
82+
$form->submit(null);
83+
84+
$this->assertSame($emptyData, $form->getViewData());
85+
$this->assertSame($expectedData, $form->getNormData());
86+
$this->assertSame($expectedData, $form->getData());
87+
}
7688
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -797,4 +797,17 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
797797

798798
parent::testSubmitNull($expected, $norm, $view);
799799
}
800+
801+
public function testSubmitNullUsesDefaultEmptyData($emptyData = array(), $expectedData = null)
802+
{
803+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
804+
'empty_data' => $emptyData,
805+
));
806+
$form->submit(null);
807+
808+
// view transformer write back empty strings in the view data
809+
$this->assertSame(array('hour' => '', 'minute' => ''), $form->getViewData());
810+
$this->assertSame($expectedData, $form->getNormData());
811+
$this->assertSame($expectedData, $form->getData());
812+
}
800813
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/TimezoneTypeTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,16 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
4343
{
4444
parent::testSubmitNull($expected, $norm, '');
4545
}
46+
47+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'Africa/Kinshasa', $expectedData = 'Africa/Kinshasa')
48+
{
49+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
50+
'empty_data' => $emptyData,
51+
));
52+
$form->submit(null);
53+
54+
$this->assertSame($emptyData, $form->getViewData());
55+
$this->assertSame($expectedData, $form->getNormData());
56+
$this->assertSame($expectedData, $form->getData());
57+
}
4658
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/UrlTypeTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,4 +100,17 @@ public function testSubmitWithNonStringDataDoesNotBreakTheFixUrlProtocolListener
100100

101101
$this->assertSame(array('domain.com', 'www.domain.com'), $form->getData());
102102
}
103+
104+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = 'http://empty')
105+
{
106+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
107+
'empty_data' => $emptyData,
108+
));
109+
$form->submit(null);
110+
111+
// listener normalizes data on submit
112+
$this->assertSame($expectedData, $form->getViewData());
113+
$this->assertSame($expectedData, $form->getNormData());
114+
$this->assertSame($expectedData, $form->getData());
115+
}
103116
}

0 commit comments

Comments
 (0)