packages/ztd-query-core/tests/Unit/Platform/CastRendererTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Platform;
6
7use Override;
8use PHPUnit\Framework\Attributes\CoversNothing;
9use Tests\Contract\CastRendererContractTest;
10use Tests\Fake\FakeCastRenderer;
11use ZtdQuery\Platform\CastRenderer;
12use ZtdQuery\Schema\ColumnDeclaration;
13use ZtdQuery\Schema\ColumnTypeFamily;
14
15#[CoversNothing]
16final class CastRendererTest extends CastRendererContractTest
17{
18 public function createRenderer(): CastRenderer
19 {
20 return new FakeCastRenderer();
21 }
22
23 #[Override]
24 public function nativeTypeFor(ColumnTypeFamily $family): string
25 {
26 return match ($family) {
27 ColumnTypeFamily::INTEGER => 'INTEGER',
28 ColumnTypeFamily::FLOAT => 'REAL',
29 ColumnTypeFamily::DOUBLE => 'REAL',
30 ColumnTypeFamily::DECIMAL => 'NUMERIC(10,2)',
31 ColumnTypeFamily::STRING => 'TEXT',
32 ColumnTypeFamily::TEXT => 'TEXT',
33 ColumnTypeFamily::BOOLEAN => 'INTEGER',
34 ColumnTypeFamily::DATE => 'TEXT',
35 ColumnTypeFamily::TIME => 'TEXT',
36 ColumnTypeFamily::DATETIME => 'TEXT',
37 ColumnTypeFamily::TIMESTAMP => 'TEXT',
38 ColumnTypeFamily::BINARY => 'BLOB',
39 ColumnTypeFamily::JSON => 'TEXT',
40 ColumnTypeFamily::UNKNOWN => 'CUSTOM_TYPE',
41 };
42 }
43
44 public function testRenderCastWritesTheExpressionAsTheTypeItIsBeingReadFor(): void
45 {
46 $renderer = $this->createRenderer();
47 $type = new ColumnDeclaration(ColumnTypeFamily::INTEGER, 'INTEGER');
48
49 self::assertStringContainsString('1', $renderer->renderCast('1', $type));
50 }
51
52 public function testRenderNullCastWritesANullTheServerWillReadAsThatType(): void
53 {
54 $renderer = $this->createRenderer();
55 $type = new ColumnDeclaration(ColumnTypeFamily::TEXT, 'TEXT');
56
57 self::assertStringContainsStringIgnoringCase('null', $renderer->renderNullCast($type));
58 }
59}
60