PHP Classes

File: vendor/gabordemooij/redbean/testing/RedUNIT/Base/Hybrid.php

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

Contents

Class file image Download
<?php

namespace RedUNIT\Base;

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

/**
 * Hybrid
 *
 * Test Hybrid mode where the database can be unfozen
 * in case of an exception during storing.
 *
 * @file RedUNIT/Base/Hybrid.php
 * @desc Tests hybrid mode
 * @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 Hybrid extends Base
{
   
/**
     * Tests hybrid mode.
     *
     * @return void
     */
   
public function testHybrid()
    {
       
R::nuke();
       
$book = R::dispense('book');
       
$book->pages = 123;
       
$id = R::store( $book );
       
R::freeze( TRUE );
       
R::setAllowHybridMode( FALSE );
       
$book->title = 'Tales of a misfit';
        try {
           
R::store( $book, TRUE );
           
fail();
        } catch(\
Exception $e) {
           
pass();
        }
        try {
           
R::store( $book, FALSE );
           
fail();
        } catch(\
Exception $e) {
           
pass();
        }
       
$book = $book->fresh();
       
asrt( is_null( $book->title ), TRUE );
       
R::setAllowHybridMode( TRUE );
       
$book->title = 'Tales of a misfit';
        try {
           
R::store( $book );
           
fail();
        } catch(\
Exception $e) {
           
pass();
        }
        try {
           
R::store( $book, FALSE );
           
fail();
        } catch(\
Exception $e) {
           
pass();
        }
        try {
           
R::store( $book, TRUE );
           
pass();
        } catch(\
Exception $e) {
           
fail();
        }
       
$book = $book->fresh();
       
asrt( $book->title, 'Tales of a misfit' );
       
R::setAllowHybridMode( FALSE );
       
R::freeze( FALSE );
    }

   
/**
     * Test whether we can use Hybrid mode to alter columns.
     * This won't work for SQLite.
     */
   
public function testHybridDataType()
    {
       
R::nuke();
        if (
$this->currentlyActiveDriverID == 'mysql') {
           
R::exec('SET @@SESSION.sql_mode=\'STRICT_TRANS_TABLES\';');
        }
        if (
$this->currentlyActiveDriverID == 'sqlite') return;
       
$book = R::dispense('book');
       
$book->pages = 1;
       
$id = R::store( $book, TRUE );
       
R::freeze( TRUE );
       
asrt( R::getRedBean()->isFrozen(), TRUE );
       
R::setAllowHybridMode( FALSE );
       
$book->pages = 'too many';
        try {
           
R::store( $book, TRUE );
           
fail();
        } catch(\
Exception $e) {
           
pass();
        }
       
asrt( R::getRedBean()->isFrozen(), TRUE );
       
R::setAllowHybridMode( TRUE );
       
asrt( R::getRedBean()->isFrozen(), TRUE );
       
R::debug(1);
        try {
           
R::store( $book, TRUE );
           
pass();
        } catch(\
Exception $e) {
           
fail();
        }
       
asrt( R::getRedBean()->isFrozen(), TRUE );
       
$book = $book->fresh();
        echo
$book;
       
asrt( $book->pages, 'too many' );
       
R::setAllowHybridMode( FALSE );
       
R::freeze( FALSE );
        if (
$this->currentlyActiveDriverID == 'mysql') {
           
R::exec('SET @@SESSION.sql_mode=\'\';');
        }
    }

   
/**
     * Other exceptions must fall through...
     */
   
public function testHybridNonSQLException()
    {
       
R::nuke();
       
$toy = R::dispense('brokentoy');
       
R::freeze( TRUE );
       
R::setAllowHybridMode( TRUE );
        try {
           
R::store( $toy, TRUE );
           
fail();
        } catch(\
Exception $e) {
           
pass();
        }
       
R::setAllowHybridMode( FALSE );
       
R::nuke();
       
$toy = R::dispense('toy');
       
R::freeze( TRUE );
       
R::setAllowHybridMode( TRUE );
        try {
           
R::store( $toy, TRUE );
           
pass();
        } catch(\
Exception $e) {
           
fail();
        }
       
R::setAllowHybridMode( FALSE );
    }
   
   
/**
     * Test whether Hybrid mode is only activated
     * for latest or 5.4 without novice and ensure
     * maintaining backward compatibility by not setting
     * Hybrid allowed for 5.3 and earlier.
     */
    
public function testVersions()
     {
       
R::useFeatureSet('novice/latest');
       
asrt( R::setAllowHybridMode( FALSE ), FALSE );
       
R::useFeatureSet('latest');
       
asrt( R::setAllowHybridMode( FALSE ), TRUE );
       
R::useFeatureSet('novice/5.4');
       
asrt( R::setAllowHybridMode( FALSE ), FALSE );
       
R::useFeatureSet('5.4');
       
asrt( R::setAllowHybridMode( FALSE ), TRUE );
       
R::useFeatureSet('novice/5.3');
       
asrt( R::setAllowHybridMode( FALSE ), FALSE );
       
R::useFeatureSet('5.3');
       
asrt( R::setAllowHybridMode( FALSE ), FALSE );
     }
}