PHP Classes

File: vendor/gabordemooij/redbean/testing/RedUNIT/Blackhole/Tainted.php

Recommend this page to a friend!
  Classes of Adrian M   upMVC   vendor/gabordemooij/redbean/testing/RedUNIT/Blackhole/Tainted.php   Download  
File: vendor/gabordemooij/redbean/testing/RedUNIT/Blackhole/Tainted.php
Role: Class source
Content type: text/plain
Description: Class source
Class: upMVC
Pure PHP web development without other frameworks
Author: By
Last change:
Date: 1 month ago
Size: 3,904 bytes
 

Contents

Class file image Download
<?php

namespace RedUNIT\Blackhole;

use
RedUNIT\Blackhole as Blackhole;
use
RedBeanPHP\Facade as R;

/**
 * Tainted
 *
 * This test suite tests whether beans are marked as tainted
 * under the correct circumstances.
 *
 * @file RedUNIT/Blackhole/Tainted.php
 * @desc Tests tainted flag for OODBBean objects.
 * @author Gabor de Mooij and the RedBeanPHP Community
 * @license New BSD/GPLv2
 *
 * (c) G.J.G.T. (Gabor) de Mooij and the RedBeanPHP Community.
 * This source file is subject to the New BSD/GPLv2 License that is bundled
 * with this source code in the file license.txt.
 */
class Tainted extends Blackhole
{
   
/**
     * Test whether we can detect a change using hasChanged().
     *
     * @return void
     */
   
public function testHasChangedList()
    {
       
R::nuke();
       
$book = R::dispense( 'book' );
       
$page = R::dispense( 'page' );
       
asrt( $book->hasListChanged( 'ownPage' ), FALSE );
       
$book->ownPage[] = $page;
       
asrt( $book->hasListChanged( 'ownPage' ), TRUE );
       
R::store( $book );
       
$book = $book->fresh();
       
asrt( $book->hasListChanged( 'ownPage' ), FALSE );
       
$page = R::dispense( 'page' );
       
$book->ownPageList[] = $page;
       
asrt( $book->hasListChanged( 'ownPage' ), TRUE );
       
R::store( $book );
       
$book = $book->fresh();
       
asrt( $book->hasListChanged( 'ownPage' ), FALSE );
       
asrt( count( $book->ownPageList ), 2 );
       
array_pop( $book->ownPageList );
       
asrt( count( $book->ownPageList ), 1 );
       
asrt( $book->hasListChanged( 'ownPage' ), TRUE );
       
array_pop( $book->ownPageList );
       
asrt( count( $book->ownPageList ), 0 );
       
asrt( $book->hasListChanged( 'ownPage' ), TRUE );
       
$book = $book->fresh();
       
asrt( $book->hasListChanged( 'ownPage' ), FALSE );
       
asrt( count( $book->ownPageList ), 2 );
       
$otherPage = R::dispense( 'page' );
       
array_pop( $book->ownPageList );
       
$book->ownPageList[] = $otherPage;
       
asrt( count( $book->ownPageList ), 2 );
       
asrt( $book->hasListChanged( 'ownPage' ), TRUE );
       
$book = $book->fresh();
       
$firstPage = reset( $book->ownPageList );
       
$firstPage->content = 'abc';
       
asrt( $book->hasListChanged( 'ownPage' ), FALSE );
       
$book = $book->fresh();
       
asrt( $book->hasListChanged( 'ownPage' ), FALSE );
       
$lastPage = end( $book->ownPageList );
       
$lastPage->ownText[] = R::dispense( 'text' );
       
asrt( $book->hasListChanged( 'ownPage' ), FALSE );
    }

   
/**
     * Tests whether we can clear the history of a bean.
     *
     * @return void
     */
   
public function testClearHist()
    {
       
R::nuke();
       
$book = R::dispense( 'book' );
       
asrt( $book->hasChanged( 'title' ), FALSE );
       
$book->title = 'book';
       
asrt( $book->hasChanged( 'title' ), TRUE );
       
R::store( $book );
       
asrt( $book->hasChanged( 'title' ), TRUE );
       
$book->clearHistory();
       
asrt( $book->hasChanged( 'title' ), FALSE );
    }

   
/**
     * Test tainted.
     *
     * @return void
     */
   
public function testTainted()
    {
       
testpack( 'Original Tainted Tests' );
       
$redbean = R::getRedBean();
       
$spoon = $redbean->dispense( "spoon" );
       
asrt( $spoon->getMeta( "tainted" ), TRUE );
       
$spoon->dirty = "yes";
       
asrt( $spoon->getMeta( "tainted" ), TRUE );
       
testpack( 'Tainted List test' );
       
$note = R::dispense( 'note' );
       
$note->text = 'abc';
       
$note->ownNote[] = R::dispense( 'note' )->setAttr( 'text', 'def' );
       
$id = R::store( $note );
       
$note = R::load( 'note', $id );
       
asrt( $note->isTainted(), FALSE );
       
// Shouldn't affect tainted
       
$note->text;
       
asrt( $note->isTainted(), FALSE );
       
$note->ownNote;
       
asrt( $note->isTainted(), TRUE );
       
testpack( 'Tainted Test Old Value' );
       
$text = $note->old( 'text' );
       
asrt( $text, 'abc' );
       
asrt( $note->hasChanged( 'text' ), FALSE );
       
$note->text = 'xxx';
       
asrt( $note->hasChanged( 'text' ), TRUE );
       
$text = $note->old( 'text' );
       
asrt( $text, 'abc' );
       
testpack( 'Tainted Non-exist' );
       
asrt( $note->hasChanged( 'text2' ), FALSE );
       
testpack( 'Misc Tainted Tests' );
       
$bean = R::dispense( 'bean' );
       
$bean->hasChanged( 'prop' );
       
$bean->old( 'prop' );
    }
}