mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2024-12-22 13:12:41 +00:00
Consolidate Db result test series into single file
This commit is contained in:
parent
ffea7e804a
commit
30d6f6db37
5 changed files with 150 additions and 218 deletions
|
@ -1,108 +0,0 @@
|
|||
<?php
|
||||
/** @license MIT
|
||||
* Copyright 2017 J. King, Dustin Wilson et al.
|
||||
* See LICENSE and AUTHORS files for details */
|
||||
|
||||
declare(strict_types=1);
|
||||
namespace JKingWeb\Arsse\TestCase\Db\SQLite3;
|
||||
|
||||
use JKingWeb\Arsse\Db\SQLite3\Result;
|
||||
|
||||
/** @covers \JKingWeb\Arsse\Db\SQLite3\Result<extended> */
|
||||
class TestResult extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||
protected $c;
|
||||
|
||||
public function setUp() {
|
||||
if (!\JKingWeb\Arsse\Db\SQLite3\Driver::requirementsMet()) {
|
||||
$this->markTestSkipped("SQLite extension not loaded");
|
||||
}
|
||||
$this->clearData();
|
||||
$c = new \SQLite3(":memory:");
|
||||
$c->enableExceptions(true);
|
||||
$this->c = $c;
|
||||
}
|
||||
|
||||
public function tearDown() {
|
||||
$this->c->close();
|
||||
unset($this->c);
|
||||
$this->clearData();
|
||||
}
|
||||
|
||||
public function testConstructResult() {
|
||||
$set = $this->c->query("SELECT 1");
|
||||
$this->assertInstanceOf(Result::class, new Result($set));
|
||||
}
|
||||
|
||||
public function testGetChangeCountAndLastInsertId() {
|
||||
$this->c->query("CREATE TABLE test(col)");
|
||||
$set = $this->c->query("INSERT INTO test(col) values(1)");
|
||||
$rows = $this->c->changes();
|
||||
$id = $this->c->lastInsertRowID();
|
||||
$r = new Result($set, [$rows,$id]);
|
||||
$this->assertEquals($rows, $r->changes());
|
||||
$this->assertEquals($id, $r->lastId());
|
||||
}
|
||||
|
||||
public function testIterateOverResults() {
|
||||
$set = $this->c->query("SELECT 1 as col union select 2 as col union select 3 as col");
|
||||
$rows = [];
|
||||
foreach (new Result($set) as $index => $row) {
|
||||
$rows[$index] = $row['col'];
|
||||
}
|
||||
$this->assertEquals([0 => 1, 1 => 2, 2 => 3], $rows);
|
||||
}
|
||||
|
||||
public function testIterateOverResultsTwice() {
|
||||
$set = $this->c->query("SELECT 1 as col union select 2 as col union select 3 as col");
|
||||
$rows = [];
|
||||
$test = new Result($set);
|
||||
foreach ($test as $row) {
|
||||
$rows[] = $row['col'];
|
||||
}
|
||||
$this->assertEquals([1,2,3], $rows);
|
||||
$this->assertException("resultReused", "Db");
|
||||
foreach ($test as $row) {
|
||||
$rows[] = $row['col'];
|
||||
}
|
||||
}
|
||||
|
||||
public function testGetSingleValues() {
|
||||
$set = $this->c->query("SELECT 1867 as year union select 1970 as year union select 2112 as year");
|
||||
$test = new Result($set);
|
||||
$this->assertEquals(1867, $test->getValue());
|
||||
$this->assertEquals(1970, $test->getValue());
|
||||
$this->assertEquals(2112, $test->getValue());
|
||||
$this->assertSame(null, $test->getValue());
|
||||
}
|
||||
|
||||
public function testGetFirstValuesOnly() {
|
||||
$set = $this->c->query("SELECT 1867 as year, 19 as century union select 1970 as year, 20 as century union select 2112 as year, 22 as century");
|
||||
$test = new Result($set);
|
||||
$this->assertEquals(1867, $test->getValue());
|
||||
$this->assertEquals(1970, $test->getValue());
|
||||
$this->assertEquals(2112, $test->getValue());
|
||||
$this->assertSame(null, $test->getValue());
|
||||
}
|
||||
|
||||
public function testGetRows() {
|
||||
$set = $this->c->query("SELECT '2112' as album, '2112' as track union select 'Clockwork Angels' as album, 'The Wreckers' as track");
|
||||
$rows = [
|
||||
['album' => '2112', 'track' => '2112'],
|
||||
['album' => 'Clockwork Angels', 'track' => 'The Wreckers'],
|
||||
];
|
||||
$test = new Result($set);
|
||||
$this->assertEquals($rows[0], $test->getRow());
|
||||
$this->assertEquals($rows[1], $test->getRow());
|
||||
$this->assertSame(null, $test->getRow());
|
||||
}
|
||||
|
||||
public function testGetAllRows() {
|
||||
$set = $this->c->query("SELECT '2112' as album, '2112' as track union select 'Clockwork Angels' as album, 'The Wreckers' as track");
|
||||
$rows = [
|
||||
['album' => '2112', 'track' => '2112'],
|
||||
['album' => 'Clockwork Angels', 'track' => 'The Wreckers'],
|
||||
];
|
||||
$test = new Result($set);
|
||||
$this->assertEquals($rows, $test->getAll());
|
||||
}
|
||||
}
|
|
@ -1,108 +0,0 @@
|
|||
<?php
|
||||
/** @license MIT
|
||||
* Copyright 2017 J. King, Dustin Wilson et al.
|
||||
* See LICENSE and AUTHORS files for details */
|
||||
|
||||
declare(strict_types=1);
|
||||
namespace JKingWeb\Arsse\TestCase\Db\SQLite3PDO;
|
||||
|
||||
use JKingWeb\Arsse\Db\Result;
|
||||
use JKingWeb\Arsse\Db\PDOResult;
|
||||
use JKingWeb\Arsse\Db\SQLite3\PDODriver;
|
||||
|
||||
/** @covers \JKingWeb\Arsse\Db\PDOResult<extended> */
|
||||
class TestResult extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||
protected $c;
|
||||
|
||||
public function setUp() {
|
||||
if (!PDODriver::requirementsMet()) {
|
||||
$this->markTestSkipped("PDO-SQLite extension not loaded");
|
||||
}
|
||||
$this->clearData();
|
||||
$c = new \PDO("sqlite::memory:", "", "", [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION]);
|
||||
$this->c = $c;
|
||||
}
|
||||
|
||||
public function tearDown() {
|
||||
unset($this->c);
|
||||
$this->clearData();
|
||||
}
|
||||
|
||||
public function testConstructResult() {
|
||||
$set = $this->c->query("SELECT 1");
|
||||
$this->assertInstanceOf(Result::class, new PDOResult($set));
|
||||
}
|
||||
|
||||
public function testGetChangeCountAndLastInsertId() {
|
||||
$this->c->query("CREATE TABLE test(col)");
|
||||
$set = $this->c->query("INSERT INTO test(col) values(1)");
|
||||
$rows = $set->rowCount();
|
||||
$id = $this->c->lastInsertID();
|
||||
$r = new PDOResult($set, [$rows,$id]);
|
||||
$this->assertSame((int) $rows, $r->changes());
|
||||
$this->assertSame((int) $id, $r->lastId());
|
||||
}
|
||||
|
||||
public function testIterateOverResults() {
|
||||
$set = $this->c->query("SELECT 1 as col union select 2 as col union select 3 as col");
|
||||
$rows = [];
|
||||
foreach (new PDOResult($set) as $index => $row) {
|
||||
$rows[$index] = $row['col'];
|
||||
}
|
||||
$this->assertSame([0 => "1", 1 => "2", 2 => "3"], $rows);
|
||||
}
|
||||
|
||||
public function testIterateOverResultsTwice() {
|
||||
$set = $this->c->query("SELECT 1 as col union select 2 as col union select 3 as col");
|
||||
$rows = [];
|
||||
$test = new PDOResult($set);
|
||||
foreach ($test as $row) {
|
||||
$rows[] = $row['col'];
|
||||
}
|
||||
$this->assertSame(["1","2","3"], $rows);
|
||||
$this->assertException("resultReused", "Db");
|
||||
foreach ($test as $row) {
|
||||
$rows[] = $row['col'];
|
||||
}
|
||||
}
|
||||
|
||||
public function testGetSingleValues() {
|
||||
$set = $this->c->query("SELECT 1867 as year union select 1970 as year union select 2112 as year");
|
||||
$test = new PDOResult($set);
|
||||
$this->assertEquals(1867, $test->getValue());
|
||||
$this->assertEquals(1970, $test->getValue());
|
||||
$this->assertEquals(2112, $test->getValue());
|
||||
$this->assertSame(null, $test->getValue());
|
||||
}
|
||||
|
||||
public function testGetFirstValuesOnly() {
|
||||
$set = $this->c->query("SELECT 1867 as year, 19 as century union select 1970 as year, 20 as century union select 2112 as year, 22 as century");
|
||||
$test = new PDOResult($set);
|
||||
$this->assertEquals(1867, $test->getValue());
|
||||
$this->assertEquals(1970, $test->getValue());
|
||||
$this->assertEquals(2112, $test->getValue());
|
||||
$this->assertSame(null, $test->getValue());
|
||||
}
|
||||
|
||||
public function testGetRows() {
|
||||
$set = $this->c->query("SELECT '2112' as album, '2112' as track union select 'Clockwork Angels' as album, 'The Wreckers' as track");
|
||||
$rows = [
|
||||
['album' => '2112', 'track' => '2112'],
|
||||
['album' => 'Clockwork Angels', 'track' => 'The Wreckers'],
|
||||
];
|
||||
$test = new PDOResult($set);
|
||||
$this->assertEquals($rows[0], $test->getRow());
|
||||
$this->assertEquals($rows[1], $test->getRow());
|
||||
$this->assertSame(null, $test->getRow());
|
||||
}
|
||||
|
||||
public function testGetAllRows() {
|
||||
$set = $this->c->query("SELECT '2112' as album, '2112' as track union select 'Clockwork Angels' as album, 'The Wreckers' as track");
|
||||
$rows = [
|
||||
['album' => '2112', 'track' => '2112'],
|
||||
['album' => 'Clockwork Angels', 'track' => 'The Wreckers'],
|
||||
];
|
||||
$test = new PDOResult($set);
|
||||
$this->assertEquals($rows, $test->getAll());
|
||||
}
|
||||
}
|
134
tests/cases/Db/TestResult.php
Normal file
134
tests/cases/Db/TestResult.php
Normal file
|
@ -0,0 +1,134 @@
|
|||
<?php
|
||||
/** @license MIT
|
||||
* Copyright 2017 J. King, Dustin Wilson et al.
|
||||
* See LICENSE and AUTHORS files for details */
|
||||
|
||||
declare(strict_types=1);
|
||||
namespace JKingWeb\Arsse\TestCase\Db;
|
||||
|
||||
use JKingWeb\Arsse\Db\Result;
|
||||
use JKingWeb\Arsse\Db\PDOResult;
|
||||
use JKingWeb\Arsse\Db\SQLite3\PDODriver;
|
||||
|
||||
/**
|
||||
* @covers \JKingWeb\Arsse\Db\PDOResult<extended>
|
||||
* @covers \JKingWeb\Arsse\Db\SQLite3\Result<extended>
|
||||
*/
|
||||
class TestResult extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||
public function provideDrivers() {
|
||||
$drvSqlite3 = (function() {
|
||||
if (\JKingWeb\Arsse\Db\SQLite3\Driver::requirementsMet()) {
|
||||
$d = new \SQLite3(":memory:");
|
||||
$d->enableExceptions(true);
|
||||
return $d;
|
||||
}
|
||||
})();
|
||||
$drvPdo = (function() {
|
||||
if (\JKingWeb\Arsse\Db\SQLite3\PDODriver::requirementsMet()) {
|
||||
return new \PDO("sqlite::memory:", "", "", [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION]);
|
||||
}
|
||||
})();
|
||||
return [
|
||||
'SQLite 3' => [isset($drvSqlite3), false, \JKingWeb\Arsse\Db\SQLite3\Result::class, function(string $query) use($drvSqlite3) {
|
||||
$set = $drvSqlite3->query($query);
|
||||
$rows = $drvSqlite3->changes();
|
||||
$id = $drvSqlite3->lastInsertRowID();
|
||||
return [$set, [$rows, $id]];
|
||||
}],
|
||||
'PDO' => [isset($drvPdo), true, \JKingWeb\Arsse\Db\PDOResult::class, function(string $query) use($drvPdo) {
|
||||
$set = $drvPdo->query($query);
|
||||
$rows = $set->rowCount();
|
||||
$id = $drvPdo->lastInsertID();
|
||||
return [$set, [$rows, $id]];
|
||||
}],
|
||||
];
|
||||
}
|
||||
|
||||
/** @dataProvider provideDrivers */
|
||||
public function testConstructResult($driver, bool $stringCoersion, string $class, \Closure $func) {
|
||||
if (is_null($driver)) {
|
||||
$this->markTestSkipped();
|
||||
}
|
||||
$this->assertInstanceOf(Result::class, new $class(...$func("SELECT 1")));
|
||||
}
|
||||
|
||||
/** @dataProvider provideDrivers */
|
||||
public function testGetChangeCountAndLastInsertId($driver, bool $stringCoersion, string $class, \Closure $func) {
|
||||
$func("CREATE TABLE if not exists arsse_meta(key varchar(255) primary key not null, value text)");
|
||||
$out = $func("INSERT INTO arsse_meta(key,value) values('test', 1)");
|
||||
$rows = $out[1][0];
|
||||
$id = $out[1][1];
|
||||
$r = new $class(...$out);
|
||||
$this->assertSame((int) $rows, $r->changes());
|
||||
$this->assertSame((int) $id, $r->lastId());
|
||||
}
|
||||
|
||||
/** @dataProvider provideDrivers */
|
||||
public function testIterateOverResults($driver, bool $stringCoersion, string $class, \Closure $func) {
|
||||
$exp = [0 => 1, 1 => 2, 2 => 3];
|
||||
$exp = $stringCoersion ? $this->stringify($exp) : $exp;
|
||||
foreach (new $class(...$func("SELECT 1 as col union select 2 as col union select 3 as col")) as $index => $row) {
|
||||
$rows[$index] = $row['col'];
|
||||
}
|
||||
$this->assertSame($exp, $rows);
|
||||
}
|
||||
|
||||
/** @dataProvider provideDrivers */
|
||||
public function testIterateOverResultsTwice($driver, bool $stringCoersion, string $class, \Closure $func) {
|
||||
$exp = [0 => 1, 1 => 2, 2 => 3];
|
||||
$exp = $stringCoersion ? $this->stringify($exp) : $exp;
|
||||
$result = new $class(...$func("SELECT 1 as col union select 2 as col union select 3 as col"));
|
||||
foreach ($result as $index => $row) {
|
||||
$rows[$index] = $row['col'];
|
||||
}
|
||||
$this->assertSame($exp, $rows);
|
||||
$this->assertException("resultReused", "Db");
|
||||
foreach ($result as $row) {
|
||||
$rows[] = $row['col'];
|
||||
}
|
||||
}
|
||||
|
||||
/** @dataProvider provideDrivers */
|
||||
public function testGetSingleValues($driver, bool $stringCoersion, string $class, \Closure $func) {
|
||||
$exp = [1867, 1970, 2112];
|
||||
$exp = $stringCoersion ? $this->stringify($exp) : $exp;
|
||||
$test = new $class(...$func("SELECT 1867 as year union select 1970 as year union select 2112 as year"));
|
||||
$this->assertSame($exp[0], $test->getValue());
|
||||
$this->assertSame($exp[1], $test->getValue());
|
||||
$this->assertSame($exp[2], $test->getValue());
|
||||
$this->assertSame(null, $test->getValue());
|
||||
}
|
||||
|
||||
/** @dataProvider provideDrivers */
|
||||
public function testGetFirstValuesOnly($driver, bool $stringCoersion, string $class, \Closure $func) {
|
||||
$exp = [1867, 1970, 2112];
|
||||
$exp = $stringCoersion ? $this->stringify($exp) : $exp;
|
||||
$test = new $class(...$func("SELECT 1867 as year, 19 as century union select 1970 as year, 20 as century union select 2112 as year, 22 as century"));
|
||||
$this->assertSame($exp[0], $test->getValue());
|
||||
$this->assertSame($exp[1], $test->getValue());
|
||||
$this->assertSame($exp[2], $test->getValue());
|
||||
$this->assertSame(null, $test->getValue());
|
||||
}
|
||||
|
||||
/** @dataProvider provideDrivers */
|
||||
public function testGetRows($driver, bool $stringCoersion, string $class, \Closure $func) {
|
||||
$exp = [
|
||||
['album' => '2112', 'track' => '2112'],
|
||||
['album' => 'Clockwork Angels', 'track' => 'The Wreckers'],
|
||||
];
|
||||
$test = new $class(...$func("SELECT '2112' as album, '2112' as track union select 'Clockwork Angels' as album, 'The Wreckers' as track"));
|
||||
$this->assertSame($exp[0], $test->getRow());
|
||||
$this->assertSame($exp[1], $test->getRow());
|
||||
$this->assertSame(null, $test->getRow());
|
||||
}
|
||||
|
||||
/** @dataProvider provideDrivers */
|
||||
public function testGetAllRows($driver, bool $stringCoersion, string $class, \Closure $func) {
|
||||
$exp = [
|
||||
['album' => '2112', 'track' => '2112'],
|
||||
['album' => 'Clockwork Angels', 'track' => 'The Wreckers'],
|
||||
];
|
||||
$test = new $class(...$func("SELECT '2112' as album, '2112' as track union select 'Clockwork Angels' as album, 'The Wreckers' as track"));
|
||||
$this->assertEquals($exp, $test->getAll());
|
||||
}
|
||||
}
|
|
@ -105,4 +105,18 @@ abstract class AbstractTest extends \PHPUnit\Framework\TestCase {
|
|||
return $act;
|
||||
}
|
||||
}
|
||||
|
||||
public function stringify($value) {
|
||||
if (!is_array($value)) {
|
||||
return $value;
|
||||
}
|
||||
foreach ($value as $k => $v) {
|
||||
if (is_array($v)) {
|
||||
$value[$k] = $this->v($v);
|
||||
} elseif (is_int($v) || is_float($v)) {
|
||||
$value[$k] = (string) $v;
|
||||
}
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,13 +45,13 @@
|
|||
<file>cases/Db/TestTransaction.php</file>
|
||||
<file>cases/Db/TestResultAggregate.php</file>
|
||||
<file>cases/Db/TestResultEmpty.php</file>
|
||||
<file>cases/Db/SQLite3/TestResult.php</file>
|
||||
<file>cases/Db/TestResult.php</file>
|
||||
|
||||
<file>cases/Db/SQLite3/TestStatement.php</file>
|
||||
<file>cases/Db/SQLite3/TestCreation.php</file>
|
||||
<file>cases/Db/SQLite3/TestDriver.php</file>
|
||||
<file>cases/Db/SQLite3/TestUpdate.php</file>
|
||||
|
||||
<file>cases/Db/SQLite3PDO/TestResult.php</file>
|
||||
<file>cases/Db/SQLite3PDO/TestStatement.php</file>
|
||||
<file>cases/Db/SQLite3PDO/TestCreation.php</file>
|
||||
<file>cases/Db/SQLite3PDO/TestDriver.php</file>
|
||||
|
|
Loading…
Reference in a new issue