ModelToIdPropertyTransformerTest.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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\AdminBundle\Tests\Form\DataTransformer;
  11. use Sonata\AdminBundle\Form\DataTransformer\ModelToIdPropertyTransformer;
  12. use Sonata\AdminBundle\Tests\Fixtures\Entity\Foo;
  13. use Doctrine\Common\Collections\ArrayCollection;
  14. class ModelToIdPropertyTransformerTest extends \PHPUnit_Framework_TestCase
  15. {
  16. private $modelManager = null;
  17. public function setUp()
  18. {
  19. $this->modelManager = $this->getMock('Sonata\AdminBundle\Model\ModelManagerInterface');
  20. }
  21. public function testReverseTransform()
  22. {
  23. $transformer = new ModelToIdPropertyTransformer($this->modelManager, 'Sonata\AdminBundle\Tests\Fixtures\Entity\Foo', 'bar', false);
  24. $entity = new Foo();
  25. $entity->setBar('example');
  26. $this->modelManager
  27. ->expects($this->any())
  28. ->method('find')
  29. ->with($this->equalTo('Sonata\AdminBundle\Tests\Fixtures\Entity\Foo'), $this->equalTo(123))
  30. ->will($this->returnValue($entity));
  31. $this->assertNull($transformer->reverseTransform(null));
  32. $this->assertNull($transformer->reverseTransform(false));
  33. $this->assertNull($transformer->reverseTransform(12));
  34. $this->assertEquals($entity, $transformer->reverseTransform(array('identifiers' => array(123), 'titles' => array('example'))));
  35. }
  36. /**
  37. * @dataProvider getReverseTransformMultipleTests
  38. */
  39. public function testReverseTransformMultiple($expected, $params, $entity1, $entity2, $entity3)
  40. {
  41. $transformer = new ModelToIdPropertyTransformer($this->modelManager, 'Sonata\AdminBundle\Tests\Fixtures\Entity\Foo', 'bar', true);
  42. $this->modelManager
  43. ->expects($this->any())
  44. ->method('find')
  45. ->will($this->returnCallback(function ($className, $value) use ($entity1, $entity2, $entity3) {
  46. if ($className != 'Sonata\AdminBundle\Tests\Fixtures\Entity\Foo') {
  47. return null;
  48. }
  49. if ($value == 123) {
  50. return $entity1;
  51. }
  52. if ($value == 456) {
  53. return $entity2;
  54. }
  55. if ($value == 789) {
  56. return $entity3;
  57. }
  58. return null;
  59. }));
  60. $collection = new ArrayCollection();
  61. $this->modelManager
  62. ->expects($this->any())
  63. ->method('getModelCollectionInstance')
  64. ->with($this->equalTo('Sonata\AdminBundle\Tests\Fixtures\Entity\Foo'))
  65. ->will($this->returnValue($collection));
  66. $result = $transformer->reverseTransform($params);
  67. $this->assertInstanceOf('Doctrine\Common\Collections\ArrayCollection', $result);
  68. $this->assertEquals($expected, $result->getValues());
  69. }
  70. public function getReverseTransformMultipleTests()
  71. {
  72. $entity1 = new Foo();
  73. $entity1->setBaz(123);
  74. $entity1->setBar('example');
  75. $entity2 = new Foo();
  76. $entity2->setBaz(456);
  77. $entity2->setBar('example2');
  78. $entity3 = new Foo();
  79. $entity3->setBaz(789);
  80. $entity3->setBar('example3');
  81. return array(
  82. array(array(), null, $entity1, $entity2, $entity3),
  83. array(array(), false, $entity1, $entity2, $entity3),
  84. array(array(), true, $entity1, $entity2, $entity3),
  85. array(array(), 12, $entity1, $entity2, $entity3),
  86. array(array($entity1), array('identifiers' => array(123), 'titles' => array('example')), $entity1, $entity2, $entity3),
  87. array(array($entity1, $entity2, $entity3), array('identifiers' => array(123, 456, 789), 'titles' => array('example', 'example2', 'example3')), $entity1, $entity2, $entity3),
  88. );
  89. }
  90. public function testTransform()
  91. {
  92. $entity = new Foo();
  93. $entity->setBar('example');
  94. $this->modelManager->expects($this->once())
  95. ->method('getIdentifierValues')
  96. ->will($this->returnValue(array(123)));
  97. $transformer = new ModelToIdPropertyTransformer($this->modelManager, 'Sonata\AdminBundle\Tests\Fixtures\Entity\Foo', 'bar', false);
  98. $this->assertEquals(array('identifiers' => array(), 'labels' => array()), $transformer->transform(null));
  99. $this->assertEquals(array('identifiers' => array(), 'labels' => array()), $transformer->transform(false));
  100. $this->assertEquals(array('identifiers' => array(), 'labels' => array()), $transformer->transform(0));
  101. $this->assertEquals(array('identifiers' => array(), 'labels' => array()), $transformer->transform('0'));
  102. $this->assertEquals(array('identifiers' => array(123), 'labels' => array('example')), $transformer->transform($entity));
  103. }
  104. public function testTransformToStringCallback()
  105. {
  106. $entity = new Foo();
  107. $entity->setBar('example');
  108. $entity->setBaz('bazz');
  109. $this->modelManager->expects($this->once())
  110. ->method('getIdentifierValues')
  111. ->will($this->returnValue(array(123)));
  112. $transformer = new ModelToIdPropertyTransformer($this->modelManager, 'Sonata\AdminBundle\Tests\Fixtures\Entity\Foo', 'bar', false, function ($entity) {
  113. return $entity->getBaz();
  114. });
  115. $this->assertEquals(array('identifiers' => array(123), 'labels' => array('bazz')), $transformer->transform($entity));
  116. }
  117. public function testTransformMultiple()
  118. {
  119. $entity1 = new Foo();
  120. $entity1->setBar('foo');
  121. $entity2 = new Foo();
  122. $entity2->setBar('bar');
  123. $entity3 = new Foo();
  124. $entity3->setBar('baz');
  125. $collection = new ArrayCollection();
  126. $collection[] = $entity1;
  127. $collection[] = $entity2;
  128. $collection[] = $entity3;
  129. $this->modelManager->expects($this->exactly(3))
  130. ->method('getIdentifierValues')
  131. ->will($this->returnCallback(function ($value) use ($entity1, $entity2, $entity3) {
  132. if ($value == $entity1) {
  133. return array(123);
  134. }
  135. if ($value == $entity2) {
  136. return array(456);
  137. }
  138. if ($value == $entity3) {
  139. return array(789);
  140. }
  141. return array(999);
  142. }));
  143. $transformer = new ModelToIdPropertyTransformer($this->modelManager, 'Sonata\AdminBundle\Tests\Fixtures\Entity\Foo', 'bar', true);
  144. $this->assertEquals(array('identifiers' => array(), 'labels' => array()), $transformer->transform(null));
  145. $this->assertEquals(array('identifiers' => array(), 'labels' => array()), $transformer->transform(false));
  146. $this->assertEquals(array('identifiers' => array(), 'labels' => array()), $transformer->transform(0));
  147. $this->assertEquals(array('identifiers' => array(), 'labels' => array()), $transformer->transform('0'));
  148. $this->assertEquals(array('identifiers' => array(123, 456, 789), 'labels' => array('foo', 'bar', 'baz')), $transformer->transform($collection));
  149. }
  150. }