mirror of
https://gitlab.com/hashborgir/d2tools.git
synced 2025-09-18 17:42:09 +00:00
Begin Refactor
This commit is contained in:
175
vendor/gabordemooij/redbean/testing/RedUNIT/Base/Hybrid.php
vendored
Normal file
175
vendor/gabordemooij/redbean/testing/RedUNIT/Base/Hybrid.php
vendored
Normal file
@@ -0,0 +1,175 @@
|
||||
<?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 );
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user