TimestampableDocumentTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php
  2. namespace Gedmo\Timestampable;
  3. use Timestampable\Fixture\Document\Article,
  4. Timestampable\Fixture\Document\Type;
  5. /**
  6. * These are tests for Timestampable behavior ODM implementation
  7. *
  8. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  9. * @package Gedmo.Timestampable
  10. * @link http://www.gediminasm.org
  11. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  12. */
  13. class TimestampableDocumentTest extends \PHPUnit_Framework_TestCase
  14. {
  15. const TEST_CLASS_ARTICLE = 'Timestampable\Fixture\Document\Article';
  16. const TEST_CLASS_TYPE = 'Timestampable\Fixture\Document\Type';
  17. /**
  18. * @var DocumentManager
  19. */
  20. private $dm;
  21. public function setUp()
  22. {
  23. $config = new \Doctrine\ODM\MongoDB\Configuration();
  24. $config->setProxyDir(__DIR__ . '/Proxy');
  25. $config->setProxyNamespace('Gedmo\Timestampable\Proxy');
  26. $config->setHydratorDir(__DIR__ . '/Hydrator');
  27. $config->setHydratorNamespace('Hydrator');
  28. $config->setDefaultDB('gedmo_timestampable_tests');
  29. $config->setLoggerCallable(function(array $log) {
  30. print_r($log);
  31. });
  32. $reader = new \Doctrine\Common\Annotations\AnnotationReader();
  33. $reader->setDefaultAnnotationNamespace('Doctrine\ODM\MongoDB\Mapping\\');
  34. $config->setMetadataDriverImpl(
  35. new \Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver(
  36. $reader,
  37. array(__DIR__ . '/Fixture/Document')
  38. )
  39. );
  40. $evm = new \Doctrine\Common\EventManager();
  41. $timestampableListener = new \Gedmo\Timestampable\ODM\MongoDB\TimestampableListener();
  42. $evm->addEventSubscriber($timestampableListener);
  43. if (!extension_loaded('mongo')) {
  44. $this->markTestSkipped('Mongo extension is not loaded in PHP.');
  45. }
  46. try {
  47. $this->dm = \Doctrine\ODM\MongoDB\DocumentManager::create(
  48. new \Doctrine\MongoDB\Connection(),
  49. $config,
  50. $evm
  51. );
  52. $this->populate();
  53. } catch (\MongoException $e) {
  54. $this->markTestSkipped('Doctrine MongoDB ODM connection problem.');
  55. }
  56. }
  57. public function testTimestampable()
  58. {
  59. $repo = $this->dm->getRepository(self::TEST_CLASS_ARTICLE);
  60. $article = $repo->findOneByTitle('Timestampable Article');
  61. $date = new \DateTime();
  62. $this->assertEquals(
  63. time(),
  64. (string)$article->getCreated()
  65. );
  66. $this->assertEquals(
  67. $date->format('Y-m-d H:i:s'),
  68. $article->getUpdated()->format('Y-m-d H:i:s')
  69. );
  70. $published = new Type;
  71. $published->setIdentifier('published');
  72. $published->setTitle('Published');
  73. $article->setType($published);
  74. $this->dm->persist($article);
  75. $this->dm->persist($published);
  76. $this->dm->flush();
  77. $this->dm->clear();
  78. $article = $repo->findOneByTitle('Timestampable Article');
  79. $date = new \DateTime();
  80. $this->assertEquals(
  81. $date->format('Y-m-d H:i:s'),
  82. $article->getPublished()->format('Y-m-d H:i:s')
  83. );
  84. }
  85. public function testForcedValues()
  86. {
  87. $sport = new Article();
  88. $sport->setTitle('sport forced');
  89. $created = strtotime('2000-01-01 12:00:00');
  90. $sport->setCreated($created);
  91. $sport->setUpdated(new \DateTime('2000-01-01 12:00:00'));
  92. $this->dm->persist($sport);
  93. $this->dm->flush();
  94. $this->dm->clear();
  95. $repo = $this->dm->getRepository(self::TEST_CLASS_ARTICLE);
  96. $sport = $repo->findOneByTitle('sport forced');
  97. $this->assertEquals(
  98. $created,
  99. (string)$sport->getCreated()
  100. );
  101. $this->assertEquals(
  102. '2000-01-01 12:00:00',
  103. $sport->getUpdated()->format('Y-m-d H:i:s')
  104. );
  105. $published = new Type;
  106. $published->setIdentifier('published');
  107. $published->setTitle('Published');
  108. $sport->setType($published);
  109. $sport->setPublished(new \DateTime('2000-01-01 12:00:00'));
  110. $this->dm->persist($sport);
  111. $this->dm->persist($published);
  112. $this->dm->flush();
  113. $this->dm->clear();
  114. $sport = $repo->findOneByTitle('sport forced');
  115. $this->assertEquals(
  116. '2000-01-01 12:00:00',
  117. $sport->getPublished()->format('Y-m-d H:i:s')
  118. );
  119. }
  120. private function populate()
  121. {
  122. $qb = $this->dm->createQueryBuilder(self::TEST_CLASS_ARTICLE);
  123. $qb->remove()->getQuery()->execute();
  124. $qb = $this->dm->createQueryBuilder(self::TEST_CLASS_TYPE);
  125. $qb->remove()->getQuery()->execute();
  126. $art0 = new Article();
  127. $art0->setTitle('Timestampable Article');
  128. $this->dm->persist($art0);
  129. $this->dm->flush();
  130. $this->dm->clear();
  131. }
  132. }