dbName = ThrowawayDb::create(); } public function tearDown(): void { ThrowawayDb::destroy($this->dbName); } public function testRunQuerySucceedsWithAValidQuery() { $stmt = &Custom::runQuery('SELECT data FROM ' . ThrowawayDb::TABLE . ' LIMIT 1', []); try { $this->assertNotNull($stmt, 'The statement should not have been null'); } finally { $stmt = null; } } public function testRunQueryFailsWithAnInvalidQuery() { $this->expectException(DocumentException::class); $stmt = &Custom::runQuery('GRAB stuff FROM over_there UNTIL done', []); try { $this->assertTrue(false, 'This code should not be reached'); } finally { $stmt = null; } } public function testListSucceedsWhenDataIsFound() { $list = Custom::list(Query::selectFromTable(ThrowawayDb::TABLE), [], new DocumentMapper(TestDocument::class)); $this->assertNotNull($list, 'The document list should not be null'); $count = 0; foreach ($list->items() as $ignored) $count++; $this->assertEquals(5, $count, 'There should have been 5 documents in the list'); } public function testListSucceedsWhenNoDataIsFound() { $list = Custom::list(Query::selectFromTable(ThrowawayDb::TABLE) . " WHERE data->>'num_value' > :value", [':value' => 100], new DocumentMapper(TestDocument::class)); $this->assertNotNull($list, 'The document list should not be null'); $this->assertFalse($list->hasItems(), 'There should have been no documents in the list'); } public function testArraySucceedsWhenDataIsFound() { $array = Custom::array(Query::selectFromTable(ThrowawayDb::TABLE) . " WHERE data->>'sub' IS NOT NULL", [], new DocumentMapper(TestDocument::class)); $this->assertNotNull($array, 'The document array should not be null'); $this->assertCount(2, $array, 'There should have been 2 documents in the array'); } public function testArraySucceedsWhenNoDataIsFound() { $array = Custom::array(Query::selectFromTable(ThrowawayDb::TABLE) . " WHERE data->>'value' = :value", [':value' => 'not there'], new DocumentMapper(TestDocument::class)); $this->assertNotNull($array, 'The document array should not be null'); $this->assertCount(0, $array, 'There should have been no documents in the array'); } public function testSingleSucceedsWhenARowIsFound(): void { $doc = Custom::single('SELECT data FROM ' . ThrowawayDb::TABLE . " WHERE data->>'id' = :id", [':id' => 'one'], new DocumentMapper(TestDocument::class)); $this->assertNotNull($doc, 'There should have been a document returned'); $this->assertEquals('one', $doc->id, 'The incorrect document was returned'); } public function testSingleSucceedsWhenARowIsNotFound(): void { $doc = Custom::single('SELECT data FROM ' . ThrowawayDb::TABLE . " WHERE data->>'id' = :id", [':id' => 'eighty'], new DocumentMapper(TestDocument::class)); $this->assertFalse($doc, 'There should not have been a document returned'); } public function testNonQuerySucceedsWhenOperatingOnData() { Custom::nonQuery('DELETE FROM ' . ThrowawayDb::TABLE, []); $remaining = Count::all(ThrowawayDb::TABLE); $this->assertEquals(0, $remaining, 'There should be no documents remaining in the table'); } public function testNonQuerySucceedsWhenNoDataMatchesWhereClause() { Custom::nonQuery('DELETE FROM ' . ThrowawayDb::TABLE . " WHERE data->>'num_value' > :value", [':value' => 100]); $remaining = Count::all(ThrowawayDb::TABLE); $this->assertEquals(5, $remaining, 'There should be 5 documents remaining in the table'); } public function testScalarSucceeds() { $value = Custom::scalar("SELECT 5 AS it", [], new CountMapper()); $this->assertEquals(5, $value, 'The scalar value was not returned correctly'); } }