packages/ztd-query-postgres/tests/Unit/Sql/Value/NativeCastTargetTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Value;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9
10#[CoversClass(\ZtdQuery\Platform\Postgres\Sql\Value\NativeCastTarget::class)]
11final class NativeCastTargetTest extends TestCase
12{
13    public function testIntegerPreservesWidths(): void
14    {
15        self::assertSame('SMALLINT', \ZtdQuery\Platform\Postgres\Sql\Value\NativeCastTarget::integer('int2'));
16        self::assertSame('BIGINT', \ZtdQuery\Platform\Postgres\Sql\Value\NativeCastTarget::integer('BIGSERIAL'));
17        self::assertSame('INTEGER', \ZtdQuery\Platform\Postgres\Sql\Value\NativeCastTarget::integer('INTEGER'));
18    }
19
20    public function testDecimalPreservesPrecision(): void
21    {
22        self::assertSame('NUMERIC(10,2)', \ZtdQuery\Platform\Postgres\Sql\Value\NativeCastTarget::decimal('decimal(10,2)'));
23        self::assertSame('NUMERIC(8,0)', \ZtdQuery\Platform\Postgres\Sql\Value\NativeCastTarget::decimal('NUMERIC(8)'));
24        self::assertSame('NUMERIC', \ZtdQuery\Platform\Postgres\Sql\Value\NativeCastTarget::decimal('DECIMAL'));
25    }
26
27    public function testStringPreservesBounds(): void
28    {
29        self::assertSame('VARCHAR(20)', \ZtdQuery\Platform\Postgres\Sql\Value\NativeCastTarget::string('varchar(20)'));
30        self::assertSame('VARCHAR', \ZtdQuery\Platform\Postgres\Sql\Value\NativeCastTarget::string('CHARACTER VARYING'));
31        self::assertSame('TEXT', \ZtdQuery\Platform\Postgres\Sql\Value\NativeCastTarget::string('CHAR(5)'));
32    }
33}
34