PHP Classes

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

Recommend this page to a friend!
  Classes of Adrian M   upMVC   vendor/gabordemooij/redbean/testing/RedUNIT/Blackhole/Import.php   Download  
File: vendor/gabordemooij/redbean/testing/RedUNIT/Blackhole/Import.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: 8,209 bytes
 

Contents

Class file image Download
<?php

namespace RedUNIT\Blackhole;

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

/**
 * Import
 *
 * RedBeanPHP offers some methods to import arrays into
 * beans. For instance using the dispense() method. This
 * test suite checks whether RedBeanPHP can correctly convert
 * array structures to beans and also checks the expected effects
 * on the taint flags. This test suite further tests the 'simple'
 * single bean import() function, the inject() function (bean-to-bean) and
 * array access (because this is somehow related).
 *
 * @file RedUNIT/Blackhole/Import.php
 * @desc Tests basic bean importing features.
 * @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 Import extends Blackhole
{
   
/**
     * Test import without trimming.
     *
     * @return void
     */
   
public function testImportWithoutTrim()
    {
       
$book = R::dispense( 'book' );
       
$book->import( array( ' title ' => 'my book' ), array( ' title ' ), TRUE );
       
asrt( $book[' title '], 'my book' );
    }

   
/**
     * Test multi array dispense import.
     *
     * @return void
     */
   
public function testMultiRecurImport()
    {
       
$books = R::dispense( array(
            array(
'_type' => 'book', 'title' => 'book one' ),
            array(
'_type' => 'book', 'title' => 'book two' ),
        ) );
       
asrt( is_array( $books ), TRUE );
       
asrt( count( $books ), 2 );
       
$book = reset( $books );
       
asrt( ( $book instanceof OODBBean ), TRUE );
       
asrt( $book->title, 'book one' );
       
$book = next( $books );
       
asrt( ( $book instanceof OODBBean ), TRUE );
       
asrt( $book->title, 'book two' );
    }

   
/**
     * Test recursive imports (formely known as R::graph).
     *
     * @return void
     */
   
public function testRecursiveImport()
    {
       
$book = R::dispense(
            array(
               
'_type'=>'book',
               
'title'=>'The magic book',
               
'ownPageList' => array(
                     array(
                       
'_type' => 'page',
                       
'content' => 'magic potions',
                     ),
                     array(
                       
'_type' => 'page',
                       
'content' => 'magic spells',
                     )
                )
            )
        );
       
$id = R::store( $book );
       
$book = R::load( 'book', $id );
       
asrt( $book->title, 'The magic book' );
       
$pages = $book->with(' ORDER BY content ASC ')->ownPageList;
       
asrt( count($pages), 2 );
       
$page1 = array_shift( $pages );
       
asrt( $page1->content, 'magic potions' );
       
$page2 = array_shift( $pages );
       
asrt( $page2->content, 'magic spells' );
       
R::nuke();
       
$book = R::dispense(
            array(
               
'_type'=>'book',
               
'title'=>'The magic book',
               
'author' => array(
                    
'_type' => 'author',
                    
'name' => 'Dr. Evil'
               
),
               
'coAuthor' => array(
                    
'_type' => 'author',
                    
'name' => 'Dr. Creepy'
               
),
               
'ownPageList' => array(
                     array(
                       
'_type' => 'page',
                       
'content' => 'magic potions',
                       
'ownRecipe' => array(
                            
'a' => array('_type'=>'recipe', 'name'=>'Invisibility Salad'),
                            
'b' => array('_type'=>'recipe', 'name'=>'Soup of Madness'),
                            
'c' => array('_type'=>'recipe', 'name'=>'Love cake'),
                        )
                     ),
                     array(
                       
'_type' => 'page',
                       
'content' => 'magic spells',
                     )
                ),
               
'sharedCategory' => array(
                     array(
                         
'_type' => 'category',
                         
'label' => 'wizardry'
                    
),
                )
            )
        );
       
$id = R::store( $book );
       
$book = R::load( 'book', $id );
       
asrt( $book->title, 'The magic book' );
       
$pages = $book->with(' ORDER BY content ASC ')->ownPageList;
       
asrt( count($pages), 2 );
       
$page1 = array_shift( $pages );
       
asrt( $page1->content, 'magic potions' );
       
$page2 = array_shift( $pages );
       
asrt( $page2->content, 'magic spells' );
       
$recipes = $page1->with(' ORDER BY name ASC ')->ownRecipeList;
       
asrt( count( $recipes ), 3 );
       
$recipe1 = array_shift( $recipes );
       
asrt( $recipe1->name, 'Invisibility Salad' );
       
$recipe2 = array_shift( $recipes );
       
asrt( $recipe2->name, 'Love cake' );
       
$recipe3 = array_shift( $recipes );
       
asrt( $recipe3->name, 'Soup of Madness' );
       
$categories = $book->sharedCategoryList;
       
asrt( count($categories), 1 );
       
$category = reset( $categories );
       
asrt( $category->label, 'wizardry' );
       
asrt( $book->author->name, 'Dr. Evil' );
       
asrt( $book->fetchAs('author')->coAuthor->name, 'Dr. Creepy' );
        try {
           
$list = R::dispense( array() );
           
pass();
           
asrt( is_array( $list ), TRUE );
           
asrt( count( $list ), 0 );
        } catch (
RedException $ex ) {
           
pass();
        }
        try {
           
R::dispense( array( array() ) );
           
fail();
        } catch (
RedException $ex ) {
           
pass();
        }
        try {
           
R::dispense( array( 'a' ) );
           
fail();
        } catch (
RedException $ex ) {
           
pass();
        }
        try {
           
R::dispense( array( 'property' => 'value' ) );
           
fail();
        } catch (
RedException $ex ) {
           
pass();
        }
    }

   
