packages/ztd-query-core/tests/Unit/ExecuteResultTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit;
6
7use PHPUnit\Framework\Attributes\CoversNothing;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\GenericExecuteResult;
10use ZtdQuery\Rewrite\QueryKind;
11
12#[CoversNothing]
13final class ExecuteResultTest extends TestCase
14{
15    public function testIsPassthroughSaysWhetherTheOriginalStatementStillHasToRun(): void
16    {
17        self::assertTrue(GenericExecuteResult::passthrough()->isPassthrough());
18        self::assertFalse(GenericExecuteResult::fromBufferedRows([], QueryKind::WRITE_SIMULATED)->isPassthrough());
19    }
20
21    public function testIsSuccessSaysWhetherTheStatementGotAsFarAsAResult(): void
22    {
23        self::assertTrue(GenericExecuteResult::fromBufferedRows([], QueryKind::READ)->isSuccess());
24        self::assertFalse(GenericExecuteResult::failure(QueryKind::READ)->isSuccess());
25    }
26
27    public function testKindSaysWhatWasRun(): void
28    {
29        self::assertSame(
30            QueryKind::WRITE_SIMULATED,
31            GenericExecuteResult::fromBufferedRows([], QueryKind::WRITE_SIMULATED)->kind(),
32        );
33    }
34
35    public function testFetchAnswersEachRowInTurnAndThenNothing(): void
36    {
37        $result = GenericExecuteResult::fromBufferedRows([['id' => 1], ['id' => 2]], QueryKind::READ);
38
39        self::assertSame(['id' => 1], $result->fetch());
40        self::assertSame(['id' => 2], $result->fetch());
41        self::assertFalse($result->fetch());
42    }
43
44    public function testFetchAllAnswersEveryRowLeft(): void
45    {
46        $result = GenericExecuteResult::fromBufferedRows([['id' => 1], ['id' => 2]], QueryKind::READ);
47        $result->fetch();
48
49        self::assertSame([['id' => 2]], $result->fetchAll());
50    }
51
52    public function testRowCountAnswersHowManyRowsTheStatementCameTo(): void
53    {
54        $result = GenericExecuteResult::fromBufferedRows([['id' => 1]], QueryKind::WRITE_SIMULATED, 4);
55
56        self::assertSame(4, $result->rowCount());
57    }
58
59    public function testHasResultSetSaysWhetherThereIsAnythingToFetch(): void
60    {
61        self::assertTrue(GenericExecuteResult::fromBufferedRows([['id' => 1]], QueryKind::READ)->hasResultSet());
62        self::assertFalse(
63            GenericExecuteResult::fromBufferedRows([], QueryKind::WRITE_SIMULATED)->hasResultSet(),
64        );
65    }
66}
67