/**
  * @param string $entityClass
  * @param string $fieldName
  * @param string $alias
  * @param array $fieldConfig
  * @param array $joins
  * @param string $expected
  *
  * @dataProvider virtualFieldsProvider
  */
 public function testGetFieldExprVirtual($entityClass, $fieldName, $alias, array $fieldConfig, array $joins, $expected)
 {
     $from = $this->getMockBuilder('Doctrine\\ORM\\Query\\Expr\\From')->disableOriginalConstructor()->getMock();
     $from->expects($this->atLeastOnce())->method('getAlias')->will($this->returnValue($alias));
     /** @var \PHPUnit_Framework_MockObject_MockObject|QueryBuilder $qb */
     $qb = $this->getMockBuilder('Doctrine\\ORM\\QueryBuilder')->disableOriginalConstructor()->getMock();
     $qb->expects($this->atLeastOnce())->method('getDQLPart')->will($this->returnValueMap([['from', [$from]], ['join', $joins]]));
     $this->virtualFieldProvider->expects($this->once())->method('isVirtualField')->with($entityClass, $fieldName)->will($this->returnValue(true));
     $this->virtualFieldProvider->expects($this->once())->method('getVirtualFieldQuery')->with($entityClass, $fieldName)->will($this->returnValue($fieldConfig));
     $this->assertEquals($expected, $this->helper->getFieldExpr($entityClass, $qb, $fieldName));
 }
 /**
  * @param array $expected
  *
  * @dataProvider getFieldsWithVirtualRelationsAndEnumsDataProvider
  */
 public function testGetFieldsWithVirtualRelationsAndEnums(array $expected)
 {
     $className = 'Acme\\Entity\\Test';
     $config = [$className => ['config' => ['label' => 'Test Label', 'plural_label' => 'Test Plural Label', 'icon' => 'icon-test'], 'fields' => ['field1' => ['type' => 'integer', 'identifier' => true, 'config' => ['label' => 'Field 1']]], 'relations' => ['rel1' => ['target_class' => 'Acme\\EnumValue1', 'type' => 'ref-one', 'config' => ['label' => 'Enum Field']], 'rel2' => ['target_class' => 'Acme\\EnumValue2', 'type' => 'ref-many', 'config' => ['label' => 'Multi Enum Field']]]]];
     $this->prepare($config);
     $this->virtualFieldProvider->expects($this->once())->method('getVirtualFields')->with($className)->will($this->returnValue(['rel1', 'rel2']));
     $this->virtualRelationProvider->expects($this->once())->method('getVirtualRelations')->with($className)->will($this->returnValue(['virtual_relation' => ['relation_type' => 'oneToMany', 'related_entity_name' => 'OtherEntity', 'query' => ['select' => ['select expression'], 'join' => ['join expression']]]]));
     $this->virtualFieldProvider->expects($this->exactly(2))->method('getVirtualFieldQuery')->will($this->returnValueMap([[$className, 'rel1', ['select' => ['return_type' => 'enum', 'filter_by_id' => true]]], [$className, 'rel2', ['select' => ['return_type' => 'multiEnum', 'filter_by_id' => true]]]]));
     $result = $this->provider->getFields('Acme:Test', true, true);
     $this->assertEquals($expected, $result);
 }