RedUNIT\Base\Bean::testBeanTainting PHP Метод

testBeanTainting() публичный Метод

Only fire update query if the bean really contains different values. But make sure beans several 'parents' away still get saved.
public testBeanTainting ( ) : void
Результат void
    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);
    }