Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Functional / IndexByAssociationTest.php
1 <?php
2
3 namespace Doctrine\Tests\ORM\Functional;
4
5 use Doctrine\Tests\Models\StockExchange\Stock;
6 use Doctrine\Tests\Models\StockExchange\Market;
7 use Doctrine\Tests\Models\StockExchange\Bond;
8
9 require_once __DIR__ . '/../../TestInit.php';
10
11 /**
12  * @group DDC-250
13  */
14 class IndexByAssociationTest extends \Doctrine\Tests\OrmFunctionalTestCase
15 {
16     /**
17      * @var Doctrine\Tests\Models\StockExchange\Market
18      */
19     private $market;
20
21     private $bond;
22
23     public function setUp()
24     {
25         $this->useModelSet('stockexchange');
26         parent::setUp();
27         $this->loadFixture();
28     }
29
30     public function loadFixture()
31     {
32         $this->market = new Market("Some Exchange");
33         $stock1 = new Stock("AAPL", 10, $this->market);
34         $stock2 = new Stock("GOOG", 20, $this->market);
35
36         $this->bond = new Bond("MyBond");
37         $this->bond->addStock($stock1);
38         $this->bond->addStock($stock2);
39
40         $this->_em->persist($this->market);
41         $this->_em->persist($stock1);
42         $this->_em->persist($stock2);
43         $this->_em->persist($this->bond);
44         $this->_em->flush();
45         $this->_em->clear();
46     }
47
48     public function testManyToOneFinder()
49     {
50         /* @var $market Doctrine\Tests\Models\StockExchange\Market */
51         $market = $this->_em->find('Doctrine\Tests\Models\StockExchange\Market', $this->market->getId());
52
53         $this->assertEquals(2, count($market->stocks));
54         $this->assertTrue(isset($market->stocks['AAPL']), "AAPL symbol has to be key in indexed assocation.");
55         $this->assertTrue(isset($market->stocks['GOOG']), "GOOG symbol has to be key in indexed assocation.");
56         $this->assertEquals("AAPL", $market->stocks['AAPL']->getSymbol());
57         $this->assertEquals("GOOG", $market->stocks['GOOG']->getSymbol());
58     }
59
60     public function testManyToOneDQL()
61     {
62         $dql = "SELECT m, s FROM Doctrine\Tests\Models\StockExchange\Market m JOIN m.stocks s WHERE m.id = ?1";
63         $market = $this->_em->createQuery($dql)->setParameter(1, $this->market->getId())->getSingleResult();
64
65         $this->assertEquals(2, count($market->stocks));
66         $this->assertTrue(isset($market->stocks['AAPL']), "AAPL symbol has to be key in indexed assocation.");
67         $this->assertTrue(isset($market->stocks['GOOG']), "GOOG symbol has to be key in indexed assocation.");
68         $this->assertEquals("AAPL", $market->stocks['AAPL']->getSymbol());
69         $this->assertEquals("GOOG", $market->stocks['GOOG']->getSymbol());
70     }
71
72     public function testManyToMany()
73     {
74         $bond = $this->_em->find('Doctrine\Tests\Models\StockExchange\Bond', $this->bond->getId());
75
76         $this->assertEquals(2, count($bond->stocks));
77         $this->assertTrue(isset($bond->stocks['AAPL']), "AAPL symbol has to be key in indexed assocation.");
78         $this->assertTrue(isset($bond->stocks['GOOG']), "GOOG symbol has to be key in indexed assocation.");
79         $this->assertEquals("AAPL", $bond->stocks['AAPL']->getSymbol());
80         $this->assertEquals("GOOG", $bond->stocks['GOOG']->getSymbol());
81     }
82
83     public function testManytoManyDQL()
84     {
85         $dql = "SELECT b, s FROM Doctrine\Tests\Models\StockExchange\Bond b JOIN b.stocks s WHERE b.id = ?1";
86         $bond = $this->_em->createQuery($dql)->setParameter(1, $this->bond->getId())->getSingleResult();
87
88         $this->assertEquals(2, count($bond->stocks));
89         $this->assertTrue(isset($bond->stocks['AAPL']), "AAPL symbol has to be key in indexed assocation.");
90         $this->assertTrue(isset($bond->stocks['GOOG']), "GOOG symbol has to be key in indexed assocation.");
91         $this->assertEquals("AAPL", $bond->stocks['AAPL']->getSymbol());
92         $this->assertEquals("GOOG", $bond->stocks['GOOG']->getSymbol());
93     }
94
95     public function testDqlOverrideIndexBy()
96     {
97         $dql = "SELECT b, s FROM Doctrine\Tests\Models\StockExchange\Bond b JOIN b.stocks s INDEX BY s.id WHERE b.id = ?1";
98         $bond = $this->_em->createQuery($dql)->setParameter(1, $this->bond->getId())->getSingleResult();
99
100         $this->assertEquals(2, count($bond->stocks));
101         $this->assertFalse(isset($bond->stocks['AAPL']), "AAPL symbol not exists in re-indexed assocation.");
102         $this->assertFalse(isset($bond->stocks['GOOG']), "GOOG symbol not exists in re-indexed assocation.");
103     }
104 }
105