73 lines
2.4 KiB
PHP
73 lines
2.4 KiB
PHP
<?php
|
|
/**
|
|
* @author Daniel J. Summers <daniel@bitbadger.solutions>
|
|
* @license MIT
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Test\Integration\SQLite;
|
|
|
|
use BitBadger\PDODocument\{Custom, Definition, DocumentException, DocumentIndex};
|
|
use BitBadger\PDODocument\Mapper\ExistsMapper;
|
|
use PHPUnit\Framework\Attributes\TestDox;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
/**
|
|
* SQLite integration tests for the Definition class
|
|
*/
|
|
#[TestDox('Definition (SQLite integration)')]
|
|
class DefinitionTest extends TestCase
|
|
{
|
|
/** @var string Database name for throwaway database */
|
|
private string $dbName;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
$this->dbName = ThrowawayDb::create(withData: false);
|
|
}
|
|
|
|
protected function tearDown(): void
|
|
{
|
|
ThrowawayDb::destroy($this->dbName);
|
|
parent::tearDown();
|
|
}
|
|
|
|
/**
|
|
* Does the given named object exist in the database?
|
|
*
|
|
* @param string $name The name of the object whose existence should be verified
|
|
* @return bool True if the object exists, false if not
|
|
* @throws DocumentException If any is encountered
|
|
*/
|
|
private function itExists(string $name): bool
|
|
{
|
|
return Custom::scalar('SELECT EXISTS (SELECT 1 FROM sqlite_master WHERE name = :name)',
|
|
[':name' => $name], new ExistsMapper());
|
|
}
|
|
|
|
public function testEnsureTableSucceeds(): void
|
|
{
|
|
$this->assertFalse($this->itExists('ensured'), 'The table should not exist already');
|
|
$this->assertFalse($this->itExists('idx_ensured_key'), 'The key index should not exist already');
|
|
Definition::ensureTable('ensured');
|
|
$this->assertTrue($this->itExists('ensured'), 'The table should now exist');
|
|
$this->assertTrue($this->itExists('idx_ensured_key'), 'The key index should now exist');
|
|
}
|
|
|
|
public function testEnsureFieldIndexSucceeds(): void
|
|
{
|
|
$this->assertFalse($this->itExists('idx_ensured_test'), 'The index should not exist already');
|
|
Definition::ensureTable('ensured');
|
|
Definition::ensureFieldIndex('ensured', 'test', ['name', 'age']);
|
|
$this->assertTrue($this->itExists('idx_ensured_test'), 'The index should now exist');
|
|
}
|
|
|
|
public function testEnsureDocumentIndexFails(): void
|
|
{
|
|
$this->expectException(DocumentException::class);
|
|
Definition::ensureDocumentIndex('nope', DocumentIndex::Full);
|
|
}
|
|
}
|