mirror of
https://gitlab.com/hashborgir/d2tools.git
synced 2025-11-08 19:47:48 -06:00
Begin Refactor
This commit is contained in:
166
vendor/gabordemooij/redbean/testing/RedUNIT/Base/Exceptions.php
vendored
Normal file
166
vendor/gabordemooij/redbean/testing/RedUNIT/Base/Exceptions.php
vendored
Normal file
@@ -0,0 +1,166 @@
|
||||
<?php
|
||||
|
||||
namespace RedUNIT\Base;
|
||||
|
||||
use RedUNIT\Base as Base;
|
||||
use RedBeanPHP\Facade as R;
|
||||
use RedBeanPHP\RedException as RedException;
|
||||
use RedBeanPHP\RedException\SQL as SQLException;
|
||||
use RedBeanPHP\OODBBean as OODBBean;
|
||||
use RedBeanPHP\Adapter\DBAdapter;
|
||||
use RedBeanPHP\ToolBox;
|
||||
use RedBeanPHP\QueryWriter\SQLiteT;
|
||||
use RedBeanPHP\QueryWriter\AQueryWriter;
|
||||
use RedBeanPHP\QueryWriter;
|
||||
use RedBeanPHP\OODB;
|
||||
use RedBeanPHP\Driver\RPDO;
|
||||
|
||||
/**
|
||||
* Exceptions
|
||||
*
|
||||
* Tests exception handling in various scenarios as well
|
||||
* as exception related functionalities.
|
||||
*
|
||||
* @file RedUNIT/Base/Exceptions.php
|
||||
* @desc Tests exception handling
|
||||
* @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 Exceptions extends Base {
|
||||
|
||||
/**
|
||||
* Tests load exceptions.
|
||||
* Load Exceptions (version 5+)
|
||||
*
|
||||
* - If a bean does not exist,
|
||||
* R::load() and R::loadForUpdate() will return an empty bean.
|
||||
* - If there is an error because of a missing table or column,
|
||||
* both methods will return an empty bean in fluid mode
|
||||
* and throw an exception in frozen mode.
|
||||
* - If something else happens (lock timeout for instance)
|
||||
* both methods will always throw an exception, even in fluid mode.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testLoadExceptions()
|
||||
{
|
||||
/* bean does not exist, and table does not exist */
|
||||
R::nuke();
|
||||
$book = R::load( 'book', 1 );
|
||||
pass();
|
||||
asrt( $book->id, 0 );
|
||||
R::freeze( TRUE );
|
||||
$exception = NULL;
|
||||
try {
|
||||
$book = R::load( 'book', 1 );
|
||||
} catch( RedException $exception ) {}
|
||||
asrt( ( $exception instanceof RedException ), TRUE );
|
||||
R::freeze( FALSE );
|
||||
R::store( $book );
|
||||
/* bean does not exist - table exists */
|
||||
$book = R::load( 'book', 2 );
|
||||
pass();
|
||||
asrt( $book->id, 0 );
|
||||
R::freeze( TRUE );
|
||||
$book = R::load( 'book', 2 );
|
||||
pass();
|
||||
asrt( $book->id, 0 );
|
||||
/* other error */
|
||||
if ( !( R::getWriter() instanceof SQLiteT ) ) {
|
||||
R::freeze( FALSE );
|
||||
$exception = NULL;
|
||||
try {
|
||||
$book = R::load( 'book', 1, 'invalid sql' );
|
||||
} catch( RedException $exception ) {}
|
||||
//not supported for CUBRID
|
||||
if ($this->currentlyActiveDriverID !== 'CUBRID') {
|
||||
asrt( ( $exception instanceof RedException ), TRUE );
|
||||
}
|
||||
} else {
|
||||
/* error handling in SQLite is suboptimal */
|
||||
R::freeze( FALSE );
|
||||
$book = R::load( 'book', 1, 'invalid sql' );
|
||||
pass();
|
||||
asrt( $book->id, 0 );
|
||||
}
|
||||
R::freeze( TRUE );
|
||||
$exception = NULL;
|
||||
try {
|
||||
$book = R::load( 'book', 1, 'invalid sql' );
|
||||
} catch( RedException $exception ) {}
|
||||
asrt( ( $exception instanceof RedException ), TRUE );
|
||||
R::freeze( FALSE );
|
||||
R::nuke();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test delete exceptions
|
||||
*
|
||||
* - in fluid mode no complaining about missing structures
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testDeleteExceptions()
|
||||
{
|
||||
R::nuke();
|
||||
$book = R::dispense( 'book' );
|
||||
R::store( $book );
|
||||
R::nuke();
|
||||
R::trash( $book );
|
||||
R::freeze( TRUE );
|
||||
$exception = NULL;
|
||||
try {
|
||||
R::trash( $book );
|
||||
} catch( RedException $exception ) {}
|
||||
asrt( ( $exception instanceof RedException ), TRUE );
|
||||
R::freeze( FALSE );
|
||||
$adapter = R::getDatabaseAdapter();
|
||||
R::nuke();
|
||||
$book = R::dispense( 'book' );
|
||||
R::store( $book );
|
||||
$broken = new BrokenWriter( $adapter );
|
||||
$redbean = R::getRedBean();
|
||||
$oodb = new OODB( $broken, $redbean->isFrozen() );
|
||||
R::setRedBean( $oodb );
|
||||
$exception = NULL;
|
||||
try {
|
||||
R::trash( $book );
|
||||
} catch( RedException $exception ) {}
|
||||
asrt( ( $exception instanceof RedException ), TRUE );
|
||||
R::freeze( TRUE );
|
||||
$exception = NULL;
|
||||
try {
|
||||
R::trash( $book );
|
||||
} catch( RedException $exception ) {}
|
||||
asrt( ( $exception instanceof RedException ), TRUE );
|
||||
R::setRedBean( $redbean );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test chaining of exceptions.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testChainingExceptions()
|
||||
{
|
||||
R::freeze( TRUE );
|
||||
$exception = NULL;
|
||||
try {
|
||||
$book = R::load( 'book', 1, 'invalid sql' );
|
||||
} catch( RedException $exception ) {}
|
||||
pass();
|
||||
asrt( ( $exception instanceof RedException ), TRUE );
|
||||
asrt( ( $exception->getPrevious() instanceof \Exception ), TRUE );
|
||||
}
|
||||
}
|
||||
|
||||
class BrokenWriter extends SQLiteT {
|
||||
public function deleteRecord( $type, $conditions = array(), $addSql = NULL, $bindings = array() )
|
||||
{
|
||||
throw new SQLException('oops');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user