packages/ztd-query-core/tests/Unit/Connection/StatementInterfaceTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Connection;
6
7use PHPUnit\Framework\Attributes\CoversNothing;
8use PHPUnit\Framework\TestCase;
9use Tests\Fake\FakeStatement;
10use ZtdQuery\Connection\ResultColumn;
11use ZtdQuery\Platform\MissingResultColumnTypeResolver;
12use ZtdQuery\Schema\ColumnDeclaration;
13use ZtdQuery\Schema\ColumnTypeFamily;
14
15#[CoversNothing]
16final class StatementInterfaceTest extends TestCase
17{
18 public function testExecuteReportsWhetherTheStatementRan(): void
19 {
20 self::assertTrue((new FakeStatement([]))->execute());
21 }
22
23 public function testExecuteTakesTheValuesToBindOrNoneAtAll(): void
24 {
25 $statement = new FakeStatement([]);
26
27 self::assertTrue($statement->execute(['id' => 1, 0 => null]));
28 self::assertTrue($statement->execute());
29 }
30
31 public function testFetchAllAnswersEveryRowAsAMapOfColumnToValue(): void
32 {
33 $statement = new FakeStatement([['id' => 1, 'name' => 'a'], ['id' => 2, 'name' => null]]);
34
35 self::assertSame([['id' => 1, 'name' => 'a'], ['id' => 2, 'name' => null]], $statement->fetchAll());
36 }
37
38 public function testFetchAllAnswersNothingForAResultWithNoRows(): void
39 {
40 self::assertSame([], (new FakeStatement([]))->fetchAll());
41 }
42
43 public function testResultColumnsRemainAvailableForAResultWithNoRows(): void
44 {
45 $columns = [new ResultColumn('id', new ColumnDeclaration(ColumnTypeFamily::INTEGER, 'int4'))];
46 $statement = new FakeStatement([], $columns);
47
48 self::assertSame($columns, $statement->resultColumns(new MissingResultColumnTypeResolver()));
49 }
50
51 public function testRowCountAnswersHowManyRowsThereAre(): void
52 {
53 self::assertSame(2, (new FakeStatement([['id' => 1], ['id' => 2]]))->rowCount());
54 self::assertSame(0, (new FakeStatement([]))->rowCount());
55 }
56}
57