]> git.mxchange.org Git - friendica.git/blobdiff - tests/DatabaseTest.php
Merge pull request #7451 from annando/ap-contact-id
[friendica.git] / tests / DatabaseTest.php
index b3418c20f4024878c9999ebf9f6d908d6374335b..4f0275493c8f659d28734c99052cd3145080ff2a 100644 (file)
@@ -5,73 +5,56 @@
 
 namespace Friendica\Test;
 
-use Friendica\App;
-use Friendica\Database\DBA;
-use Friendica\Factory;
-use Friendica\Util\BasePath;
-use Friendica\Util\Config\ConfigFileLoader;
-use Friendica\Util\Logger\VoidLogger;
-use Friendica\Util\Profiler;
-use PHPUnit\DbUnit\DataSet\YamlDataSet;
-use PHPUnit\DbUnit\TestCaseTrait;
-use PHPUnit_Extensions_Database_DB_IDatabaseConnection;
-
-require_once __DIR__ . '/../boot.php';
+use Friendica\Database\Database;
+use Friendica\Test\Util\Database\StaticDatabase;
 
 /**
  * Abstract class used by tests that need a database.
  */
 abstract class DatabaseTest extends MockedTest
 {
-       use TestCaseTrait;
+       protected function setUp()
+       {
+               parent::setUp();
+
+               StaticDatabase::statConnect($_SERVER);
+               // Rollbacks every DB usage (in case the test couldn't call tearDown)
+               StaticDatabase::statRollback();
+               // Start the first, outer transaction
+               StaticDatabase::getGlobConnection()->beginTransaction();
+       }
+
+       protected function tearDown()
+       {
+               // Rollbacks every DB usage so we don't commit anything into the DB
+               StaticDatabase::statRollback();
+
+               parent::tearDown();
+       }
 
        /**
-        * Get database connection.
-        *
-        * This function is executed before each test in order to get a database connection that can be used by tests.
-        * If no prior connection is available, it tries to create one using the USER, PASS and DB environment variables.
+        * Loads a given DB fixture for this DB test
         *
-        * If it could not connect to the database, the test is skipped.
+        * @param string   $fixture The path to the fixture
+        * @param Database $dba     The DB connection
         *
-        * @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
-        * @see https://phpunit.de/manual/5.7/en/database.html
+        * @throws \Exception
         */
-       protected function getConnection()
+       protected function loadFixture(string $fixture, Database $dba)
        {
-               if (!getenv('MYSQL_DATABASE')) {
-                       $this->markTestSkipped('Please set the MYSQL_* environment variables to your test database credentials.');
-               }
-
-               $basePath = BasePath::create(dirname(__DIR__));
-               $mode = new App\Mode($basePath);
-               $configLoader = new ConfigFileLoader($basePath, $mode);
-               $config = Factory\ConfigFactory::createCache($configLoader);
+               $this->assertFileExists($fixture);
 
-               $profiler = \Mockery::mock(Profiler::class);
+               $data = include $fixture;
 
-               DBA::connect(
-                       $config,
-                       $profiler,
-                       new VoidLogger(),
-                       getenv('MYSQL_HOST'),
-                       getenv('MYSQL_USERNAME'),
-                       getenv('MYSQL_PASSWORD'),
-                       getenv('MYSQL_DATABASE'));
+               foreach ($data as $tableName => $rows) {
+                       if (!is_array($rows)) {
+                               $dba->p('TRUNCATE TABLE `' . $tableName . '``');
+                               continue;
+                       }
 
-               if (!DBA::connected()) {
-                       $this->markTestSkipped('Could not connect to the database.');
+                       foreach ($rows as $row) {
+                               $dba->insert($tableName, $row);
+                       }
                }
-
-               return $this->createDefaultDBConnection(DBA::getConnection(), getenv('MYSQL_DATABASE'));
-       }
-
-       /**
-        * Get dataset to populate the database with.
-        * @return YamlDataSet
-        * @see https://phpunit.de/manual/5.7/en/database.html
-        */
-       protected function getDataSet()
-       {
-               return new YamlDataSet(__DIR__ . '/datasets/api.yml');
        }
 }