1
1
Fork 0
mirror of https://code.mensbeam.com/MensBeam/Arsse.git synced 2024-12-25 10:02:40 +00:00
Arsse/tests/cases/Db/SQLite3/TestResult.php

109 lines
3.9 KiB
PHP
Raw Normal View History

2017-03-02 00:00:14 +00:00
<?php
/** @license MIT
* Copyright 2017 J. King, Dustin Wilson et al.
* See LICENSE and AUTHORS files for details */
2017-03-02 00:00:14 +00:00
declare(strict_types=1);
2017-12-22 16:41:54 +00:00
namespace JKingWeb\Arsse\TestCase\Db\SQLite3;
use JKingWeb\Arsse\Db\SQLite3\Result;
2017-03-02 00:00:14 +00:00
2017-07-20 22:36:03 +00:00
/** @covers \JKingWeb\Arsse\Db\SQLite3\Result<extended> */
2017-12-22 16:41:54 +00:00
class TestResult extends \JKingWeb\Arsse\Test\AbstractTest {
2017-03-02 00:00:14 +00:00
protected $c;
2017-08-29 14:50:31 +00:00
public function setUp() {
2017-12-22 16:45:24 +00:00
if (!\JKingWeb\Arsse\Db\SQLite3\Driver::requirementsMet()) {
$this->markTestSkipped("SQLite extension not loaded");
}
2017-12-22 16:45:24 +00:00
$this->clearData();
2017-03-02 00:00:14 +00:00
$c = new \SQLite3(":memory:");
$c->enableExceptions(true);
$this->c = $c;
}
2017-08-29 14:50:31 +00:00
public function tearDown() {
2017-03-02 00:00:14 +00:00
$this->c->close();
unset($this->c);
2017-12-19 17:11:49 +00:00
$this->clearData();
2017-03-02 00:00:14 +00:00
}
2017-08-29 14:50:31 +00:00
public function testConstructResult() {
2017-03-02 00:00:14 +00:00
$set = $this->c->query("SELECT 1");
2017-12-22 16:41:54 +00:00
$this->assertInstanceOf(Result::class, new Result($set));
2017-03-02 00:00:14 +00:00
}
2017-08-29 14:50:31 +00:00
public function testGetChangeCountAndLastInsertId() {
2017-03-02 00:00:14 +00:00
$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();
2017-12-22 16:41:54 +00:00
$r = new Result($set, [$rows,$id]);
$this->assertEquals($rows, $r->changes());
$this->assertEquals($id, $r->lastId());
2017-03-02 00:00:14 +00:00
}
2017-08-29 14:50:31 +00:00
public function testIterateOverResults() {
2017-03-02 00:00:14 +00:00
$set = $this->c->query("SELECT 1 as col union select 2 as col union select 3 as col");
$rows = [];
2017-12-22 16:41:54 +00:00
foreach (new Result($set) as $index => $row) {
2017-07-21 15:13:04 +00:00
$rows[$index] = $row['col'];
2017-03-02 00:00:14 +00:00
}
2017-07-21 15:13:04 +00:00
$this->assertEquals([0 => 1, 1 => 2, 2 => 3], $rows);
2017-03-02 00:00:14 +00:00
}
2017-08-29 14:50:31 +00:00
public function testIterateOverResultsTwice() {
2017-03-02 00:00:14 +00:00
$set = $this->c->query("SELECT 1 as col union select 2 as col union select 3 as col");
$rows = [];
2017-12-22 16:41:54 +00:00
$test = new Result($set);
2017-08-29 14:50:31 +00:00
foreach ($test as $row) {
2017-03-02 00:00:14 +00:00
$rows[] = $row['col'];
}
$this->assertEquals([1,2,3], $rows);
$this->assertException("resultReused", "Db");
2017-08-29 14:50:31 +00:00
foreach ($test as $row) {
2017-03-02 00:00:14 +00:00
$rows[] = $row['col'];
}
}
2017-08-29 14:50:31 +00:00
public function testGetSingleValues() {
2017-03-02 00:00:14 +00:00
$set = $this->c->query("SELECT 1867 as year union select 1970 as year union select 2112 as year");
2017-12-22 16:41:54 +00:00
$test = new Result($set);
$this->assertEquals(1867, $test->getValue());
$this->assertEquals(1970, $test->getValue());
$this->assertEquals(2112, $test->getValue());
$this->assertSame(null, $test->getValue());
}
2017-08-29 14:50:31 +00:00
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");
2017-12-22 16:41:54 +00:00
$test = new Result($set);
$this->assertEquals(1867, $test->getValue());
$this->assertEquals(1970, $test->getValue());
$this->assertEquals(2112, $test->getValue());
$this->assertSame(null, $test->getValue());
2017-03-02 00:00:14 +00:00
}
2017-08-29 14:50:31 +00:00
public function testGetRows() {
2017-03-02 00:00:14 +00:00
$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'],
];
2017-12-22 16:41:54 +00:00
$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'],
];
2017-12-22 16:41:54 +00:00
$test = new Result($set);
$this->assertEquals($rows, $test->getAll());
2017-03-02 00:00:14 +00:00
}
2017-08-29 14:50:31 +00:00
}