Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Functional / OrderedCollectionTest.php
1 <?php
2
3 namespace Doctrine\Tests\ORM\Functional;
4
5 use Doctrine\Tests\Models\Routing\RoutingRoute;
6 use Doctrine\Tests\Models\Routing\RoutingLocation;
7 use Doctrine\Tests\Models\Routing\RoutingLeg;
8 use Doctrine\Tests\Models\Routing\RoutingRouteBooking;
9
10 require_once __DIR__ . '/../../TestInit.php';
11
12 class OrderedCollectionTest extends \Doctrine\Tests\OrmFunctionalTestCase
13 {
14     protected $locations = array();
15
16     public function setUp()
17     {
18         $this->useModelSet('routing');
19         parent::setUp();
20
21         $locations = array("Berlin", "Bonn", "Brasilia", "Atlanta");
22
23         foreach ($locations AS $locationName) {
24             $location = new RoutingLocation();
25             $location->name = $locationName;
26             $this->_em->persist($location);
27             $this->locations[$locationName] = $location;
28         }
29         $this->_em->flush();
30     }
31
32     public function createPersistedRouteWithLegs()
33     {
34         $route = new RoutingRoute();
35
36         $leg1 = new RoutingLeg();
37         $leg1->fromLocation = $this->locations['Berlin'];
38         $leg1->toLocation   = $this->locations['Bonn'];
39         $leg1->departureDate = new \DateTime("now");
40         $leg1->arrivalDate = new \DateTime("now +5 hours");
41
42         $leg2 = new RoutingLeg();
43         $leg2->fromLocation = $this->locations['Bonn'];
44         $leg2->toLocation   = $this->locations['Brasilia'];
45         $leg2->departureDate = new \DateTime("now +6 hours");
46         $leg2->arrivalDate = new \DateTime("now +24 hours");
47
48         $route->legs[] = $leg2;
49         $route->legs[] = $leg1;
50
51         $this->_em->persist($route);
52         $this->_em->flush();
53         $routeId = $route->id;
54         $this->_em->clear();
55
56         return $routeId;
57     }
58
59     public function testLazyManyToManyCollection_IsRetrievedWithOrderByClause()
60     {
61         $routeId = $this->createPersistedRouteWithLegs();
62
63         $route = $this->_em->find('Doctrine\Tests\Models\Routing\RoutingRoute', $routeId);
64
65         $this->assertEquals(2, count($route->legs));
66         $this->assertEquals("Berlin", $route->legs[0]->fromLocation->getName());
67         $this->assertEquals("Bonn", $route->legs[1]->fromLocation->getName());
68     }
69
70     public function testLazyOneToManyCollection_IsRetrievedWithOrderByClause()
71     {
72         $route = new RoutingRoute();
73
74         $this->_em->persist($route);
75         $this->_em->flush();
76         $routeId = $route->id;
77
78         $booking1 = new RoutingRouteBooking();
79         $booking1->passengerName = "Guilherme";
80         $booking2 = new RoutingRouteBooking();
81         $booking2->passengerName = "Benjamin";
82
83         $route->bookings[] = $booking1;
84         $booking1->route = $route;
85         $route->bookings[] = $booking2;
86         $booking2->route = $route;
87
88         $this->_em->persist($booking1);
89         $this->_em->persist($booking2);
90
91         $this->_em->flush();
92         $this->_em->clear();
93
94         $route = $this->_em->find('Doctrine\Tests\Models\Routing\RoutingRoute', $routeId);
95
96         $this->assertEquals(2, count($route->bookings));
97         $this->assertEquals('Benjamin', $route->bookings[0]->getPassengerName());
98         $this->assertEquals('Guilherme', $route->bookings[1]->getPassengerName());
99     }
100
101     public function testOrderedResultFromDqlQuery()
102     {
103         $routeId = $this->createPersistedRouteWithLegs();
104
105         $route = $this->_em->createQuery("SELECT r, l FROM Doctrine\Tests\Models\Routing\RoutingRoute r JOIN r.legs l WHERE r.id = ?1")
106                            ->setParameter(1, $routeId)
107                            ->getSingleResult();
108
109         $this->assertEquals(2, count($route->legs));
110         $this->assertEquals("Berlin", $route->legs[0]->fromLocation->getName());
111         $this->assertEquals("Bonn", $route->legs[1]->fromLocation->getName());
112     }
113 }