RedUNIT\Base\Bean::testUnsettingAListAndShadow PHP Method

testUnsettingAListAndShadow() public method

Tests the effects of unsetting on the shadow of a list.
public testUnsettingAListAndShadow ( ) : void
return void
    public function testUnsettingAListAndShadow()
    {
        $book = $this->_createBook();
        //should work with ownPage and ownPageList as well...
        unset($book->ownPageList);
        R::store($book);
        $book = $book->fresh();
        asrt(count($book->ownPage), 2);
        unset($book->ownPage);
        //shadow should be reloaded as well...
        $book->with(' LIMIT 1 ')->ownPage;
        R::store($book);
        $book = $book->fresh();
        asrt(count($book->ownPage), 2);
        asrt(count($book->getMeta('sys.shadow.ownPage')), 2);
        unset($book->ownPage);
        asrt($book->getMeta('sys.shadow.ownPage'), NULL);
        //no load must clear shadow as well...
        $book->noLoad()->ownPage[] = R::dispense('page');
        asrt(count($book->getMeta('sys.shadow.ownPage')), 0);
        R::store($book);
        $book = $book->fresh();
        asrt(count($book->ownPage), 3);
        $lists = array('ownPage', 'ownPageList', 'xownPage', 'xownPageList', 'sharedPage', 'sharedPageList');
        foreach ($lists as $list) {
            $book = R::dispense('book');
            $book->{$list};
            $shadowKey = $list;
            if (strpos($list, 'x') === 0) {
                $shadowKey = substr($shadowKey, 1);
            }
            $shadowKey = preg_replace('/List$/', '', $shadowKey);
            asrt(is_array($book->getMeta('sys.shadow.' . $shadowKey)), TRUE);
            unset($book->{$list});
            asrt($book->getMeta('sys.shadow.' . $shadowKey), NULL);
            $book->{$list};
            //reloading brings back shadow
            asrt(is_array($book->getMeta('sys.shadow.' . $shadowKey)), TRUE);
            $book->{$list} = array();
            //keeps shadow (very important to compare deletions!)
            asrt(is_array($book->getMeta('sys.shadow.' . $shadowKey)), TRUE);
            R::store($book);
            //clears shadow
            $book->alias('magazine')->{$list};
            //reloading with alias also brings back shadow
            unset($book->{$list});
            asrt($book->getMeta('sys.shadow.' . $shadowKey), NULL);
            $book = $book->fresh();
            //clears shadow, reload
            asrt($book->getMeta('sys.shadow.' . $shadowKey), NULL);
            $book->noLoad()->{$list};
            //reloading with noload also brings back shadow
            asrt(is_array($book->getMeta('sys.shadow.' . $shadowKey)), TRUE);
            asrt(count($book->getMeta('sys.shadow.' . $shadowKey)), 0);
            $book = $book->fresh();
            //clears shadow, reload
            asrt($book->getMeta('sys.shadow.' . $shadowKey), NULL);
            $book->all()->{$list};
            //reloading with all also brings back shadow
            asrt(is_array($book->getMeta('sys.shadow.' . $shadowKey)), TRUE);
            $book = $book->fresh();
            //clears shadow, reload
            asrt($book->getMeta('sys.shadow.' . $shadowKey), NULL);
            $book->with(' LIMIT 1 ')->{$list};
            //reloading with with- all also brings back shadow
            asrt(is_array($book->getMeta('sys.shadow.' . $shadowKey)), TRUE);
            $book = $book->fresh();
            //clears shadow, reload
            asrt($book->getMeta('sys.shadow.' . $shadowKey), NULL);
            $book->{$list} = array();
            //keeps shadow (very important to compare deletions!)
            asrt(is_array($book->getMeta('sys.shadow.' . $shadowKey)), TRUE);
            $book = $book->fresh();
            //clears shadow, reload
            asrt($book->getMeta('sys.shadow.' . $shadowKey), NULL);
            $book->{$list} = array();
            //keeps shadow (very important to compare deletions!)
            asrt(is_array($book->getMeta('sys.shadow.' . $shadowKey)), TRUE);
            R::trash($book);
            asrt($book->getMeta('sys.shadow.' . $shadowKey), NULL);
        }
        //no shadow for parent bean
        $book = $book->fresh();
        $book->author = R::dispense('author');
        asrt($book->getMeta('sys.shadow.author'), NULL);
        R::store($book);
        $book = $book->fresh();
        unset($book->author);
        //we can unset and it does not remove
        R::store($book);
        $book = $book->fresh();
        asrt(is_object($book->author), TRUE);
        //but we can also remove
        $book->author = NULL;
        R::store($book);
        $book = $book->fresh();
        asrt($book->author, NULL);
    }