172 lines
5.5 KiB
PHP
172 lines
5.5 KiB
PHP
<?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 ]);
|
|
}
|
|
}
|
|
?>
|