|
2 | 2 |
|
3 | 3 | namespace Codete\FormGeneratorBundle\Tests; |
4 | 4 |
|
| 5 | +use Codete\FormGeneratorBundle\FieldTypeMapper; |
| 6 | +use Codete\FormGeneratorBundle\Form\Type\EmbedType; |
| 7 | +use Codete\FormGeneratorBundle\Tests\FormConfigurationModifier\InactivePersonModifier; |
| 8 | +use Codete\FormGeneratorBundle\Tests\FormConfigurationModifier\NoPhotoPersonModifier; |
| 9 | +use Codete\FormGeneratorBundle\Tests\Model\Person; |
| 10 | +use Codete\FormGeneratorBundle\Tests\Model\SimpleParent; |
| 11 | +use Symfony\Component\Form\PreloadedExtension; |
| 12 | + |
5 | 13 | class FormGeneratorTest extends BaseTest |
6 | 14 | { |
| 15 | + /** |
| 16 | + * @var PreloadedExtension |
| 17 | + */ |
| 18 | + protected $embedTypeExtension; |
| 19 | + |
| 20 | + public function setUp() |
| 21 | + { |
| 22 | + parent::setUp(); |
| 23 | + |
| 24 | + $embedType = new EmbedType($this->formGenerator); |
| 25 | + |
| 26 | + $this->embedTypeExtension = new PreloadedExtension([ |
| 27 | + $embedType->getBlockPrefix() => $embedType, |
| 28 | + ], []); |
| 29 | + } |
| 30 | + |
7 | 31 | /** |
8 | 32 | * @dataProvider provideDefaultForm |
9 | 33 | */ |
@@ -172,4 +196,38 @@ protected function checkForm($model, $expectedFields, callable $additionalCheck |
172 | 196 | $additionalCheck($this, $form); |
173 | 197 | } |
174 | 198 | } |
| 199 | + |
| 200 | + public function testEmbedForms() |
| 201 | + { |
| 202 | + $sp = new SimpleParent(); |
| 203 | + |
| 204 | + $sp->employee = new Person(); |
| 205 | + $sp->named = new Person(); |
| 206 | + |
| 207 | + $sp->employee->salary = 1390.86; |
| 208 | + $sp->named->active = false; |
| 209 | + |
| 210 | + $sp->person = new Person('Bar', 'Baz'); |
| 211 | + |
| 212 | + $fb = $this->formFactoryBuilder |
| 213 | + ->addExtension($this->embedTypeExtension) |
| 214 | + ->getFormFactory() |
| 215 | + ->createBuilder(FieldTypeMapper::map('form'), $sp); |
| 216 | + |
| 217 | + $this->formGenerator->addFormConfigurationModifier(new NoPhotoPersonModifier()); |
| 218 | + $this->formGenerator->addFormConfigurationModifier(new InactivePersonModifier()); |
| 219 | + |
| 220 | + $this->formGenerator->populateFormBuilder($fb, $sp); |
| 221 | + $form = $fb->getForm(); |
| 222 | + $this->assertEquals(count(['person', 'noName', 'anonymous', 'employee']), count($form)); |
| 223 | + $this->assertEquals(count(['title', 'name', 'surname', 'photo', 'active', 'salary']), $form->get('person')->count()); |
| 224 | + $this->assertEquals(count(['title', 'name', 'surname', 'photo', 'active']), $form->get('named')->count()); |
| 225 | + $this->assertEquals(count(['title', 'name', 'surname', 'active', 'salary']), $form->get('anonymous')->count()); |
| 226 | + $this->assertEquals(count(['salary']), $form->get('employee')->count()); |
| 227 | + $this->assertEquals(1390.86, $form->get('employee')->get('salary')->getData()); |
| 228 | + $this->assertNull($form->get('anonymous')->get('name')->getData()); |
| 229 | + $this->assertEquals('Foo', $form->get('named')->get('name')->getData()); |
| 230 | + $this->assertEquals('Bar', $form->get('person')->get('name')->getData()); |
| 231 | + $this->assertEquals('Baz', $form->get('person')->get('surname')->getData()); |
| 232 | + } |
175 | 233 | } |
0 commit comments