X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=tests%2FDatabaseTestTrait.php;h=6d3a75ab1be203b4c8d6e99e9a29ad21c81ee1cf;hb=dcd47c391c881260dc15f2a28e3187c32a7988ff;hp=49dc999b698a1acc21af8e7ae5c921b8b792254e;hpb=1de3960e267a8d298348fbca18cf1be1f6a20f7a;p=friendica.git diff --git a/tests/DatabaseTestTrait.php b/tests/DatabaseTestTrait.php index 49dc999b69..6d3a75ab1b 100644 --- a/tests/DatabaseTestTrait.php +++ b/tests/DatabaseTestTrait.php @@ -1,6 +1,22 @@ . + * */ namespace Friendica\Test; @@ -13,46 +29,69 @@ use Friendica\Test\Util\Database\StaticDatabase; */ trait DatabaseTestTrait { - protected function setUp() + 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(); - - parent::setUp(); } - protected function tearDown() + protected function tearDownDb() { - // Rollbacks every DB usage so we don't commit anything into the DB - StaticDatabase::statRollback(); - - parent::tearDown(); + 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 string[][] $fixture The fixture array * @param Database $dba The DB connection * * @throws \Exception */ - protected function loadFixture(string $fixture, Database $dba) + protected function loadDirectFixture(array $fixture, Database $dba) { - $data = include $fixture; + foreach ($fixture as $tableName => $rows) { + if (is_numeric($tableName)) { + continue; + } - foreach ($data as $tableName => $rows) { if (!is_array($rows)) { - $dba->p('TRUNCATE TABLE `' . $tableName . '``'); + $dba->e('TRUNCATE TABLE `' . $tableName . '``'); continue; } foreach ($rows as $row) { - $dba->insert($tableName, $row); + if (is_array($row)) { + $dba->insert($tableName, $row, true); + } else { + throw new \Exception('row isn\'t an array'); + } } } } + + /** + * Loads a given DB fixture-file 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; + + $this->loadDirectFixture($data, $dba); + } }