ulogger-server/.tests/lib/BaseDatabaseTestCase.php

172 lines
5.5 KiB
PHP
Raw Normal View History

2017-09-05 09:36:10 +02:00
<?php
use PHPUnit\Framework\TestCase;
abstract class BaseDatabaseTestCase extends PHPUnit_Extensions_Database_TestCase {
static private $pdo = null;
private $conn = null;
protected $testUser = "testUser";
protected $testUser2 = "testUser2";
protected $testAdminUser = "admin";
protected $testAdminPass = "admin";
protected $testPass = "testPass1234567890-;";
protected $testUserId = 1;
protected $testUserId2 = 2;
protected $testUserId3 = 3;
protected $testTrackId = 1;
protected $testTrackId2 = 2;
protected $testTrackName = "test track";
protected $testTrackComment = "test track comment";
protected $testTimestamp = 1502974402;
protected $testLat = 0;
protected $testLon = 10.01;
protected $testAltitude = 10.01;
protected $testSpeed = 10.01;
protected $testBearing = 10.01;
protected $testAccuracy = 10;
protected $testProvider = "gps";
protected $testComment = "test comment";
protected $testImageId = 1;
public static function setUpBeforeClass() {
if (file_exists(__DIR__ . '/../.env')) {
$dotenv = new Dotenv\Dotenv(__DIR__ . '/..');
$dotenv->load();
$dotenv->required(['DB_HOST', 'DB_NAME', 'DB_USER', 'DB_PASS']);
}
$db_host = getenv('DB_HOST');
$db_name = getenv('DB_NAME');
$db_user = getenv('DB_USER');
$db_pass = getenv('DB_PASS');
$db_port = getenv('DB_PORT') ?: NULL;
$db_dsn = "mysql:dbname={$db_name};host={$db_host}";
if (!empty($db_port)) {
$db_dsn .= ";port={$db_port}";
}
// pdo connection
if (self::$pdo == null) {
self::$pdo = new PDO($db_dsn, $db_user, $db_pass);;
}
}
public static function tearDownAfterClass() {
self::$pdo = null;
}
/**
* Set up database connection
* This will also override uDb class connection
*
* @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
*/
public function getConnection() {
if ($this->conn === null) {
$this->conn = $this->createDefaultDBConnection(self::$pdo, getenv('DB_NAME'));
}
return $this->conn;
}
/**
* Create data set from xml fixture
*
* @return PHPUnit_Extensions_Database_DataSet_IDataSet
*/
protected function getDataSet() {
return $this->createMySQLXMLDataSet(__DIR__ . '/../fixtures/fixture_empty.xml');
}
/**
* Insert to database from array
*
* @param string $table Table name
* @param array $rowsArr Array of rows
* @return int|null Last insert id if available, NULL otherwise
*/
private function pdoInsert($table, $rowsArr = []) {
$ret = NULL;
if (!empty($rowsArr)) {
$values = ':' . implode(', :', array_keys($rowsArr));
$columns = implode(', ', array_keys($rowsArr));
$query = "INSERT INTO $table ($columns) VALUES ($values)";
$stmt = self::$pdo->prepare($query);
if ($stmt !== false) {
$stmt->execute(array_combine(explode(', ', $values), array_values($rowsArr)));
}
$ret = self::$pdo->lastInsertId();
}
return $ret;
}
/**
* Get single column from first row of query result
*
* @param string $query SQL query
* @param int $columnNumber Optional column number (default is first column)
* @return string|bool Column or false if no data
*/
protected function pdoGetColumn($query, $columnNumber = 0) {
$column = false;
$stmt = self::$pdo->query($query);
if ($stmt !== false) {
$column = $stmt->fetchColumn($columnNumber);
$stmt->closeCursor();
}
return $column;
}
/**
* Insert user data to database
* If parameters are omitted they default test values are used
*
* @param string $user User login
* @param string $pass User password
* @return int|bool User id or false on error
*/
protected function addTestUser($user = NULL, $pass = NULL) {
if (is_null($user)) { $user = $this->testUser; }
if (is_null($pass)) { $pass = $this->testPass; }
return $this->pdoInsert('users', [ 'login' => $user, 'password' => $pass ]);
}
/**
* Insert track data to database.
* If parameters are omitted they default test values are used
*
* @param int $userId Optional track id
* @param string $trackName Optional track name
* @param string $comment Optional comment
* @return int|bool Track id or false on error
*/
protected function addTestTrack($userId = NULL, $trackName = NULL, $comment = NULL) {
if (is_null($userId)) { $userId = $this->testUserId; }
if (is_null($trackName)) { $trackName = $this->testTrackName; }
if (is_null($comment)) { $comment = $this->testComment; }
return $this->pdoInsert('tracks', [ 'user_id' => $userId, 'name' => $trackName, 'comment' => $comment ]);
}
/**
* Insert position data to database
* If parameters are omitted they default test values are used
*
* @param int $userId
* @param int $trackId
* @param int $timeStamp
* @param double $latitude
* @param double $longitude
* @return int|bool Position id or false on error
*/
protected function addTestPosition($userId = NULL, $trackId = NULL, $timeStamp = NULL, $latitude = NULL, $longitude = NULL) {
if (is_null($userId)) { $userId = $this->testUserId; }
if (is_null($trackId)) { $trackId = $this->testTrackId; }
if (is_null($timeStamp)) { $timeStamp = $this->testTimestamp; }
if (is_null($latitude)) { $latitude = $this->testLat; }
if (is_null($longitude)) { $longitude = $this->testLon; }
return $this->pdoInsert('positions', [ "user_id" => $userId, "track_id" => $trackId, "time" => date("Y-m-d H:m:s", $timeStamp), "latitude" => $latitude, "longitude" => $longitude ]);
}
}
?>