packages/ztd-query-postgres/tests/Unit/Rewrite/Partition/PgSqlPartitionPredicateRendererTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Rewrite\Partition;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\Platform\Postgres\Rewrite\Partition\PgSqlPartitionPredicateRenderer;
10use ZtdQuery\Schema\Partition\TablePartitionRelation;
11
12#[CoversClass(PgSqlPartitionPredicateRenderer::class)]
13final class PgSqlPartitionPredicateRendererTest extends TestCase
14{
15    public function testRendersSpecificPartitionPredicate(): void
16    {
17        $relation = new TablePartitionRelation('events', 'created_at >= DATE \'2024-01-01\'');
18
19        self::assertSame(
20            'created_at >= DATE \'2024-01-01\'',
21            (new PgSqlPartitionPredicateRenderer())->render($relation, ['FALSE']),
22        );
23    }
24
25    public function testRendersDefaultPartitionPredicateFromSiblings(): void
26    {
27        $renderer = new PgSqlPartitionPredicateRenderer();
28        $relation = new TablePartitionRelation('events', null);
29
30        self::assertSame(
31            'COALESCE(NOT ((year = 2024) OR (year = 2025)), TRUE)',
32            $renderer->render($relation, ['year = 2024', 'year = 2025']),
33        );
34        self::assertSame('TRUE', $renderer->render($relation, []));
35    }
36}
37