public function testEventsTriggering()
 {
     //model
     $ctx = $this->setUpEventHandlers('construct', 'model.construct');
     $m = new Book();
     $this->assertEventTriggered('On new model construct', $ctx, 1, 1);
     $ctx = $this->setUpEventHandlers('model.insert.post', 'model.insert.pre', 'model.save.pre', 'model.save.post');
     $m->save();
     $this->assertEventTriggered('On new model insert', $ctx, 1, 1, 1, 1);
     $ctx = $this->setUpEventHandlers('model.update.post', 'model.update.pre', 'model.save.pre', 'model.save.post', 'update.pre', 'update.post');
     $m->setTitle('title');
     $m->save();
     $this->assertEventTriggered('On model update', $ctx, 1, 1, 1, 1, 1, 1);
     $ctx = $this->setUpEventHandlers('model.delete.post', 'model.delete.pre', 'delete.pre', 'delete.post');
     $m->delete();
     $this->assertEventTriggered('On model delete', $ctx, 1, 1, 2, 2);
     // 2,2 for pre/postDelete from Query object
     //query
     $ctx = $this->setUpEventHandlers('construct', 'query.construct');
     $q = new BookQuery();
     $this->assertEventTriggered('On new query construct', $ctx, 1, 1);
     $ctx = $this->setUpEventHandlers('query.update.post', 'query.update.pre', 'update.pre', 'update.post');
     $q->update(array('Title' => 'the title'));
     $this->assertEventTriggered('On query update', $ctx, 1, 1, 1, 1);
     $ctx = $this->setUpEventHandlers('query.delete.post', 'query.delete.pre', 'delete.pre', 'delete.post');
     $q->filterByTitle('test')->delete();
     $this->assertEventTriggered('On query delete', $ctx, 1, 1, 1, 1);
     $ctx = $this->setUpEventHandlers('query.select.pre');
     $q->find();
     $this->assertEventTriggered('On query select', $ctx, 1);
     //connection
     $ctx = $this->setUpEventHandlers('connection.create');
     $con = new EventPropelPDO("sqlite::memory:");
     $this->assertEventTriggered('On connection create', $ctx, 1);
     $ctx = $this->setUpEventHandlers('connection.commit.pre', 'connection.commit.post');
     $con = \Propel::getConnection();
     $con->beginTransaction();
     $con->beginTransaction();
     $con->commit();
     $this->assertEventTriggered('On connection nested commt', $ctx, 0, 0);
     $con->commit();
     $this->assertEventTriggered('On connection commt', $ctx, 1, 1);
     $ctx = $this->setUpEventHandlers('connection.rollback.pre', 'connection.rollback.post');
     $con = \Propel::getConnection();
     $con->beginTransaction();
     $con->beginTransaction();
     $con->rollBack();
     $this->assertEventTriggered('On connection nested rollback', $ctx, 0, 0);
     $con->rollBack();
     $this->assertEventTriggered('On connection rollback', $ctx, 1, 1);
 }
 public function testQueryModelClassOverride()
 {
     $manualFirst = 'Glorpen\\Propel\\PropelBundle\\Tests\\Fixtures\\Model\\ManualBook';
     $manualSecond = 'Glorpen\\Propel\\PropelBundle\\Tests\\Fixtures\\Model\\ManualSecondBook';
     \Propel::disableInstancePooling();
     $o = $this->setUpListener();
     $p = new TestOMProvider(function ($row, $cols) use($manualFirst, $manualSecond) {
         if ($row[0] == 1) {
             return $manualFirst;
         } else {
             return $manualSecond;
         }
     }, array($manualFirst => self::$modelClass, $manualSecond => self::$modelClass));
     $o->addProvider($p);
     $b = new Book();
     $b->setTitle("extended-title");
     $b->save();
     $b = new Book();
     $b->setTitle("extended-title2");
     $b->save();
     $manual1 = BookQuery::create()->filterById(1)->findOne();
     $this->assertInstanceOf($manualFirst, $manual1);
     $manual2 = BookQuery::create()->filterById(2)->findOne();
     $this->assertInstanceOf($manualSecond, $manual2);
 }