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');
}