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