Вход Регистрация
Файл: symfony-2.7/src/Symfony/Bridge/Propel1/Tests/Form/Type/TranslationCollectionTypeTest.php
Строк: 228
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyBridgePropel1TestsFormType;

use 
SymfonyBridgePropel1TestsFixturesItem;
use 
SymfonyBridgePropel1FormPropelExtension;
use 
SymfonyBridgePropel1TestsFixturesTranslatableItemI18n;
use 
SymfonyBridgePropel1TestsFixturesTranslatableItem;
use 
SymfonyComponentFormTestTypeTestCase;

class 
TranslationCollectionTypeTest extends TypeTestCase
{
    const 
TRANSLATION_CLASS = 'SymfonyBridgePropel1TestsFixturesTranslatableItem';
    const 
TRANSLATABLE_I18N_CLASS = 'SymfonyBridgePropel1TestsFixturesTranslatableItemI18n';
    const 
NON_TRANSLATION_CLASS = 'SymfonyBridgePropel1TestsFixturesItem';

    protected function 
getExtensions()
    {
        return array(new 
PropelExtension());
    }

    public function 
testTranslationsAdded()
    {
        
$item = new TranslatableItem();
        
$item->addTranslatableItemI18n(new TranslatableItemI18n(1, 'fr', 'val1'));
        
$item->addTranslatableItemI18n(new TranslatableItemI18n(2, 'en', 'val2'));

        
$builder = $this->factory->createBuilder('form', null, array(
            
'data_class' => self::TRANSLATION_CLASS,
        ));

        
$builder->add('translatableItemI18ns', 'propel1_translation_collection', array(
            
'languages' => array('en', 'fr'),
            
'options' => array(
                
'data_class' => self::TRANSLATABLE_I18N_CLASS,
                
'columns' => array('value', 'value2' => array('label' => 'Label', 'type' => 'textarea')),
            ),
        ));
        
$form = $builder->getForm();
        
$form->setData($item);
        
$translations = $form->get('translatableItemI18ns');

        
$this->assertCount(2, $translations);
        
$this->assertInstanceOf('SymfonyComponentFormForm', $translations['en']);
        
$this->assertInstanceOf('SymfonyComponentFormForm', $translations['fr']);

        
$this->assertInstanceOf(self::TRANSLATABLE_I18N_CLASS, $translations['en']->getData());
        
$this->assertInstanceOf(self::TRANSLATABLE_I18N_CLASS, $translations['fr']->getData());

        
$this->assertEquals($item->getTranslation('en'), $translations['en']->getData());
        
$this->assertEquals($item->getTranslation('fr'), $translations['fr']->getData());

        
$columnOptions = $translations['fr']->getConfig()->getOption('columns');
        
$this->assertEquals('value', $columnOptions[0]);
        
$this->assertEquals('textarea', $columnOptions['value2']['type']);
        
$this->assertEquals('Label', $columnOptions['value2']['label']);
    }

    public function 
testNotPresentTranslationsAdded()
    {
        
$item = new TranslatableItem();

        
$this->assertCount(0, $item->getTranslatableItemI18ns());

        
$builder = $this->factory->createBuilder('form', null, array(
            
'data_class' => self::TRANSLATION_CLASS,
        ));
        
$builder->add('translatableItemI18ns', 'propel1_translation_collection', array(
            
'languages' => array('en', 'fr'),
            
'options' => array(
                
'data_class' => self::TRANSLATABLE_I18N_CLASS,
                
'columns' => array('value', 'value2' => array('label' => 'Label', 'type' => 'textarea')),
            ),
        ));

        
$form = $builder->getForm();
        
$form->setData($item);

        
$this->assertCount(2, $item->getTranslatableItemI18ns());
    }

    
/**
     * @expectedException SymfonyComponentFormExceptionUnexpectedTypeException
     */
    
public function testNoArrayGiven()
    {
        
$item = new Item(null, 'val');

        
$builder = $this->factory->createBuilder('form', null, array(
            
'data_class' => self::NON_TRANSLATION_CLASS,
        ));
        
$builder->add('value', 'propel1_translation_collection', array(
            
'languages' => array('en', 'fr'),
            
'options' => array(
                
'data_class' => self::TRANSLATABLE_I18N_CLASS,
                
'columns' => array('value', 'value2' => array('label' => 'Label', 'type' => 'textarea')),
            ),
        ));

        
$form = $builder->getForm();
        
$form->setData($item);
    }

    
/**
     * @expectedException SymfonyComponentOptionsResolverExceptionMissingOptionsException
     */
    
public function testNoDataClassAdded()
    {
        
$this->factory->createNamed('itemI18ns', 'propel1_translation_collection', null, array(
            
'languages' => array('en', 'fr'),
            
'options' => array(
                
'columns' => array('value', 'value2'),
            ),
        ));
    }

    
/**
     * @expectedException SymfonyComponentOptionsResolverExceptionMissingOptionsException
     */
    
public function testNoLanguagesAdded()
    {
        
$this->factory->createNamed('itemI18ns', 'propel1_translation_collection', null, array(
           
'options' => array(
               
'data_class' => self::TRANSLATABLE_I18N_CLASS,
               
'columns' => array('value', 'value2'),
           ),
        ));
    }

    
/**
     * @expectedException SymfonyComponentOptionsResolverExceptionMissingOptionsException
     */
    
public function testNoColumnsAdded()
    {
        
$this->factory->createNamed('itemI18ns', 'propel1_translation_collection', null, array(
            
'languages' => array('en', 'fr'),
            
'options' => array(
                
'data_class' => self::TRANSLATABLE_I18N_CLASS,
            ),
        ));
    }
}
Онлайн: 0
Реклама