|
13 | 13 |
|
14 | 14 | use Spiriit\Bundle\FormFilterBundle\Filter\Condition\ConditionBuilderInterface; |
15 | 15 | use Spiriit\Bundle\FormFilterBundle\Tests\Fixtures\Entity\Item; |
| 16 | +use Spiriit\Bundle\FormFilterBundle\Tests\Fixtures\Entity\Options; |
| 17 | +use Spiriit\Bundle\FormFilterBundle\Tests\Fixtures\Filter\InheritDataFilterType; |
16 | 18 | use Spiriit\Bundle\FormFilterBundle\Tests\Fixtures\Filter\ItemEmbeddedOptionsFilterType; |
17 | 19 |
|
18 | 20 | /** |
@@ -177,10 +179,34 @@ public function testWithDataClass() |
177 | 179 | $this->assertEquals(['p_opt_rank' => 6], $this->getQueryBuilderParameters($doctrineQueryBuilder)); |
178 | 180 | } |
179 | 181 |
|
180 | | - protected function createDoctrineQueryBuilder() |
| 182 | + public function testWithInheritDataFormOption() |
181 | 183 | { |
| 184 | + // doctrine query builder without any joins + a data_class |
| 185 | + $form = $this->formFactory->create(InheritDataFilterType::class, null, ['data_class' => Options::class]); |
| 186 | + $filterQueryBuilder = $this->initQueryBuilderUpdater(); |
| 187 | + |
| 188 | + $doctrineQueryBuilder = $this->createDoctrineQueryBuilder(Options::class, 'o'); |
| 189 | + |
| 190 | + $form->submit(['option' => ['label' => 'dude', 'rank' => 1], 'item' => ['name' => 'blabla', 'position' => 2, 'enabled' => 'y']]); |
| 191 | + |
| 192 | + $expectedDql = 'SELECT o FROM Spiriit\Bundle\FormFilterBundle\Tests\Fixtures\Entity\Options o LEFT JOIN o.item item'; |
| 193 | + $expectedDql .= ' WHERE o.label LIKE \'dude\' AND o.rank = :p_o_rank AND (item.name LIKE \'blabla\' AND item.position > :p_item_position AND item.enabled = :p_item_enabled)'; |
| 194 | + $filterQueryBuilder->addFilterConditions($form, $doctrineQueryBuilder); |
| 195 | + |
| 196 | + $this->assertEquals($expectedDql, $doctrineQueryBuilder->getDql()); |
| 197 | + $this->assertEquals([ |
| 198 | + 'p_o_rank' => 1.0, |
| 199 | + 'p_item_position' => 2.0, |
| 200 | + 'p_item_enabled' => true, |
| 201 | + ], $this->getQueryBuilderParameters($doctrineQueryBuilder)); |
| 202 | + } |
| 203 | + |
| 204 | + protected function createDoctrineQueryBuilder( |
| 205 | + string $entityClassName = Item::class, |
| 206 | + string $alias = 'i' |
| 207 | + ) { |
182 | 208 | return $this->em |
183 | | - ->getRepository(Item::class) |
184 | | - ->createQueryBuilder('i'); |
| 209 | + ->getRepository($entityClassName) |
| 210 | + ->createQueryBuilder($alias); |
185 | 211 | } |
186 | 212 | } |
0 commit comments