Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Functional / Ticket / DDC345Test.php
1 <?php
2
3 namespace Doctrine\Tests\ORM\Functional\Ticket;
4
5 require_once __DIR__ . '/../../../TestInit.php';
6
7 class DDC345Test extends \Doctrine\Tests\OrmFunctionalTestCase
8 {
9     protected function setUp()
10     {
11         parent::setUp();
12         //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
13         $this->_schemaTool->createSchema(array(
14             $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC345User'),
15             $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC345Group'),
16             $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC345Membership'),
17         ));
18     }
19
20     public function testTwoIterateHydrations()
21     {
22         // Create User
23         $user = new DDC345User;
24         $user->name = 'Test User';
25         $this->_em->persist($user); // $em->flush() does not change much here
26
27         // Create Group
28         $group = new DDC345Group;
29         $group->name = 'Test Group';
30         $this->_em->persist($group); // $em->flush() does not change much here
31
32         $membership = new DDC345Membership;
33         $membership->group = $group;
34         $membership->user = $user;
35         $membership->state = 'active';
36
37         //$this->_em->persist($membership); // COMMENT OUT TO SEE BUG
38         /*
39         This should be not necessary, but without, its PrePersist is called twice,
40         $membership seems to be persisted twice, but all properties but the
41         ones set by LifecycleCallbacks are deleted.
42         */
43
44         $user->Memberships->add($membership);
45         $group->Memberships->add($membership);
46
47         $this->_em->flush();
48
49         $this->assertEquals(1, $membership->prePersistCallCount);
50         $this->assertEquals(0, $membership->preUpdateCallCount);
51         $this->assertInstanceOf('DateTime', $membership->updated);
52     }
53 }
54
55 /**
56  * @Entity
57  */
58 class DDC345User
59 {
60     /**
61      * @Id
62      * @Column(type="integer")
63      * @GeneratedValue
64      */
65     public $id;
66
67     /** @Column(type="string") */
68     public $name;
69
70     /** @OneToMany(targetEntity="DDC345Membership", mappedBy="user", cascade={"persist"}) */
71     public $Memberships;
72
73     public function __construct()
74     {
75         $this->Memberships = new \Doctrine\Common\Collections\ArrayCollection;
76     }
77 }
78
79 /**
80  * @Entity
81  */
82 class DDC345Group
83 {
84     /**
85      * @Id
86      * @Column(type="integer")
87      * @GeneratedValue
88      */
89     public $id;
90
91     /** @Column(type="string") */
92     public $name;
93
94     /** @OneToMany(targetEntity="DDC345Membership", mappedBy="group", cascade={"persist"}) */
95     public $Memberships;
96
97
98     public function __construct()
99     {
100         $this->Memberships = new \Doctrine\Common\Collections\ArrayCollection;
101     }
102 }
103
104 /**
105  * @Entity
106  * @HasLifecycleCallbacks
107  * @Table(name="ddc345_memberships", uniqueConstraints={
108  *      @UniqueConstraint(name="ddc345_memship_fks", columns={"user_id","group_id"})
109  * })
110  */
111 class DDC345Membership
112 {
113     /**
114      * @Id
115      * @Column(type="integer")
116      * @GeneratedValue
117      */
118     public $id;
119
120     /**
121      * @OneToOne(targetEntity="DDC345User", inversedBy="Memberships")
122      * @JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
123      */
124     public $user;
125
126     /**
127      * @OneToOne(targetEntity="DDC345Group", inversedBy="Memberships")
128      * @JoinColumn(name="group_id", referencedColumnName="id", nullable=false)
129      */
130     public $group;
131
132     /** @Column(type="string") */
133     public $state;
134
135     /** @Column(type="datetime") */
136     public $updated;
137
138     public $prePersistCallCount = 0;
139     public $preUpdateCallCount = 0;
140
141     /** @PrePersist */
142     public function doStuffOnPrePersist()
143     {
144         //echo "***** PrePersist\n";
145         ++$this->prePersistCallCount;
146         $this->updated = new \DateTime;
147     }
148
149     /** @PreUpdate */
150     public function doStuffOnPreUpdate()
151     {
152         //echo "***** PreUpdate\n";
153         ++$this->preUpdateCallCount;
154         $this->updated = new \DateTime;
155     }
156 }
157