parent
bab3a0ed5c
commit
b268f54189
|
|
@ -24,15 +24,99 @@ class BelongsToManyModelTest extends PluginTestCase
|
|||
$role3 = Role::create(['name' => "Manager", 'description' => "Budget"]);
|
||||
Model::reguard();
|
||||
|
||||
// Add to collection
|
||||
// Add/remove to collection
|
||||
$this->assertFalse($author->roles->contains($role1));
|
||||
$author->roles()->add($role1);
|
||||
|
||||
// TODO: Should this occur as part of add() above?
|
||||
// It probably should simply refresh the relation
|
||||
$author->roles->push($role1);
|
||||
|
||||
$author->roles()->add($role2);
|
||||
$this->assertTrue($author->roles->contains($role1));
|
||||
$this->assertTrue($author->roles->contains($role2));
|
||||
|
||||
// Set by Model object
|
||||
$author->roles = $role1;
|
||||
$this->assertEquals(1, $author->roles->count());
|
||||
$this->assertEquals('Designer', $author->roles->first()->name);
|
||||
|
||||
$author->roles = [$role1, $role2, $role3];
|
||||
$this->assertEquals(3, $author->roles->count());
|
||||
|
||||
// Set by primary key
|
||||
$author->roles = $role2->id;
|
||||
$this->assertEquals(1, $author->roles->count());
|
||||
$this->assertEquals('Programmer', $author->roles->first()->name);
|
||||
|
||||
$author->roles = [$role2->id, $role3->id];
|
||||
$this->assertEquals(2, $author->roles->count());
|
||||
|
||||
// Nullify
|
||||
$author->roles = null;
|
||||
$this->assertEquals(0, $author->roles->count());
|
||||
|
||||
// Deferred in memory
|
||||
$author->roles = [$role2->id, $role3->id];
|
||||
$this->assertEquals(2, $author->roles->count());
|
||||
$this->assertEquals('Programmer', $author->roles->first()->name);
|
||||
}
|
||||
|
||||
public function testGetRelationValue()
|
||||
{
|
||||
Model::unguard();
|
||||
$author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);
|
||||
$role1 = Role::create(['name' => "Designer", 'description' => "Quality"]);
|
||||
$role2 = Role::create(['name' => "Programmer", 'description' => "Speed"]);
|
||||
Model::reguard();
|
||||
|
||||
$author->roles()->add($role1);
|
||||
$author->roles()->add($role2);
|
||||
|
||||
$this->assertEquals([$role1->id, $role2->id], $author->getRelationValue('roles'));
|
||||
}
|
||||
|
||||
public function testDeferredBinding()
|
||||
{
|
||||
$sessionKey = uniqid('session_key', true);
|
||||
|
||||
Model::unguard();
|
||||
$author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);
|
||||
$role1 = Role::create(['name' => "Designer", 'description' => "Quality"]);
|
||||
$role2 = Role::create(['name' => "Programmer", 'description' => "Speed"]);
|
||||
Model::reguard();
|
||||
|
||||
// Deferred add
|
||||
$author->roles()->add($role1, $sessionKey);
|
||||
$author->roles()->add($role2, $sessionKey);
|
||||
$this->assertEmpty($author->roles);
|
||||
|
||||
$this->assertEquals(0, $author->roles()->count());
|
||||
$this->assertEquals(2, $author->roles()->withDeferred($sessionKey)->count());
|
||||
|
||||
// Get simple value (implicit)
|
||||
$author->reloadRelations();
|
||||
$author->sessionKey = $sessionKey;
|
||||
$this->assertEquals([$role1->id, $role2->id], $author->getRelationValue('roles'));
|
||||
|
||||
// Get simple value (explicit)
|
||||
$relatedIds = $author->roles()->getRelatedIds($sessionKey);
|
||||
$this->assertEquals([$role1->id, $role2->id], $relatedIds);
|
||||
|
||||
// Commit deferred
|
||||
$author->save(null, $sessionKey);
|
||||
$this->assertEquals(2, $author->roles()->count());
|
||||
$this->assertEquals('Designer', $author->roles->first()->name);
|
||||
|
||||
// New session
|
||||
$sessionKey = uniqid('session_key', true);
|
||||
|
||||
// Deferred remove
|
||||
$author->roles()->remove($role1, $sessionKey);
|
||||
$author->roles()->remove($role2, $sessionKey);
|
||||
$this->assertEquals(2, $author->roles()->count());
|
||||
$this->assertEquals(0, $author->roles()->withDeferred($sessionKey)->count());
|
||||
$this->assertEquals('Designer', $author->roles->first()->name);
|
||||
|
||||
// Commit deferred
|
||||
$author->save(null, $sessionKey);
|
||||
$this->assertEquals(0, $author->roles()->count());
|
||||
$this->assertEquals(0, $author->roles->count());
|
||||
}
|
||||
|
||||
public function testDetachAfterDelete()
|
||||
|
|
|
|||
Loading…
Reference in New Issue