Skip to content

Commit

Permalink
Add tests for afterSaveCommit
Browse files Browse the repository at this point in the history
  • Loading branch information
ADmad committed Feb 26, 2015
1 parent 90845c4 commit 3b0c4b9
Showing 1 changed file with 88 additions and 0 deletions.
88 changes: 88 additions & 0 deletions tests/TestCase/ORM/TableTest.php
Expand Up @@ -1764,9 +1764,51 @@ public function testAfterSave()
$called = true;
};
$table->eventManager()->attach($listener, 'Model.afterSave');

$calledAfterCommit = false;
$listenerAfterCommit = function ($e, $entity, $options) use ($data, &$calledAfterCommit) {
$this->assertSame($data, $entity);
$calledAfterCommit = true;
};
$table->eventManager()->attach($listenerAfterCommit, 'Model.afterSaveCommit');

$this->assertSame($data, $table->save($data));
$this->assertEquals($data->id, self::$nextUserId);
$this->assertTrue($called);
$this->assertTrue($calledAfterCommit);
}

/**
* Asserts that afterSaveCommit is not triggered for non-atomic saves
*
* @return void
*/
public function testAfterSaveCommitForNonAtomic()
{
$table = TableRegistry::get('users');
$data = new \Cake\ORM\Entity([
'username' => 'superuser',
'created' => new Time('2013-10-10 00:00'),
'updated' => new Time('2013-10-10 00:00')
]);

$called = false;
$listener = function ($e, $entity, $options) use ($data, &$called) {
$this->assertSame($data, $entity);
$called = true;
};
$table->eventManager()->attach($listener, 'Model.afterSave');

$calledAfterCommit = false;
$listenerAfterCommit = function ($e, $entity, $options) use ($data, &$calledAfterCommit) {
$calledAfterCommit = true;
};
$table->eventManager()->attach($listenerAfterCommit, 'Model.afterSaveCommit');

$this->assertSame($data, $table->save($data, ['atomic' => false]));
$this->assertEquals($data->id, self::$nextUserId);
$this->assertTrue($called);
$this->assertFalse($calledAfterCommit);
}

/**
Expand Down Expand Up @@ -1808,8 +1850,54 @@ public function testAfterSaveNotCalled()
$called = true;
};
$table->eventManager()->attach($listener, 'Model.afterSave');

$calledAfterCommit = false;
$listenerAfterCommit = function ($e, $entity, $options) use ($data, &$calledAfterCommit) {
$calledAfterCommit = true;
};
$table->eventManager()->attach($listenerAfterCommit, 'Model.afterSaveCommit');

$this->assertFalse($table->save($data));
$this->assertFalse($called);
$this->assertFalse($calledAfterCommit);
}

/**
* Asserts that afterSaveCommit callback is triggered only for primary table
*
* @group save
* @return void
*/
public function testAfterSaveCommitTriggeredOnlyForPrimaryTable()
{
$entity = new \Cake\ORM\Entity([
'title' => 'A Title',
'body' => 'A body'
]);
$entity->author = new \Cake\ORM\Entity([
'name' => 'Jose'
]);

$table = TableRegistry::get('articles');
$table->belongsTo('authors');

$calledForArticle = false;
$listenerForArticle = function ($e, $entity, $options) use (&$calledForArticle) {
$calledForArticle = true;
};
$table->eventManager()->attach($listenerForArticle, 'Model.afterSaveCommit');

$calledForAuthor = false;
$listenerForAuthor = function ($e, $entity, $options) use (&$calledForAuthor) {
$calledForAuthor = true;
};
$table->authors->eventManager()->attach($listenerForAuthor, 'Model.afterSaveCommit');

$this->assertSame($entity, $table->save($entity));
$this->assertFalse($entity->isNew());
$this->assertFalse($entity->author->isNew());
$this->assertTrue($calledForArticle);
$this->assertFalse($calledForAuthor);
}

/**
Expand Down

0 comments on commit 3b0c4b9

Please sign in to comment.