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