AdminExtractorTest.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace Sonata\AdminBundle\Tests\Translator\Extractor\JMSTranslatorBundle;
  3. use Symfony\Component\HttpKernel\Log\LoggerInterface;
  4. use Sonata\AdminBundle\Admin\Pool;
  5. use Sonata\AdminBundle\Admin\AdminInterface;
  6. use JMS\TranslationBundle\Model\MessageCatalogue;
  7. use JMS\TranslationBundle\Model\Message;
  8. use Sonata\AdminBundle\Translator\Extractor\JMSTranslatorBundle\AdminExtractor;
  9. /**
  10. * Test for AdminExtractor
  11. *
  12. * @author Andrej Hudec <pulzarraider@gmail.com>
  13. */
  14. class AdminExtractorTest extends \PHPUnit_Framework_TestCase
  15. {
  16. /**
  17. * @var AdminExtractor
  18. */
  19. private $adminExtractor;
  20. /**
  21. * @var Pool
  22. */
  23. private $pool;
  24. /**
  25. * @var AdminInterface
  26. */
  27. private $fooAdmin;
  28. /**
  29. * @var AdminInterface
  30. */
  31. private $barAdmin;
  32. public function setUp()
  33. {
  34. if (!interface_exists('JMS\TranslationBundle\Translation\ExtractorInterface')) {
  35. $this->markTestSkipped('JMS Translator Bundle does not exist');
  36. }
  37. $this->fooAdmin = $this->getMock('Sonata\AdminBundle\Admin\AdminInterface');
  38. $this->barAdmin = $this->getMock('Sonata\AdminBundle\Admin\AdminInterface');
  39. // php 5.3 BC
  40. $fooAdmin = $this->fooAdmin;
  41. $barAdmin = $this->barAdmin;
  42. $container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface');
  43. $container->expects($this->any())
  44. ->method('get')
  45. ->will($this->returnCallback(function ($id) use ($fooAdmin, $barAdmin) {
  46. switch ($id) {
  47. case 'foo_admin':
  48. return $fooAdmin;
  49. case 'bar_admin':
  50. return $barAdmin;
  51. }
  52. return null;
  53. }));
  54. $logger = $this->getMock('Symfony\Component\HttpKernel\Log\LoggerInterface');
  55. $this->pool = new Pool($container, '', '');
  56. $this->pool->setAdminServiceIds(array('foo_admin', 'bar_admin'));
  57. $this->adminExtractor = new AdminExtractor($this->pool, $logger);
  58. $this->adminExtractor->setLogger($logger);
  59. }
  60. public function testExtractEmpty()
  61. {
  62. $catalogue = $this->adminExtractor->extract();
  63. $this->assertInstanceOf('JMS\TranslationBundle\Model\MessageCatalogue', $catalogue);
  64. $this->assertFalse($catalogue->has(new Message('foo', 'foo_admin_domain')));
  65. }
  66. public function testExtract()
  67. {
  68. // php 5.3 BC
  69. $translator = $this->adminExtractor;
  70. $tester = $this;
  71. $this->fooAdmin->expects($this->any())
  72. ->method('getShow')
  73. ->will($this->returnCallback(function () use ($translator, $tester) {
  74. $tester->assertEquals('foo', $translator->trans('foo', array(), 'foo_admin_domain'));
  75. $tester->assertEquals('foo', $translator->transChoice('foo', 1, array(), 'foo_admin_domain'));
  76. return null;
  77. }));
  78. $catalogue = $this->adminExtractor->extract();
  79. $this->assertTrue($catalogue->has(new Message('foo', 'foo_admin_domain')));
  80. $this->assertFalse($catalogue->has(new Message('nonexistent', 'foo_admin_domain')));
  81. $this->assertInstanceOf('JMS\TranslationBundle\Model\Message', $catalogue->get('foo', 'foo_admin_domain'));
  82. $message = $catalogue->get('foo', 'foo_admin_domain');
  83. $this->assertEquals('foo', $message->getId());
  84. $this->assertEquals('foo_admin_domain', $message->getDomain());
  85. }
  86. public function testExtractWithException()
  87. {
  88. $this->setExpectedException('RuntimeException', 'Foo throws exception');
  89. $this->fooAdmin->expects($this->any())
  90. ->method('getShow')
  91. ->will($this->returnCallback(function () {
  92. throw new \RuntimeException('Foo throws exception');
  93. }));
  94. $catalogue = $this->adminExtractor->extract();
  95. }
  96. }