/**
  * Pre set data event handler
  *
  * @param FormEvent $event
  */
 public function preSetData(FormEvent $event)
 {
     $form = $event->getForm();
     $configModel = $form->getConfig()->getOption('config_model');
     if (!$configModel instanceof FieldConfigModel) {
         return;
     }
     if (!in_array($configModel->getType(), ['enum', 'multiEnum'])) {
         return;
     }
     $enumConfig = $configModel->toArray('enum');
     if (empty($enumConfig['enum_code'])) {
         // new enum - a form already has a all data because on submit them are not removed from a config
         return;
     }
     $enumCode = $enumConfig['enum_code'];
     $data = $event->getData();
     $data['enum']['enum_name'] = $this->translator->trans(ExtendHelper::getEnumTranslationKey('label', $enumCode));
     $enumValueClassName = ExtendHelper::buildEnumValueClassName($enumCode);
     $enumConfigProvider = $this->configManager->getProvider('enum');
     if ($enumConfigProvider->hasConfig($enumValueClassName)) {
         $enumEntityConfig = $enumConfigProvider->getConfig($enumValueClassName);
         $data['enum']['enum_public'] = $enumEntityConfig->get('public');
         $data['enum']['enum_options'] = $this->enumSynchronizer->getEnumOptions($enumValueClassName);
     }
     $event->setData($data);
 }
 public function testGetEnumOptions()
 {
     $enumValueClassName = 'Test\\EnumValue';
     $values = [['id' => 'opt1']];
     $em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock();
     $this->doctrine->expects($this->once())->method('getManagerForClass')->with($enumValueClassName)->will($this->returnValue($em));
     $enumRepo = $this->getMockBuilder('Oro\\Bundle\\EntityExtendBundle\\Entity\\Repository\\EnumValueRepository')->disableOriginalConstructor()->getMock();
     $em->expects($this->once())->method('getRepository')->with($enumValueClassName)->will($this->returnValue($enumRepo));
     $qb = $this->getMockBuilder('Doctrine\\ORM\\QueryBuilder')->disableOriginalConstructor()->getMock();
     $enumRepo->expects($this->once())->method('createQueryBuilder')->with('e')->will($this->returnValue($qb));
     $query = $this->getMockBuilder('Doctrine\\ORM\\AbstractQuery')->disableOriginalConstructor()->setMethods(['setHint', 'getArrayResult'])->getMockForAbstractClass();
     $qb->expects($this->once())->method('select')->with('e.id, e.priority, e.name as label, e.default as is_default')->will($this->returnSelf());
     $qb->expects($this->once())->method('orderBy')->with('e.priority')->will($this->returnSelf());
     $qb->expects($this->once())->method('getQuery')->will($this->returnValue($query));
     $query->expects($this->once())->method('setHint')->with(Query::HINT_CUSTOM_OUTPUT_WALKER, 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker')->will($this->returnSelf());
     $query->expects($this->once())->method('getArrayResult')->will($this->returnValue($values));
     $result = $this->synchronizer->getEnumOptions($enumValueClassName);
     $this->assertEquals($values, $result);
 }