/**
     * Test import from and tainted.
     *
     * @return void
     */
   
public function testImportFromAndTainted()
    {
       
testpack( 'Test importFrom() and Tainted' );
       
$bean = R::dispense( 'bean' );
       
R::store( $bean );
       
$bean->name = 'abc';
       
asrt( $bean->getMeta( 'tainted' ), TRUE );
       
R::store( $bean );
       
asrt( $bean->getMeta( 'tainted' ), FALSE );
       
$copy = R::dispense( 'bean' );
       
R::store( $copy );
       
$copy = R::load( 'bean', $copy->id );
       
asrt( $copy->getMeta( 'tainted' ), FALSE );
       
$copy->import( array( 'name' => 'xyz' ) );
       
asrt( $copy->getMeta( 'tainted' ), TRUE );
       
$copy->setMeta( 'tainted', FALSE );
       
asrt( $copy->getMeta( 'tainted' ), FALSE );
       
$copy->importFrom( $bean );
       
asrt( $copy->getMeta( 'tainted' ), TRUE );
       
testpack( 'Test basic import() feature.' );
       
$bean = R::dispense('bean');
       
$bean->import( array( "a" => 1, "b" => 2 ) );
       
asrt( $bean->a, 1 );
       
asrt( $bean->b, 2 );
       
$bean->import( array( "a" => 3, "b" => 4 ), "a,b" );
       
asrt( $bean->a, 3 );
       
asrt( $bean->b, 4 );
       
$bean->import( array( "a" => 5, "b" => 6 ), " a , b " );
       
asrt( $bean->a, 5 );
       
asrt( $bean->b, 6 );
       
$bean->import( array( "a" => 1, "b" => 2 ) );
       
testpack( 'Test inject() feature.' );
       
$coffee = R::dispense( 'coffee' );
       
$coffee->id = 2;
       
$coffee->liquid = 'black';
       
$cup = R::dispense( 'cup' );
       
$cup->color = 'green';
       
// Pour coffee in cup
       
$cup->inject( $coffee );
       
// Do we still have our own property?
       
asrt( $cup->color, 'green' );
       
// Did we pour the liquid in the cup?
       
asrt( $cup->liquid, 'black' );
       
// Id should not be transferred
       
asrt( $cup->id, 0 );
    }

   
/**
     * Test import using array access functions
     *
     * @return void
     */
   
public function testArrayAccess()
    {
       
$book = R::dispense( 'book' );
       
$book->isAwesome = TRUE;
       
asrt( isset( $book->isAwesome ), TRUE );
       
$book = R::dispense( 'book' );
       
$book['isAwesome'] = TRUE;
       
asrt( isset( $book->isAwesome ), TRUE );
       
$book = R::dispense( 'book' );
       
$book['xownPageList'] = R::dispense( 'page', 2 );
       
asrt( isset( $book->ownPage ), TRUE );
       
asrt( isset( $book->xownPage ), TRUE );
       
asrt( isset( $book->ownPageList ), TRUE );
       
asrt( isset( $book->xownPageList ), TRUE );
       
$book = R::dispense( 'book' );
       
$book['ownPageList'] = R::dispense( 'page', 2 );
       
asrt( isset( $book->ownPage ), TRUE );
       
asrt( isset( $book->xownPage ), TRUE );
       
asrt( isset( $book->ownPageList ), TRUE );
       
asrt( isset( $book->xownPageList ), TRUE );
       
$book = R::dispense( 'book' );
       
$book['xownPage'] = R::dispense( 'page', 2 );
       
asrt( isset( $book->ownPage ), TRUE );
       
asrt( isset( $book->xownPage ), TRUE );
       
asrt( isset( $book->ownPageList ), TRUE );
       
asrt( isset( $book->xownPageList ), TRUE );
       
$book = R::dispense( 'book' );
       
$book['ownPage'] = R::dispense( 'page', 2 );
       
asrt( isset( $book->ownPage ), TRUE );
       
asrt( isset( $book->xownPage ), TRUE );
       
asrt( isset( $book->ownPageList ), TRUE );
       
asrt( isset( $book->xownPageList ), TRUE );
       
$book = R::dispense( 'book' );
       
$book['sharedTag'] = R::dispense( 'tag', 2 );
       
asrt( isset( $book->sharedTag ), TRUE );
       
asrt( isset( $book->sharedTagList ), TRUE );
       
$book = R::dispense( 'book' );
       
$book['sharedTagList'] = R::dispense( 'tag', 2 );
       
asrt( isset( $book->sharedTag ), TRUE );
       
asrt( isset( $book->sharedTagList ), TRUE );
    }
}