packages/ztd-query-mysql/tests/Unit/Connection/MySqlSessionSqlModeReflectorTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Connection;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\Connection\ConnectionInterface;
10use ZtdQuery\Connection\StatementInterface;
11use ZtdQuery\Platform\MySql\Connection\MySqlSessionSqlModeReflector;
12
13#[CoversClass(MySqlSessionSqlModeReflector::class)]
14final class MySqlSessionSqlModeReflectorTest extends TestCase
15{
16    public function testReflectsTheCurrentSessionSqlMode(): void
17    {
18        $statement = self::createStub(StatementInterface::class);
19        $statement->method('fetchAll')->willReturn([['ztd_sql_mode' => 'STRICT_TRANS_TABLES,ANSI_QUOTES']]);
20        $connection = self::createMock(ConnectionInterface::class);
21        $connection->expects(self::once())->method('query')
22            ->with('SELECT @@SESSION.sql_mode AS ztd_sql_mode')->willReturn($statement);
23
24        self::assertSame(
25            'STRICT_TRANS_TABLES,ANSI_QUOTES',
26            (new MySqlSessionSqlModeReflector($connection))->reflect(),
27        );
28    }
29
30    public function testUsesTheDefaultModeWhenReflectionFails(): void
31    {
32        $connection = self::createStub(ConnectionInterface::class);
33        $connection->method('query')->willReturn(false);
34
35        self::assertSame('', (new MySqlSessionSqlModeReflector($connection))->reflect());
36    }
37}
38