. * */ namespace Friendica\Test; use Friendica\Database\Database; use Friendica\Test\Util\Database\StaticDatabase; /** * Abstract class used by tests that need a database. */ trait DatabaseTestTrait { protected function setUpDb() { StaticDatabase::statConnect($_SERVER); // Rollbacks every DB usage (in case the test couldn't call tearDown) StaticDatabase::statRollback(); // Rollback the first, outer transaction just 2 be sure StaticDatabase::getGlobConnection()->rollBack(); // Start the first, outer transaction StaticDatabase::getGlobConnection()->beginTransaction(); } protected function tearDownDb() { try { // Rollbacks every DB usage so we don't commit anything into the DB StaticDatabase::statRollback(); } catch (\PDOException $exception) { print_r("Found already rolled back transaction"); } } /** * Loads a given DB fixture for this DB test * * @param string $fixture The path to the fixture * @param Database $dba The DB connection * * @throws \Exception */ protected function loadFixture(string $fixture, Database $dba) { $data = include $fixture; foreach ($data as $tableName => $rows) { if (is_numeric($tableName)) { continue; } if (!is_array($rows)) { $dba->e('TRUNCATE TABLE `' . $tableName . '``'); continue; } foreach ($rows as $row) { $dba->insert($tableName, $row, true); } } } }