123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- <?php
- namespace Doctrine\Tests\ORM\Functional;
-
- use Doctrine\Common\Collections\ArrayCollection,
- Doctrine\Common\NotifyPropertyChanged,
- Doctrine\Common\PropertyChangedListener;
-
- require_once __DIR__ . '/../../TestInit.php';
-
- /**
- * NativeQueryTest
- *
- * @author robo
- */
- class NotifyPolicyTest extends \Doctrine\Tests\OrmFunctionalTestCase
- {
- protected function setUp() {
- parent::setUp();
- try {
- $this->_schemaTool->createSchema(array(
- $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\NotifyUser'),
- $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\NotifyGroup')
- ));
- } catch (\Exception $e) {
- // Swallow all exceptions. We do not test the schema tool here.
- }
- }
-
- public function testChangeTracking()
- {
- //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
-
- $user = new NotifyUser();
- $group = new NotifyGroup();
- $user->setName('roman');
- $group->setName('dev');
-
- $user->getGroups()->add($group);
- $group->getUsers()->add($user);
-
- $this->_em->persist($user);
- $this->_em->persist($group);
- $this->_em->flush();
- $this->_em->clear();
-
- $userId = $user->getId();
- $groupId = $group->getId();
- unset($user, $group);
-
- $user = $this->_em->find(__NAMESPACE__.'\NotifyUser', $userId);
- $this->assertEquals(1, $user->getGroups()->count());
- $group = $this->_em->find(__NAMESPACE__.'\NotifyGroup', $groupId);
- $this->assertEquals(1, $group->getUsers()->count());
-
- $group2 = new NotifyGroup();
- $group2->setName('nerds');
- $this->_em->persist($group2);
- $user->getGroups()->add($group2);
- $group2->getUsers()->add($user);
-
- $group->setName('geeks');
-
- $this->_em->flush();
- $this->_em->clear();
-
- $group2Id = $group2->getId();
- unset($group2, $user);
-
- $user = $this->_em->find(__NAMESPACE__.'\NotifyUser', $userId);
- $this->assertEquals(2, $user->getGroups()->count());
- $group2 = $this->_em->find(__NAMESPACE__.'\NotifyGroup', $group2Id);
- $this->assertEquals(1, $group2->getUsers()->count());
- $group = $this->_em->find(__NAMESPACE__.'\NotifyGroup', $groupId);
- $this->assertEquals(1, $group->getUsers()->count());
- $this->assertEquals('geeks', $group->getName());
- }
- }
-
- class NotifyBaseEntity implements NotifyPropertyChanged {
- private $listeners = array();
-
- public function addPropertyChangedListener(PropertyChangedListener $listener) {
- $this->listeners[] = $listener;
- }
-
- protected function onPropertyChanged($propName, $oldValue, $newValue) {
- if ($this->listeners) {
- foreach ($this->listeners as $listener) {
- $listener->propertyChanged($this, $propName, $oldValue, $newValue);
- }
- }
- }
- }
-
- /** @Entity @ChangeTrackingPolicy("NOTIFY") */
- class NotifyUser extends NotifyBaseEntity {
- /** @Id @Column(type="integer") @GeneratedValue */
- private $id;
-
- /** @Column */
- private $name;
-
- /** @ManyToMany(targetEntity="NotifyGroup") */
- private $groups;
-
- function __construct() {
- $this->groups = new ArrayCollection;
- }
-
- function getId() {
- return $this->id;
- }
-
- function getName() {
- return $this->name;
- }
-
- function setName($name) {
- $this->onPropertyChanged('name', $this->name, $name);
- $this->name = $name;
- }
-
- function getGroups() {
- return $this->groups;
- }
- }
-
- /** @Entity */
- class NotifyGroup extends NotifyBaseEntity {
- /** @Id @Column(type="integer") @GeneratedValue */
- private $id;
-
- /** @Column */
- private $name;
-
- /** @ManyToMany(targetEntity="NotifyUser", mappedBy="groups") */
- private $users;
-
- function __construct() {
- $this->users = new ArrayCollection;
- }
-
- function getId() {
- return $this->id;
- }
-
- function getName() {
- return $this->name;
- }
-
- function setName($name) {
- $this->onPropertyChanged('name', $this->name, $name);
- $this->name = $name;
- }
-
- function getUsers() {
- return $this->users;
- }
- }
-
|