@ -25,14 +25,16 @@ namespace Test;
use OC\Command\QueueBus ;
use OC\Files\Filesystem ;
use OCP\DB\QueryBuilder\IQueryBuilder ;
use OCP\IDBConnection ;
use OCP\Security\ISecureRandom ;
abstract class TestCase extends \PHPUnit_Framework_TestCase {
/**
* @ var \OC\Command\QueueBus
*/
/** @var \OC\Command\QueueBus */
private $commandBus ;
/** @var IDBConnection */
static private $realDatabase ;
protected function getTestTraits () {
$traits = [];
$class = $this ;
@ -49,6 +51,16 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
}
protected function setUp () {
// detect database access
if ( ! $this -> IsDatabaseAccessAllowed ()) {
if ( is_null ( self :: $realDatabase )) {
self :: $realDatabase = \OC :: $server -> getDatabaseConnection ();
}
\OC :: $server -> registerService ( 'DatabaseConnection' , function () {
$this -> fail ( 'Your test case is not allowed to access the database.' );
});
}
// overwrite the command bus with one we can run ourselves
$this -> commandBus = new QueueBus ();
\OC :: $server -> registerService ( 'AsyncCommandBus' , function () {
@ -65,6 +77,14 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
}
protected function tearDown () {
// restore database connection
if ( ! $this -> IsDatabaseAccessAllowed ()) {
\OC :: $server -> registerService ( 'DatabaseConnection' , function () {
return self :: $realDatabase ;
});
}
// further cleanup
$hookExceptions = \OC_Hook :: $thrownExceptions ;
\OC_Hook :: $thrownExceptions = [];
\OC :: $server -> getLockingProvider () -> releaseAll ();
@ -316,4 +336,13 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
return true ;
}
}
private function IsDatabaseAccessAllowed () {
$annotations = $this -> getAnnotations ();
if ( isset ( $annotations [ 'class' ][ 'group' ]) && in_array ( 'DB' , $annotations [ 'class' ][ 'group' ])) {
return true ;
}
return false ;
}
}