FieldDescriptionTest.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. <?php
  2. /*
  3. * This file is part of the Sonata package.
  4. *
  5. * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Sonata\DoctrineORMAdminBundle\Tests\Admin;
  11. use Sonata\DoctrineORMAdminBundle\Admin\FieldDescription;
  12. class FieldDescriptionTest extends \PHPUnit_Framework_TestCase
  13. {
  14. public function testOptions()
  15. {
  16. $field = new FieldDescription;
  17. $field->setOptions(array(
  18. 'template' => 'foo',
  19. 'type' => 'bar',
  20. 'misc' => 'foobar',
  21. ));
  22. // test method shortcut
  23. $this->assertEquals(null, $field->getOption('template'));
  24. $this->assertEquals(null, $field->getOption('type'));
  25. $this->assertEquals('foo', $field->getTemplate());
  26. $this->assertEquals('bar', $field->getType());
  27. // test the default value option
  28. $this->assertEquals('default', $field->getOption('template', 'default'));
  29. // test the merge options
  30. $field->setOption('array', array('key1' => 'val1'));
  31. $field->mergeOption('array', array('key1' => 'key_1', 'key2' => 'key_2'));
  32. $this->assertEquals(array('key1' => 'key_1', 'key2' => 'key_2'), $field->getOption('array'));
  33. $field->mergeOption('non_existant', array('key1' => 'key_1', 'key2' => 'key_2'));
  34. $this->assertEquals(array('key1' => 'key_1', 'key2' => 'key_2'), $field->getOption('array'));
  35. $field->mergeOptions(array('array' => array('key3' => 'key_3')));
  36. $this->assertEquals(array('key1' => 'key_1', 'key2' => 'key_2', 'key3' => 'key_3'), $field->getOption('array'));
  37. $field->setOption('integer', 1);
  38. try {
  39. $field->mergeOption('integer', array());
  40. $this->fail('no exception raised !!');
  41. } catch (\RuntimeException $e) {
  42. }
  43. $field->mergeOptions(array('final' => 'test'));
  44. $expected = array (
  45. 'misc' => 'foobar',
  46. 'array' =>
  47. array (
  48. 'key1' => 'key_1',
  49. 'key2' => 'key_2',
  50. 'key3' => 'key_3'
  51. ),
  52. 'non_existant' =>
  53. array (
  54. 'key1' => 'key_1',
  55. 'key2' => 'key_2',
  56. ),
  57. 'integer' => 1,
  58. 'final' => 'test',
  59. );
  60. $this->assertEquals($expected, $field->getOptions());
  61. }
  62. public function testAssociationMapping()
  63. {
  64. $field = new FieldDescription;
  65. $field->setAssociationMapping(array(
  66. 'type' => 'integer',
  67. 'fieldName' => 'position'
  68. ));
  69. $this->assertEquals('integer', $field->getType());
  70. $this->assertEquals('integer', $field->getMappingType());
  71. $this->assertEquals('position', $field->getFieldName());
  72. // cannot overwrite defined definition
  73. $field->setAssociationMapping(array(
  74. 'type' => 'overwrite?',
  75. 'fieldName' => 'overwritten'
  76. ));
  77. $this->assertEquals('integer', $field->getType());
  78. $this->assertEquals('integer', $field->getMappingType());
  79. $this->assertEquals('overwritten', $field->getFieldName());
  80. $field->setMappingType('string');
  81. $this->assertEquals('string', $field->getMappingType());
  82. $this->assertEquals('integer', $field->getType());
  83. }
  84. public function testCamelize()
  85. {
  86. $this->assertEquals('FooBar', FieldDescription::camelize('foo_bar'));
  87. $this->assertEquals('FooBar', FieldDescription::camelize('foo bar'));
  88. $this->assertEquals('FOoBar', FieldDescription::camelize('fOo bar'));
  89. }
  90. public function testSetName()
  91. {
  92. $field = new FieldDescription();
  93. $field->setName('New field description name');
  94. $this->assertEquals($field->getName(), 'New field description name');
  95. }
  96. public function testSetNameSetFieldNameToo()
  97. {
  98. $field = new FieldDescription();
  99. $field->setName('New field description name');
  100. $this->assertEquals($field->getFieldName(), 'New field description name');
  101. }
  102. public function testSetNameDoesNotSetFieldNameWhenSetBefore()
  103. {
  104. $field = new FieldDescription();
  105. $field->setFieldName('field name');
  106. $field->setName('New field description name');
  107. $this->assertEquals($field->getFieldName(), 'field name');
  108. }
  109. public function testGetParent()
  110. {
  111. $adminMock = $this->getMock('Sonata\AdminBundle\Admin\AdminInterface');
  112. $field = new FieldDescription();
  113. $field->setParent($adminMock);
  114. $this->assertSame($adminMock, $field->getParent());
  115. }
  116. public function testGetHelp()
  117. {
  118. $field = new FieldDescription();
  119. $field->setHelp('help message');
  120. $this->assertEquals($field->getHelp(), 'help message');
  121. }
  122. public function testGetAdmin()
  123. {
  124. $adminMock = $this->getMock('Sonata\AdminBundle\Admin\AdminInterface');
  125. $field = new FieldDescription();
  126. $field->setAdmin($adminMock);
  127. $this->assertSame($adminMock, $field->getAdmin());
  128. }
  129. public function testGetAssociationAdmin()
  130. {
  131. $adminMock = $this->getMockBuilder('Sonata\AdminBundle\Admin\Admin')
  132. ->disableOriginalConstructor()
  133. ->getMock();
  134. $adminMock->expects($this->once())
  135. ->method('setParentFieldDescription')
  136. ->with($this->isInstanceOf('Sonata\AdminBundle\Admin\FieldDescriptionInterface'));
  137. $field = new FieldDescription();
  138. $field->setAssociationAdmin($adminMock);
  139. $this->assertSame($adminMock, $field->getAssociationAdmin());
  140. }
  141. public function testHasAssociationAdmin()
  142. {
  143. $adminMock = $this->getMockBuilder('Sonata\AdminBundle\Admin\Admin')
  144. ->disableOriginalConstructor()
  145. ->getMock();
  146. $adminMock->expects($this->once())
  147. ->method('setParentFieldDescription')
  148. ->with($this->isInstanceOf('Sonata\AdminBundle\Admin\FieldDescriptionInterface'));
  149. $field = new FieldDescription();
  150. $this->assertFalse($field->hasAssociationAdmin());
  151. $field->setAssociationAdmin($adminMock);
  152. $this->assertTrue($field->hasAssociationAdmin());
  153. }
  154. public function testGetValue()
  155. {
  156. $mockedObject = $this->getMock('MockedTestObject', array('myMethod'));
  157. $mockedObject->expects($this->once())
  158. ->method('myMethod')
  159. ->will($this->returnValue('myMethodValue'));
  160. $field = new FieldDescription();
  161. $field->setOption('code', 'myMethod');
  162. $this->assertEquals($field->getValue($mockedObject), 'myMethodValue');
  163. }
  164. /**
  165. * @expectedException Sonata\AdminBundle\Exception\NoValueException
  166. */
  167. public function testGetValueWhenCannotRetrieve()
  168. {
  169. $mockedObject = $this->getMock('MockedTestObject', array('myMethod'));
  170. $mockedObject->expects($this->never())
  171. ->method('myMethod')
  172. ->will($this->returnValue('myMethodValue'));
  173. $field = new FieldDescription();
  174. $this->assertEquals($field->getValue($mockedObject), 'myMethodValue');
  175. }
  176. public function testGetAssociationMapping()
  177. {
  178. $assocationMapping = array(
  179. 'type' => 'integer',
  180. 'fieldName' => 'position'
  181. );
  182. $field = new FieldDescription();
  183. $field->setAssociationMapping($assocationMapping);
  184. $this->assertEquals($assocationMapping, $field->getAssociationMapping());
  185. }
  186. /**
  187. * @expectedException \RuntimeException
  188. */
  189. public function testSetAssociationMappingAllowOnlyForArray()
  190. {
  191. $field = new FieldDescription();
  192. $field->setAssociationMapping('test');
  193. }
  194. /**
  195. * @expectedException \RuntimeException
  196. */
  197. public function testSetFieldMappingAllowOnlyForArray()
  198. {
  199. $field = new FieldDescription();
  200. $field->setFieldMapping('test');
  201. }
  202. public function testSetFieldMappingSetType()
  203. {
  204. $fieldMapping = array(
  205. 'type' => 'integer',
  206. 'fieldName' => 'position'
  207. );
  208. $field = new FieldDescription();
  209. $field->setFieldMapping($fieldMapping);
  210. $this->assertEquals('integer', $field->getType());
  211. }
  212. public function testSetFieldMappingSetMappingType()
  213. {
  214. $fieldMapping = array(
  215. 'type' => 'integer',
  216. 'fieldName' => 'position'
  217. );
  218. $field = new FieldDescription();
  219. $field->setFieldMapping($fieldMapping);
  220. $this->assertEquals('integer', $field->getMappingType());
  221. }
  222. public function testSetFieldMappingSetFieldName()
  223. {
  224. $fieldMapping = array(
  225. 'type' => 'integer',
  226. 'fieldName' => 'position'
  227. );
  228. $field = new FieldDescription();
  229. $field->setFieldMapping($fieldMapping);
  230. $this->assertEquals('position', $field->getFieldName());
  231. }
  232. public function testGetTargetEntity()
  233. {
  234. $assocationMapping = array(
  235. 'type' => 'integer',
  236. 'fieldName' => 'position',
  237. 'targetEntity' => 'someValue'
  238. );
  239. $field = new FieldDescription();
  240. $this->assertNull($field->getTargetEntity());
  241. $field->setAssociationMapping($assocationMapping);
  242. $this->assertEquals('someValue', $field->getTargetEntity());
  243. }
  244. public function testIsIdentifierFromFieldMapping()
  245. {
  246. $fieldMapping = array(
  247. 'type' => 'integer',
  248. 'fieldName' => 'position',
  249. 'id' => 'someId'
  250. );
  251. $field = new FieldDescription();
  252. $field->setFieldMapping($fieldMapping);
  253. $this->assertEquals('someId', $field->isIdentifier());
  254. }
  255. public function testGetFieldMapping()
  256. {
  257. $fieldMapping = array(
  258. 'type' => 'integer',
  259. 'fieldName' => 'position',
  260. 'id' => 'someId'
  261. );
  262. $field = new FieldDescription();
  263. $field->setFieldMapping($fieldMapping);
  264. $this->assertEquals($fieldMapping, $field->getFieldMapping());
  265. }
  266. }