2015-09-15 19:53:36 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
use Database\Tester\Models\Post;
|
|
|
|
|
use Database\Tester\Models\Author;
|
|
|
|
|
use October\Rain\Database\Models\DeferredBinding;
|
|
|
|
|
|
2020-02-07 08:59:39 +00:00
|
|
|
class DeferredBindingTest extends PluginTestCase
|
2015-09-15 19:53:36 +00:00
|
|
|
{
|
2019-06-12 16:22:20 +00:00
|
|
|
public function setUp() : void
|
2015-09-15 19:53:36 +00:00
|
|
|
{
|
|
|
|
|
parent::setUp();
|
|
|
|
|
|
|
|
|
|
include_once base_path().'/tests/fixtures/plugins/database/tester/models/Post.php';
|
|
|
|
|
include_once base_path().'/tests/fixtures/plugins/database/tester/models/Author.php';
|
|
|
|
|
|
|
|
|
|
$this->runPluginRefreshCommand('Database.Tester');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testNegatedBinding()
|
|
|
|
|
{
|
|
|
|
|
$sessionKey = uniqid('session_key', true);
|
|
|
|
|
DeferredBinding::truncate();
|
|
|
|
|
|
|
|
|
|
Model::unguard();
|
|
|
|
|
$author = Author::make(['name' => 'Stevie']);
|
|
|
|
|
$post = Post::create(['title' => "First post"]);
|
|
|
|
|
$post2 = Post::create(['title' => "Second post"]);
|
|
|
|
|
Model::reguard();
|
|
|
|
|
|
|
|
|
|
$author->posts()->add($post, $sessionKey);
|
|
|
|
|
$this->assertEquals(1, DeferredBinding::count());
|
|
|
|
|
|
|
|
|
|
// Skip repeat bindings
|
|
|
|
|
$author->posts()->add($post, $sessionKey);
|
|
|
|
|
$this->assertEquals(1, DeferredBinding::count());
|
|
|
|
|
|
|
|
|
|
// Remove add-delete pairs
|
|
|
|
|
$author->posts()->remove($post, $sessionKey);
|
|
|
|
|
$this->assertEquals(0, DeferredBinding::count());
|
|
|
|
|
|
|
|
|
|
// Multi ball
|
|
|
|
|
$sessionKey = uniqid('session_key', true);
|
|
|
|
|
$author->posts()->add($post, $sessionKey);
|
|
|
|
|
$author->posts()->add($post, $sessionKey);
|
|
|
|
|
$author->posts()->add($post, $sessionKey);
|
|
|
|
|
$author->posts()->add($post, $sessionKey);
|
|
|
|
|
$author->posts()->add($post2, $sessionKey);
|
|
|
|
|
$author->posts()->add($post2, $sessionKey);
|
|
|
|
|
$author->posts()->add($post2, $sessionKey);
|
|
|
|
|
$author->posts()->add($post2, $sessionKey);
|
|
|
|
|
$author->posts()->add($post2, $sessionKey);
|
|
|
|
|
$this->assertEquals(2, DeferredBinding::count());
|
|
|
|
|
|
|
|
|
|
// Clean up add-delete pairs
|
|
|
|
|
$author->posts()->remove($post, $sessionKey);
|
|
|
|
|
$author->posts()->remove($post2, $sessionKey);
|
|
|
|
|
$this->assertEquals(0, DeferredBinding::count());
|
|
|
|
|
|
|
|
|
|
// Double negative
|
|
|
|
|
$author->posts()->remove($post, $sessionKey);
|
|
|
|
|
$author->posts()->remove($post2, $sessionKey);
|
|
|
|
|
$this->assertEquals(2, DeferredBinding::count());
|
|
|
|
|
|
|
|
|
|
// Skip repeat bindings
|
|
|
|
|
$author->posts()->remove($post, $sessionKey);
|
|
|
|
|
$author->posts()->remove($post2, $sessionKey);
|
|
|
|
|
$this->assertEquals(2, DeferredBinding::count());
|
|
|
|
|
|
|
|
|
|
// Clean up add-delete pairs again
|
|
|
|
|
$author->posts()->add($post, $sessionKey);
|
|
|
|
|
$author->posts()->add($post2, $sessionKey);
|
|
|
|
|
$this->assertEquals(0, DeferredBinding::count());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testCancelBinding()
|
|
|
|
|
{
|
|
|
|
|
$sessionKey = uniqid('session_key', true);
|
|
|
|
|
DeferredBinding::truncate();
|
|
|
|
|
|
|
|
|
|
Model::unguard();
|
|
|
|
|
$author = Author::make(['name' => 'Stevie']);
|
|
|
|
|
$post = Post::create(['title' => "First post"]);
|
|
|
|
|
Model::reguard();
|
|
|
|
|
|
|
|
|
|
$author->posts()->add($post, $sessionKey);
|
|
|
|
|
$this->assertEquals(1, DeferredBinding::count());
|
|
|
|
|
|
|
|
|
|
$author->cancelDeferred($sessionKey);
|
|
|
|
|
$this->assertEquals(0, DeferredBinding::count());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testCommitBinding()
|
|
|
|
|
{
|
|
|
|
|
$sessionKey = uniqid('session_key', true);
|
|
|
|
|
DeferredBinding::truncate();
|
|
|
|
|
|
|
|
|
|
Model::unguard();
|
|
|
|
|
$author = Author::make(['name' => 'Stevie']);
|
|
|
|
|
$post = Post::create(['title' => "First post"]);
|
|
|
|
|
Model::reguard();
|
|
|
|
|
|
|
|
|
|
$author->posts()->add($post, $sessionKey);
|
|
|
|
|
$this->assertEquals(1, DeferredBinding::count());
|
|
|
|
|
|
|
|
|
|
$author->commitDeferred($sessionKey);
|
|
|
|
|
$this->assertEquals(0, DeferredBinding::count());
|
|
|
|
|
}
|
2017-04-24 11:38:19 +00:00
|
|
|
}
|