]> git.mxchange.org Git - friendica.git/blobdiff - tests/DatabaseTest.php
[frio] Add friendica-tagsinput library based on bootstrap-tagsinput
[friendica.git] / tests / DatabaseTest.php
index 98f79e351b5b9f008a24c86d2b357a4a7f8d7960..4f0275493c8f659d28734c99052cd3145080ff2a 100644 (file)
@@ -5,79 +5,56 @@
 
 namespace Friendica\Test;
 
-use PDO;
-use PHPUnit\DbUnit\DataSet\YamlDataSet;
-use PHPUnit\DbUnit\TestCaseTrait;
-use PHPUnit_Extensions_Database_DB_IDatabaseConnection;
+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();
 
-       // only instantiate pdo once for test clean-up/fixture load
-       static private $pdo = null;
+               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();
+       }
 
-       // only instantiate PHPUnit_Extensions_Database_DB_IDatabaseConnection once per test
-       private $conn = null;
+       protected function tearDown()
+       {
+               // Rollbacks every DB usage so we don't commit anything into the DB
+               StaticDatabase::statRollback();
+
+               parent::tearDown();
+       }
 
        /**
-        * Get database connection.
+        * Loads a given DB fixture for this DB test
         *
-        * 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.
+        * @param string   $fixture The path to the fixture
+        * @param Database $dba     The DB connection
         *
-        * If it could not connect to the database, the test is skipped.
-        *
-        * @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)
        {
-               $server = $_SERVER;
-
-               if ($this->conn === null) {
-                       if (self::$pdo == null) {
-
-                               if (!empty($server['MYSQL_HOST'])
-                                   && !empty($server['MYSQL_USERNAME'] || !empty($server['MYSQL_USER']))
-                                   && $server['MYSQL_PASSWORD'] !== false
-                                   && !empty($server['MYSQL_DATABASE'])) {
-
-                                       $connect = "mysql:host=" . $server['MYSQL_HOST'] . ";dbname=" . $server['MYSQL_DATABASE'];
+               $this->assertFileExists($fixture);
 
-                                       if (!empty($server['MYSQL_PORT'])) {
-                                               $connect .= ";port=" . $server['MYSQL_PORT'];
-                                       }
+               $data = include $fixture;
 
-                                       if (!empty($server['MYSQL_USERNAME'])) {
-                                               $db_user = $server['MYSQL_USERNAME'];
-                                       } else {
-                                               $db_user = $server['MYSQL_USER'];
-                                       }
-
-                                       $db_pass = (string)$server['MYSQL_PASSWORD'];
+               foreach ($data as $tableName => $rows) {
+                       if (!is_array($rows)) {
+                               $dba->p('TRUNCATE TABLE `' . $tableName . '``');
+                               continue;
+                       }
 
-                                       self::$pdo = @new PDO($connect, $db_user, $db_pass);
-                                       self::$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
-                               }
+                       foreach ($rows as $row) {
+                               $dba->insert($tableName, $row);
                        }
-                       $this->conn = $this->createDefaultDBConnection(self::$pdo, getenv('MYSQL_DATABASE'));
                }
-
-               return $this->conn;
-       }
-
-       /**
-        * Get dataset to populate the database with.
-        *
-        * @return YamlDataSet
-        * @see https://phtablepunit.de/manual/5.7/en/database.html
-        */
-       protected function getDataSet()
-       {
-               return new YamlDataSet(__DIR__ . '/datasets/api.yml');
        }
 }