public function testBeanTainting()
{
$logger = R::getDatabaseAdapter()->getDatabase()->getLogger();
list($i, $k, $c, $s) = R::dispenseAll('invoice,customer,city,state');
$i->customer = $k;
$i->status = 0;
$k->city = $c;
$c->state = $s;
$s->name = 'x';
R::store($i);
$i = $i->fresh();
asrt($i->customer->city->state->name, 'x');
$i->status = 1;
R::freeze(true);
$logger = R::debug(1, 1);
//do we properly skip unmodified but tainted parent beans?
R::store($i);
$numberOfUpdateQueries = $logger->grep('UPDATE');
asrt(count($numberOfUpdateQueries), 1);
//does cascade update still work?
$i = $i->fresh();
$i->customer->city->state->name = 'y';
R::store($i);
$i = $i->fresh();
asrt($i->customer->city->state->name, 'y');
$i = $i->fresh();
$differentCity = R::dispense('city');
R::store($differentCity);
$i->customer->city = $differentCity;
R::store($i);
$i = $i->fresh();
asrt($i->customer->city->id != $c->id, TRUE);
asrt(is_null($i->customer->city->state), TRUE);
$i->customer->city = NULL;
R::store($i);
$i = $i->fresh();
asrt(is_null($i->customer->city), TRUE);
$i->customer = $k;
$i->status = 0;
$k->city = $c;
$c->state = $s;
$s->name = 'x';
R::store($i);
R::freeze(FALSE);
$i = $i->fresh();
//can we still change remote parent?
$i->customer->city->name = 'q';
$logger->clear();
R::store($i);
$numberOfUpdateQueries = $logger->grep('UPDATE');
//print_r($logger->getLogs());
asrt(count($numberOfUpdateQueries), 1);
$i = $i->fresh();
asrt($i->customer->city->name, 'q');
//do we properly skip unmodified but tainted parent beans?
$i->status = 3;
$logger->clear();
R::store($i);
$numberOfUpdateQueries = $logger->grep('UPDATE');
asrt(count($numberOfUpdateQueries), 1);
}