123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437 |
- <?php
-
- namespace Doctrine\Tests\ORM\Functional\Ticket;
-
- use Doctrine\Tests\Models\DDC117\DDC117ArticleDetails;
- use Doctrine\Tests\Models\DDC117\DDC117Article;
- use Doctrine\Tests\Models\DDC117\DDC117Reference;
- use Doctrine\Tests\Models\DDC117\DDC117Translation;
- use Doctrine\Tests\Models\DDC117\DDC117ApproveChanges;
- use Doctrine\Tests\Models\DDC117\DDC117Editor;
-
- require_once __DIR__ . '/../../../TestInit.php';
-
- class DDC117Test extends \Doctrine\Tests\OrmFunctionalTestCase
- {
- private $article1;
- private $article2;
- private $reference;
- private $translation;
- private $articleDetails;
-
- protected function setUp() {
- $this->useModelSet('ddc117');
- parent::setUp();
-
- $this->article1 = new DDC117Article("Foo");
- $this->article2 = new DDC117Article("Bar");
-
- $this->_em->persist($this->article1);
- $this->_em->persist($this->article2);
- $this->_em->flush();
-
- $this->reference = new DDC117Reference($this->article1, $this->article2, "Test-Description");
- $this->_em->persist($this->reference);
-
- $this->translation = new DDC117Translation($this->article1, "en", "Bar");
- $this->_em->persist($this->translation);
-
- $this->articleDetails = new DDC117ArticleDetails($this->article1, "Very long text");
- $this->_em->persist($this->articleDetails);
- $this->_em->flush();
-
- $this->_em->clear();
- }
-
- /**
- * @group DDC-117
- */
- public function testAssociationOnlyCompositeKey()
- {
- $idCriteria = array('source' => $this->article1->id(), 'target' => $this->article2->id());
-
- $mapRef = $this->_em->find("Doctrine\Tests\Models\DDC117\DDC117Reference", $idCriteria);
- $this->assertInstanceOf("Doctrine\Tests\Models\DDC117\DDC117Reference", $mapRef);
- $this->assertInstanceOf("Doctrine\Tests\Models\DDC117\DDC117Article", $mapRef->target());
- $this->assertInstanceOf("Doctrine\Tests\Models\DDC117\DDC117Article", $mapRef->source());
- $this->assertSame($mapRef, $this->_em->find("Doctrine\Tests\Models\DDC117\DDC117Reference", $idCriteria));
-
- $this->_em->clear();
-
- $dql = "SELECT r, s FROM "."Doctrine\Tests\Models\DDC117\DDC117Reference r JOIN r.source s WHERE r.source = ?1";
- $dqlRef = $this->_em->createQuery($dql)->setParameter(1, 1)->getSingleResult();
-
- $this->assertInstanceOf("Doctrine\Tests\Models\DDC117\DDC117Reference", $mapRef);
- $this->assertInstanceOf("Doctrine\Tests\Models\DDC117\DDC117Article", $mapRef->target());
- $this->assertInstanceOf("Doctrine\Tests\Models\DDC117\DDC117Article", $mapRef->source());
- $this->assertSame($dqlRef, $this->_em->find("Doctrine\Tests\Models\DDC117\DDC117Reference", $idCriteria));
-
- $this->_em->clear();
-
- $dql = "SELECT r, s FROM "."Doctrine\Tests\Models\DDC117\DDC117Reference r JOIN r.source s WHERE s.title = ?1";
- $dqlRef = $this->_em->createQuery($dql)->setParameter(1, 'Foo')->getSingleResult();
-
- $this->assertInstanceOf("Doctrine\Tests\Models\DDC117\DDC117Reference", $dqlRef);
- $this->assertInstanceOf("Doctrine\Tests\Models\DDC117\DDC117Article", $dqlRef->target());
- $this->assertInstanceOf("Doctrine\Tests\Models\DDC117\DDC117Article", $dqlRef->source());
- $this->assertSame($dqlRef, $this->_em->find("Doctrine\Tests\Models\DDC117\DDC117Reference", $idCriteria));
-
- $dql = "SELECT r, s FROM "."Doctrine\Tests\Models\DDC117\DDC117Reference r JOIN r.source s WHERE s.title = ?1";
- $dqlRef = $this->_em->createQuery($dql)->setParameter(1, 'Foo')->getSingleResult();
-
- $this->_em->contains($dqlRef);
- }
-
- /**
- * @group DDC-117
- */
- public function testUpdateAssocationEntity()
- {
- $idCriteria = array('source' => $this->article1->id(), 'target' => $this->article2->id());
-
- $mapRef = $this->_em->find("Doctrine\Tests\Models\DDC117\DDC117Reference", $idCriteria);
- $this->assertNotNull($mapRef);
- $mapRef->setDescription("New Description!!");
- $this->_em->flush();
- $this->_em->clear();
-
- $mapRef = $this->_em->find("Doctrine\Tests\Models\DDC117\DDC117Reference", $idCriteria);
-
- $this->assertEquals('New Description!!', $mapRef->getDescription());
- }
-
- /**
- * @group DDC-117
- */
- public function testFetchDql()
- {
- $dql = "SELECT r, s FROM "."Doctrine\Tests\Models\DDC117\DDC117Reference r JOIN r.source s WHERE s.title = ?1";
- $refs = $this->_em->createQuery($dql)->setParameter(1, 'Foo')->getResult();
-
- $this->assertTrue(count($refs) > 0, "Has to contain at least one Reference.");
-
- foreach ($refs AS $ref) {
- $this->assertInstanceOf("Doctrine\Tests\Models\DDC117\DDC117Reference", $ref, "Contains only Reference instances.");
- $this->assertTrue($this->_em->contains($ref), "Contains Reference in the IdentityMap.");
- }
- }
-
- /**
- * @group DDC-117
- */
- public function testRemoveCompositeElement()
- {
- $idCriteria = array('source' => $this->article1->id(), 'target' => $this->article2->id());
-
- $refRep = $this->_em->find("Doctrine\Tests\Models\DDC117\DDC117Reference", $idCriteria);
-
- $this->_em->remove($refRep);
- $this->_em->flush();
- $this->_em->clear();
-
- $this->assertNull($this->_em->find("Doctrine\Tests\Models\DDC117\DDC117Reference", $idCriteria));
- }
-
- /**
- * @group DDC-117
- */
- public function testDqlRemoveCompositeElement()
- {
- $idCriteria = array('source' => $this->article1->id(), 'target' => $this->article2->id());
-
- $dql = "DELETE "."Doctrine\Tests\Models\DDC117\DDC117Reference r WHERE r.source = ?1 AND r.target = ?2";
- $this->_em->createQuery($dql)
- ->setParameter(1, $this->article1->id())
- ->setParameter(2, $this->article2->id())
- ->execute();
-
- $this->assertNull($this->_em->find("Doctrine\Tests\Models\DDC117\DDC117Reference", $idCriteria));
- }
-
- /**
- * @group DDC-117
- */
- public function testInverseSideAccess()
- {
- $this->article1 = $this->_em->find("Doctrine\Tests\Models\DDC117\DDC117Article", $this->article1->id());
-
- $this->assertEquals(1, count($this->article1->references()));
-
- foreach ($this->article1->references() AS $this->reference) {
- $this->assertInstanceOf("Doctrine\Tests\Models\DDC117\DDC117Reference", $this->reference);
- $this->assertSame($this->article1, $this->reference->source());
- }
-
- $this->_em->clear();
-
- $dql = 'SELECT a, r FROM '. 'Doctrine\Tests\Models\DDC117\DDC117Article a INNER JOIN a.references r WHERE a.id = ?1';
- $articleDql = $this->_em->createQuery($dql)
- ->setParameter(1, $this->article1->id())
- ->getSingleResult();
-
- $this->assertEquals(1, count($this->article1->references()));
-
- foreach ($this->article1->references() AS $this->reference) {
- $this->assertInstanceOf("Doctrine\Tests\Models\DDC117\DDC117Reference", $this->reference);
- $this->assertSame($this->article1, $this->reference->source());
- }
- }
-
- /**
- * @group DDC-117
- */
- public function testMixedCompositeKey()
- {
- $idCriteria = array('article' => $this->article1->id(), 'language' => 'en');
-
- $this->translation = $this->_em->find('Doctrine\Tests\Models\DDC117\DDC117Translation', $idCriteria);
- $this->assertInstanceOf('Doctrine\Tests\Models\DDC117\DDC117Translation', $this->translation);
-
- $this->assertSame($this->translation, $this->_em->find('Doctrine\Tests\Models\DDC117\DDC117Translation', $idCriteria));
-
- $this->_em->clear();
-
- $dql = 'SELECT t, a FROM ' . 'Doctrine\Tests\Models\DDC117\DDC117Translation t JOIN t.article a WHERE t.article = ?1 AND t.language = ?2';
- $dqlTrans = $this->_em->createQuery($dql)
- ->setParameter(1, $this->article1->id())
- ->setParameter(2, 'en')
- ->getSingleResult();
-
- $this->assertInstanceOf('Doctrine\Tests\Models\DDC117\DDC117Translation', $this->translation);
- }
-
- /**
- * @group DDC-117
- */
- public function testMixedCompositeKeyViolateUniqueness()
- {
- $this->article1 = $this->_em->find('Doctrine\Tests\Models\DDC117\DDC117Article', $this->article1->id());
- $this->article1->addTranslation('en', 'Bar');
- $this->article1->addTranslation('en', 'Baz');
-
- $exceptionThrown = false;
- try {
- // exception depending on the underyling Database Driver
- $this->_em->flush();
- } catch(\Exception $e) {
- $exceptionThrown = true;
- }
-
- $this->assertTrue($exceptionThrown, "The underlying database driver throws an exception.");
- }
-
- /**
- * @group DDC-117
- */
- public function testOneToOneForeignObjectId()
- {
- $this->article1 = new DDC117Article("Foo");
- $this->_em->persist($this->article1);
- $this->_em->flush();
-
- $this->articleDetails = new DDC117ArticleDetails($this->article1, "Very long text");
- $this->_em->persist($this->articleDetails);
- $this->_em->flush();
-
- $this->articleDetails->update("not so very long text!");
- $this->_em->flush();
- $this->_em->clear();
-
- /* @var $article DDC117Article */
- $article = $this->_em->find(get_class($this->article1), $this->article1->id());
- $this->assertEquals('not so very long text!', $article->getText());
- }
-
- /**
- * @group DDC-117
- */
- public function testOneToOneCascadeRemove()
- {
- $article = $this->_em->find(get_class($this->article1), $this->article1->id());
- $this->_em->remove($article);
- $this->_em->flush();
-
- $this->assertFalse($this->_em->contains($article->getDetails()));
- }
-
- /**
- * @group DDC-117
- */
- public function testOneToOneCascadePersist()
- {
- if (!$this->_em->getConnection()->getDatabasePlatform()->prefersSequences()) {
- $this->markTestSkipped('Test only works with databases that prefer sequences as ID strategy.');
- }
-
- $this->article1 = new DDC117Article("Foo");
-
- $this->articleDetails = new DDC117ArticleDetails($this->article1, "Very long text");
-
- $this->_em->persist($this->article1);
- $this->_em->flush();
- }
-
- /**
- * @group DDC-117
- */
- public function testReferencesToForeignKeyEntities()
- {
- $idCriteria = array('source' => $this->article1->id(), 'target' => $this->article2->id());
- $reference = $this->_em->find("Doctrine\Tests\Models\DDC117\DDC117Reference", $idCriteria);
-
- $idCriteria = array('article' => $this->article1->id(), 'language' => 'en');
- $translation = $this->_em->find('Doctrine\Tests\Models\DDC117\DDC117Translation', $idCriteria);
-
- $approveChanges = new DDC117ApproveChanges($reference->source()->getDetails(), $reference, $translation);
- $this->_em->persist($approveChanges);
- $this->_em->flush();
- $this->_em->clear();
-
- $approveChanges = $this->_em->find("Doctrine\Tests\Models\DDC117\DDC117ApproveChanges", $approveChanges->getId());
-
- $this->assertInstanceOf('Doctrine\Tests\Models\DDC117\DDC117ArticleDetails', $approveChanges->getArticleDetails());
- $this->assertInstanceOf('Doctrine\Tests\Models\DDC117\DDC117Reference', $approveChanges->getReference());
- $this->assertInstanceOf('Doctrine\Tests\Models\DDC117\DDC117Translation', $approveChanges->getTranslation());
- }
-
- /**
- * @group DDC-117
- */
- public function testLoadOneToManyCollectionOfForeignKeyEntities()
- {
- /* @var $article DDC117Article */
- $article = $this->_em->find(get_class($this->article1), $this->article1->id());
-
- $translations = $article->getTranslations();
- $this->assertFalse($translations->isInitialized());
- $this->assertContainsOnly('Doctrine\Tests\Models\DDC117\DDC117Translation', $translations);
- $this->assertTrue($translations->isInitialized());
- }
-
- /**
- * @group DDC-117
- */
- public function testLoadManyToManyCollectionOfForeignKeyEntities()
- {
- $editor = $this->loadEditorFixture();
-
- $this->assertFalse($editor->reviewingTranslations->isInitialized());
- $this->assertContainsOnly("Doctrine\Tests\Models\DDC117\DDC117Translation", $editor->reviewingTranslations);
- $this->assertTrue($editor->reviewingTranslations->isInitialized());
-
- $this->_em->clear();
-
- $dql = "SELECT e, t FROM Doctrine\Tests\Models\DDC117\DDC117Editor e JOIN e.reviewingTranslations t WHERE e.id = ?1";
- $editor = $this->_em->createQuery($dql)->setParameter(1, $editor->id)->getSingleResult();
- $this->assertTrue($editor->reviewingTranslations->isInitialized());
- $this->assertContainsOnly("Doctrine\Tests\Models\DDC117\DDC117Translation", $editor->reviewingTranslations);
- }
-
- /**
- * @group DDC-117
- */
- public function testClearManyToManyCollectionOfForeignKeyEntities()
- {
- $editor = $this->loadEditorFixture();
- $this->assertEquals(3, count($editor->reviewingTranslations));
-
- $editor->reviewingTranslations->clear();
- $this->_em->flush();
- $this->_em->clear();
-
- $editor = $this->_em->find(get_class($editor), $editor->id);
- $this->assertEquals(0, count($editor->reviewingTranslations));
- }
-
- /**
- * @group DDC-117
- */
- public function testLoadInverseManyToManyCollection()
- {
- $editor = $this->loadEditorFixture();
-
- $this->assertInstanceOf('Doctrine\Tests\Models\DDC117\DDC117Translation', $editor->reviewingTranslations[0]);
-
- $reviewedBy = $editor->reviewingTranslations[0]->getReviewedByEditors();
- $this->assertEquals(1, count($reviewedBy));
- $this->assertSame($editor, $reviewedBy[0]);
-
- $this->_em->clear();
-
- $dql = "SELECT t, e FROM Doctrine\Tests\Models\DDC117\DDC117Translation t ".
- "JOIN t.reviewedByEditors e WHERE t.article = ?1 AND t.language = ?2";
- $trans = $this->_em->createQuery($dql)
- ->setParameter(1, $this->translation->getArticleId())
- ->setParameter(2, $this->translation->getLanguage())
- ->getSingleResult();
-
- $this->assertInstanceOf('Doctrine\Tests\Models\DDC117\DDC117Translation', $trans);
- $this->assertContainsOnly('Doctrine\Tests\Models\DDC117\DDC117Editor', $trans->reviewedByEditors);
- $this->assertEquals(1, count($trans->reviewedByEditors));
- }
-
- /**
- * @group DDC-117
- */
- public function testLoadOneToManyOfSourceEntityWithAssociationIdentifier()
- {
- $editor = $this->loadEditorFixture();
-
- $editor->addLastTranslation($editor->reviewingTranslations[0]);
- $this->_em->flush();
- $this->_em->clear();
-
- $editor = $this->_em->find(get_class($editor), $editor->id);
- $lastTranslatedBy = $editor->reviewingTranslations[0]->getLastTranslatedBy();
- $lastTranslatedBy->count();
-
- $this->assertEquals(1, count($lastTranslatedBy));
- }
-
- /**
- * @return DDC117Editor
- */
- private function loadEditorFixture()
- {
- $editor = new DDC117Editor("beberlei");
-
- /* @var $article1 DDC117Article */
- $article1 = $this->_em->find(get_class($this->article1), $this->article1->id());
- foreach ($article1->getTranslations() AS $translation) {
- $editor->reviewingTranslations[] = $translation;
- }
-
- /* @var $article2 DDC117Article */
- $article2 = $this->_em->find(get_class($this->article2), $this->article2->id());
- $article2->addTranslation("de", "Vanille-Krapferl"); // omnomnom
- $article2->addTranslation("fr", "Sorry can't speak french!");
-
- foreach ($article2->getTranslations() AS $translation) {
- $this->_em->persist($translation); // otherwise persisting the editor won't work, reachability!
- $editor->reviewingTranslations[] = $translation;
- }
-
- $this->_em->persist($editor);
- $this->_em->flush();
- $this->_em->clear();
-
- return $this->_em->find(get_class($editor), $editor->id);
- }
-
- /**
- * @group DDC-1519
- */
- public function testMergeForeignKeyIdentifierEntity()
- {
- $idCriteria = array('source' => $this->article1->id(), 'target' => $this->article2->id());
-
- $refRep = $this->_em->find("Doctrine\Tests\Models\DDC117\DDC117Reference", $idCriteria);
-
- $this->_em->detach($refRep);
- $refRep = $this->_em->merge($refRep);
-
- $this->assertEquals($this->article1->id(), $refRep->source()->id());
- $this->assertEquals($this->article2->id(), $refRep->target()->id());
- }
- }
|