public function testSortParameters()
 {
     $registry = $this->getMock('Symfony\\Bridge\\Doctrine\\RegistryInterface');
     $manager = new ModelManager($registry);
     $datagrid1 = $this->getMockBuilder('\\Sonata\\AdminBundle\\Datagrid\\Datagrid')->disableOriginalConstructor()->getMock();
     $datagrid2 = $this->getMockBuilder('\\Sonata\\AdminBundle\\Datagrid\\Datagrid')->disableOriginalConstructor()->getMock();
     $field1 = new FieldDescription();
     $field1->setName('field1');
     $field2 = new FieldDescription();
     $field2->setName('field2');
     $field3 = new FieldDescription();
     $field3->setName('field3');
     $field3->setOption('sortable', 'field3sortBy');
     $datagrid1->expects($this->any())->method('getValues')->will($this->returnValue(array('_sort_by' => $field1, '_sort_order' => 'ASC')));
     $datagrid2->expects($this->any())->method('getValues')->will($this->returnValue(array('_sort_by' => $field3, '_sort_order' => 'ASC')));
     $parameters = $manager->getSortParameters($field1, $datagrid1);
     $this->assertEquals('DESC', $parameters['filter']['_sort_order']);
     $this->assertEquals('field1', $parameters['filter']['_sort_by']);
     $parameters = $manager->getSortParameters($field2, $datagrid1);
     $this->assertEquals('ASC', $parameters['filter']['_sort_order']);
     $this->assertEquals('field2', $parameters['filter']['_sort_by']);
     $parameters = $manager->getSortParameters($field3, $datagrid1);
     $this->assertEquals('ASC', $parameters['filter']['_sort_order']);
     $this->assertEquals('field3sortBy', $parameters['filter']['_sort_by']);
     $parameters = $manager->getSortParameters($field3, $datagrid2);
     $this->assertEquals('DESC', $parameters['filter']['_sort_order']);
     $this->assertEquals('field3sortBy', $parameters['filter']['_sort_by']);
 }
 /**
  * {@inheritdoc}
  */
 public function getNewFieldDescriptionInstance($class, $name, array $options = array())
 {
     if (!is_string($name)) {
         throw new \RunTimeException('The name argument must be a string');
     }
     list($metadata, $propertyName, $parentAssociationMappings) = $this->getParentMetadataForProperty($class, $name);
     $fieldDescription = new FieldDescription();
     $fieldDescription->setName($name);
     $fieldDescription->setOptions($options);
     $fieldDescription->setParentAssociationMappings($parentAssociationMappings);
     if (isset($metadata->associationMappings[$propertyName])) {
         $fieldDescription->setAssociationMapping($metadata->associationMappings[$propertyName]);
     }
     if (isset($metadata->fieldMappings[$propertyName])) {
         $fieldDescription->setFieldMapping($metadata->fieldMappings[$propertyName]);
     }
     return $fieldDescription;
 }
 public function testGetFieldMapping()
 {
     $fieldMapping = array('type' => 'integer', 'fieldName' => 'position', 'id' => 'someId');
     $field = new FieldDescription();
     $field->setFieldMapping($fieldMapping);
     $this->assertEquals($fieldMapping, $field->getFieldMapping());
 }