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

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Rewrite\Partition;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9
10#[CoversClass(\ZtdQuery\Platform\Postgres\Rewrite\Partition\StorageTable::class)]
11final class StorageTableTest extends TestCase
12{
13    public function testStorageTableFollowsNestedParentsAndStopsCycles(): void
14    {
15        $registry = new \ZtdQuery\Schema\TableDefinitionRegistry();
16        $base = new \ZtdQuery\Schema\TableDefinition(['id'], ['id' => 'INTEGER'], ['id'], [], []);
17        $registry->register('parent', $base);
18        $registry->register('child', $base->withPartitionRelation(new \ZtdQuery\Schema\Partition\TablePartitionRelation('parent', 'id < 10')));
19        $registry->register('grandchild', $base->withPartitionRelation(new \ZtdQuery\Schema\Partition\TablePartitionRelation('child', 'id < 5')));
20        $resolver = new \ZtdQuery\Platform\Postgres\Rewrite\Partition\StorageTable($registry);
21        self::assertSame('parent', $resolver->storageTable('grandchild'));
22        self::assertSame('unknown', $resolver->storageTable('unknown'));
23        $registry->register('parent', $base->withPartitionRelation(new \ZtdQuery\Schema\Partition\TablePartitionRelation('child', 'id < 20')));
24        self::assertSame('child', $resolver->storageTable('child'));
25    }
26}
27