diff options
Diffstat (limited to 'tests/lib/testcase.php')
-rw-r--r-- | tests/lib/testcase.php | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/tests/lib/testcase.php b/tests/lib/testcase.php index 8cfa2a72598..f6a4febefc7 100644 --- a/tests/lib/testcase.php +++ b/tests/lib/testcase.php @@ -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; + } } |