public function testUpdate()
{
list($conn, $query) = $this->getMocks();
$mockRegistered = m::mock('Xpressengine\\Permission\\Registered');
$mockRegistered->id = 1;
$mockRegistered->shouldReceive('getOriginal')->andReturn(['id' => 1, 'type' => 'instance', 'name' => 'board.notice', 'grants' => '{"access":{"type":"power","value":"guest"},"create":{"type":"power","value":"super"}}']);
$mockRegistered->shouldReceive('diff')->andReturn(['grants' => '{"access":{"type":"power","value":"guest"},"create":{"type":"power","value":"member"}}']);
$conn->shouldReceive('table')->andReturn($query);
$query->shouldReceive('where')->once()->with('id', 1)->andReturn($query);
$query->shouldReceive('update')->once()->with(m::on(function ($array) {
return $array['grants'] === '{"access":{"type":"power","value":"guest"},"create":{"type":"power","value":"member"}}';
}))->andReturnNull();
$instance = new PermissionRepository($conn);
$registered = $instance->update($mockRegistered);
$this->assertEquals(1, $registered->id);
$this->assertEquals(['type' => 'power', 'value' => 'member'], $registered['create']);
$this->assertEquals('board.notice', $registered->name);
$this->assertEquals('instance', $registered->type);
}