RedUNIT\Base\With::testWhenToReload PHP Method

testWhenToReload() public method

Use UNSET to reload a parent bean. Use UNSET or a modifier (with, withCondition, all) to reload a list. Use noLoad() to obtain an empty list - does not reload but sets an empty array.
public testWhenToReload ( ) : void
return void
    public function testWhenToReload()
    {
        $book = R::dispense('book');
        $book->ownPage = R::dispense('page', 3);
        $book->author = R::dispense('author');
        $book->coauthor = R::dispense('author');
        R::store($book);
        $book = $book->fresh();
        $firstPage = reset($book->ownPage);
        $id = $firstPage->id;
        $book->ownPage[$id]->title = 'a';
        //Do not reload an own list after manipulations
        asrt($book->ownPage[$id]->title, 'a');
        //dont reload!
        $book->ownPage[] = R::dispense('page');
        //dont reload!
        asrt($book->ownPage[$id]->title, 'a');
        //dont reload!
        asrt($book->ownPageList[$id]->title, 'a');
        //dont reload!
        asrt($book->xownPageList[$id]->title, 'a');
        //dont reload!
        asrt($book->xownPage[$id]->title, 'a');
        //dont reload!
        asrt(count($book->ownPageList), 4);
        //now trigger reload
        unset($book->ownPageList);
        asrt(count($book->ownPageList), 3);
        $book->ownPage[] = R::dispense('page');
        asrt(count($book->ownPageList), 4);
        //now trigger reload
        unset($book->xownPageList);
        asrt(count($book->ownPageList), 3);
        $book->ownPage[] = R::dispense('page');
        asrt(count($book->ownPageList), 4);
        //now trigger reload
        unset($book->xownPage);
        asrt(count($book->ownPageList), 3);
        $book->ownPage[] = R::dispense('page');
        asrt(count($book->ownPageList), 4);
        //now trigger reload
        unset($book->ownPage);
        asrt(count($book->ownPageList), 3);
        $book->ownPage[] = R::dispense('page');
        asrt(count($book->ownPageList), 4);
        //now trigger reload
        $book->all()->ownPage;
        asrt(count($book->ownPageList), 3);
        $book->ownPage[] = R::dispense('page');
        asrt(count($book->ownPageList), 4);
        //now trigger reload
        $book->all()->xownPage;
        asrt(count($book->ownPageList), 3);
        $book->ownPage[] = R::dispense('page');
        asrt(count($book->ownPageList), 4);
        //now trigger reload
        $book->all()->ownPageList;
        asrt(count($book->ownPageList), 3);
        $book->ownPage[] = R::dispense('page');
        asrt(count($book->ownPageList), 4);
        //now trigger reload
        $book->all()->xownPageList;
        asrt(count($book->ownPageList), 3);
        $book->ownPage[] = R::dispense('page');
        asrt(count($book->ownPageList), 4);
        //Do not reload an own list if told to not reload using noLoad()
        $book->noLoad()->with(' LIMIT 1 ')->ownPage;
        //dont reload!
        asrt(count($book->xownPage), 0);
        //dont reload!
        $book->noLoad()->all()->ownPage;
        //dont reload!
        asrt(count($book->xownPage), 0);
        //dont reload!
        $book->noLoad()->alias('magazine')->ownPage;
        //dont reload!
        asrt(count($book->xownPage), 0);
        //dont reload!
        $book->noLoad()->withCondition('')->ownPage;
        //dont reload!
        asrt(count($book->xownPage), 0);
        //dont reload!
        //even if modifiers proceed noLoad()
        $book->with(' LIMIT 1 ')->noLoad()->ownPage;
        //dont reload!
        asrt(count($book->xownPage), 0);
        //dont reload!
        $book->all()->noLoad()->ownPage;
        //dont reload!
        asrt(count($book->xownPage), 0);
        //dont reload!
        $book->alias('magazine')->noLoad()->ownPage;
        //dont reload!
        asrt(count($book->xownPage), 0);
        //dont reload!
        $book->withCondition('')->noLoad()->ownPage;
        //dont reload!
        asrt(count($book->xownPage), 0);
        //dont reload!
        //even in combinations
        $book->all()->with(' LIMIT 1 ')->noLoad()->ownPage;
        //dont reload!
        asrt(count($book->xownPage), 0);
        //dont reload!
        $book->alias('magazine')->all()->noLoad()->ownPage;
        //dont reload!
        asrt(count($book->xownPage), 0);
        //dont reload!
        $book->alias('magazine')->with('LIMIT 1')->noLoad()->ownPage;
        //dont reload!
        asrt(count($book->xownPage), 0);
        //dont reload!
        $book->alias('magazine')->withCondition('')->noLoad()->ownPage;
        //dont reload!
        asrt(count($book->xownPage), 0);
        //dont reload!
        //now test shared list
        $book->sharedTag = R::dispense('tag', 16);
        asrt(count($book->sharedTag), 16);
        $book->sharedTag[] = R::dispense('tag');
        asrt(count($book->sharedTag), 17);
        //dont reload after adding
        $last = end($book->sharedTagList);
        $id = $last->id;
        $book->sharedTag[$id]->title = 'b';
        asrt(count($book->sharedTag), 17);
        //dont reload after manipulation
        unset($book->sharedTagList[$id]);
        asrt(count($book->sharedTag), 16);
        //dont reload after manipulation
        //now trigger reload
        unset($book->sharedTagList);
        asrt(count($book->sharedTag), 0);
        $book->sharedTag = R::dispense('tag', 16);
        asrt(count($book->sharedTag), 16);
        //now trigger reload
        unset($book->sharedTag);
        asrt(count($book->sharedTag), 0);
        $book->sharedTag = R::dispense('tag', 16);
        asrt(count($book->sharedTag), 16);
        //now trigger reload
        $book->all()->sharedTag;
        asrt(count($book->sharedTag), 0);
        $book->sharedTag = R::dispense('tag', 16);
        asrt(count($book->sharedTag), 16);
        //now trigger reload
        $book->all()->sharedTagList;
        asrt(count($book->sharedTag), 0);
        $book->sharedTag = R::dispense('tag', 16);
        asrt(count($book->sharedTag), 16);
        //Do not reload a sharedTag list if told to not reload using noLoad()
        $book->noLoad()->with(' LIMIT 1 ')->sharedTag;
        //dont reload!
        asrt(count($book->sharedTag), 0);
        //dont reload!
        $book->noLoad()->all()->sharedTag;
        //dont reload!
        asrt(count($book->sharedTag), 0);
        //dont reload!
        $book->noLoad()->alias('magazine')->sharedTag;
        //dont reload!
        asrt(count($book->sharedTag), 0);
        //dont reload!
        $book->noLoad()->withCondition('')->sharedTag;
        //dont reload!
        asrt(count($book->sharedTag), 0);
        //dont reload!
        //even if modifiers proceed noLoad()
        $book->with(' LIMIT 1 ')->noLoad()->sharedTag;
        //dont reload!
        asrt(count($book->sharedTag), 0);
        //dont reload!
        $book->all()->noLoad()->sharedTag;
        //dont reload!
        asrt(count($book->sharedTag), 0);
        //dont reload!
        $book->alias('magazine')->noLoad()->sharedTag;
        //dont reload!
        asrt(count($book->sharedTag), 0);
        //dont reload!
        $book->withCondition('')->noLoad()->ownPage;
        //dont reload!
        asrt(count($book->sharedTag), 0);
        //dont reload!
        //even in combinations
        $book->all()->with(' LIMIT 1 ')->noLoad()->sharedTag;
        //dont reload!
        asrt(count($book->sharedTag), 0);
        //dont reload!
        $book->alias('magazine')->all()->noLoad()->sharedTag;
        //dont reload!
        asrt(count($book->sharedTag), 0);
        //dont reload!
        $book->alias('magazine')->with('LIMIT 1')->noLoad()->sharedTag;
        //dont reload!
        asrt(count($book->sharedTag), 0);
        //dont reload!
        $book->alias('magazine')->withCondition('')->noLoad()->sharedTag;
        //dont reload!
        asrt(count($book->sharedTag), 0);
        //dont reload!
        //test do not reload parent bean
        $book->author->name = 'me';
        asrt($book->author->name, 'me');
        $book->fetchAs('author')->coauthor;
        asrt($book->author->name, 'me');
        $book->fetchAs('author')->author;
        asrt($book->author->name, 'me');
        $book->with(' LIMIT 1 ')->author;
        asrt($book->author->name, 'me');
        $book->withCondition('')->author;
        asrt($book->author->name, 'me');
        $book->all()->author;
        asrt($book->author->name, 'me');
        $book->noLoad()->author;
        asrt($book->author->name, 'me');
        $book->noLoad()->all()->author;
        asrt($book->author->name, 'me');
        $book->with('LIMIT 1')->noLoad()->all()->author;
        asrt($book->author->name, 'me');
        //now trigger reload
        unset($book->author);
        asrt($book->author->name, NULL);
        $book->author->name = 'me';
        asrt($book->author->name, 'me');
    }