Added Database class as a replacement for Db, fixed naming
parent
d36de2d26f
commit
edeab5e75f
@ -0,0 +1,98 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Engelsystem\Database;
|
||||||
|
|
||||||
|
use Illuminate\Database\Connection as DatabaseConnection;
|
||||||
|
use PDO;
|
||||||
|
|
||||||
|
class Database
|
||||||
|
{
|
||||||
|
/** @var DatabaseConnection */
|
||||||
|
protected $connection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param DatabaseConnection $connection
|
||||||
|
*/
|
||||||
|
public function __construct(DatabaseConnection $connection)
|
||||||
|
{
|
||||||
|
$this->connection = $connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run a select query
|
||||||
|
*
|
||||||
|
* @param string $query
|
||||||
|
* @param array $bindings
|
||||||
|
* @return object[]
|
||||||
|
*/
|
||||||
|
public function select($query, array $bindings = [])
|
||||||
|
{
|
||||||
|
return $this->connection->select($query, $bindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run a select query and return only the first result or null if no result is found.
|
||||||
|
*
|
||||||
|
* @param string $query
|
||||||
|
* @param array $bindings
|
||||||
|
* @return object|null
|
||||||
|
*/
|
||||||
|
public function selectOne($query, array $bindings = [])
|
||||||
|
{
|
||||||
|
return $this->connection->selectOne($query, $bindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run an insert query
|
||||||
|
*
|
||||||
|
* @param string $query
|
||||||
|
* @param array $bindings
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function insert($query, array $bindings = [])
|
||||||
|
{
|
||||||
|
return $this->connection->insert($query, $bindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run an update query
|
||||||
|
*
|
||||||
|
* @param string $query
|
||||||
|
* @param array $bindings
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function update($query, array $bindings = [])
|
||||||
|
{
|
||||||
|
return $this->connection->update($query, $bindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run a delete query
|
||||||
|
*
|
||||||
|
* @param string $query
|
||||||
|
* @param array $bindings
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function delete($query, array $bindings = [])
|
||||||
|
{
|
||||||
|
return $this->connection->delete($query, $bindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the PDO instance
|
||||||
|
*
|
||||||
|
* @return PDO
|
||||||
|
*/
|
||||||
|
public function getPdo()
|
||||||
|
{
|
||||||
|
return $this->connection->getPdo();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return DatabaseConnection
|
||||||
|
*/
|
||||||
|
public function getConnection()
|
||||||
|
{
|
||||||
|
return $this->connection;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,146 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Engelsystem\Test\Unit\Database;
|
||||||
|
|
||||||
|
use Engelsystem\Database\Database;
|
||||||
|
use Illuminate\Database\Capsule\Manager as CapsuleManager;
|
||||||
|
use Illuminate\Database\Connection as DatabaseConnection;
|
||||||
|
use PDO;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use PHPUnit_Framework_MockObject_MockObject as MockObject;
|
||||||
|
|
||||||
|
class DatabaseTest extends TestCase
|
||||||
|
{
|
||||||
|
/** @var DatabaseConnection */
|
||||||
|
protected $connection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Engelsystem\Database\Database::__construct()
|
||||||
|
* @covers \Engelsystem\Database\Database::getPdo()
|
||||||
|
* @covers \Engelsystem\Database\Database::getConnection()
|
||||||
|
*/
|
||||||
|
public function testInit()
|
||||||
|
{
|
||||||
|
/** @var Pdo|MockObject $pdo */
|
||||||
|
$pdo = $this->getMockBuilder(Pdo::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var DatabaseConnection|MockObject $databaseConnection */
|
||||||
|
$databaseConnection = $this->getMockBuilder(DatabaseConnection::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$databaseConnection->expects($this->atLeastOnce())
|
||||||
|
->method('getPdo')
|
||||||
|
->willReturn($pdo);
|
||||||
|
|
||||||
|
$db = new Database($databaseConnection);
|
||||||
|
|
||||||
|
$this->assertEquals($databaseConnection, $db->getConnection());
|
||||||
|
$this->assertEquals($pdo, $db->getPdo());
|
||||||
|
$this->assertInstanceOf(PDO::class, $db->getPdo());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Engelsystem\Database\Database::select()
|
||||||
|
*/
|
||||||
|
public function testSelect()
|
||||||
|
{
|
||||||
|
$db = new Database($this->connection);
|
||||||
|
|
||||||
|
$return = $db->select('SELECT * FROM test_data');
|
||||||
|
$this->assertTrue(count($return) > 3);
|
||||||
|
|
||||||
|
$return = $db->select('SELECT * FROM test_data WHERE id = ?', [2]);
|
||||||
|
$this->assertCount(1, $return);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Engelsystem\Database\Database::selectOne()
|
||||||
|
*/
|
||||||
|
public function testSelectOne()
|
||||||
|
{
|
||||||
|
$db = new Database($this->connection);
|
||||||
|
|
||||||
|
$return = $db->selectOne('SELECT * FROM test_data');
|
||||||
|
$this->assertEquals('Foo', $return->data);
|
||||||
|
|
||||||
|
$return = $db->selectOne('SELECT * FROM test_data WHERE id = -1');
|
||||||
|
$this->assertEmpty($return);
|
||||||
|
|
||||||
|
$return = $db->selectOne('SELECT * FROM test_data WHERE id = ?', [3]);
|
||||||
|
$this->assertTrue(!is_array($return));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Engelsystem\Database\Database::insert()
|
||||||
|
*/
|
||||||
|
public function testInsert()
|
||||||
|
{
|
||||||
|
$db = new Database($this->connection);
|
||||||
|
|
||||||
|
$result = $db->insert("INSERT INTO test_data (id, data) VALUES (5, 'Some random text'), (6, 'another text')");
|
||||||
|
$this->assertTrue($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Engelsystem\Database\Database::update()
|
||||||
|
*/
|
||||||
|
public function testUpdate()
|
||||||
|
{
|
||||||
|
$db = new Database($this->connection);
|
||||||
|
|
||||||
|
$count = $db->update("UPDATE test_data SET data='NOPE' WHERE data LIKE '%Replaceme%'");
|
||||||
|
$this->assertEquals(3, $count);
|
||||||
|
|
||||||
|
$count = $db->update("UPDATE test_data SET data=? WHERE data LIKE '%NOPE%'", ['Some random text!']);
|
||||||
|
$this->assertEquals(3, $count);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Engelsystem\Database\Database::delete()
|
||||||
|
*/
|
||||||
|
public function testDelete()
|
||||||
|
{
|
||||||
|
$db = new Database($this->connection);
|
||||||
|
|
||||||
|
$count = $db->delete('DELETE FROM test_data WHERE id=1');
|
||||||
|
$this->assertEquals(1, $count);
|
||||||
|
|
||||||
|
$count = $db->delete('DELETE FROM test_data WHERE data LIKE ?', ['%Replaceme%']);
|
||||||
|
$this->assertEquals(3, $count);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup in memory database
|
||||||
|
*/
|
||||||
|
protected function setUp()
|
||||||
|
{
|
||||||
|
$dbManager = new CapsuleManager();
|
||||||
|
$dbManager->addConnection(['driver' => 'sqlite', 'database' => ':memory:']);
|
||||||
|
|
||||||
|
$connection = $dbManager->getConnection();
|
||||||
|
$this->connection = $connection;
|
||||||
|
|
||||||
|
$connection->getPdo()->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||||
|
$connection->statement(
|
||||||
|
'
|
||||||
|
CREATE TABLE test_data(
|
||||||
|
id INT PRIMARY KEY NOT NULL,
|
||||||
|
data TEXT NOT NULL
|
||||||
|
);
|
||||||
|
');
|
||||||
|
$connection->statement('CREATE UNIQUE INDEX test_data_id_uindex ON test_data (id);');
|
||||||
|
$connection->insert("
|
||||||
|
INSERT INTO test_data (id, data)
|
||||||
|
VALUES
|
||||||
|
(1, 'Foo'),
|
||||||
|
(2, 'Bar'),
|
||||||
|
(3, 'Batz'),
|
||||||
|
(4, 'Lorem ipsum dolor sit'),
|
||||||
|
(10, 'Replaceme ipsum dolor sit amet'),
|
||||||
|
(11, 'Lorem Replaceme dolor sit amet'),
|
||||||
|
(12, 'Lorem ipsum Replaceme sit amet')
|
||||||
|
;");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue