packages/ztd-query-core/tests/Unit/Schema/Partition/TablePartitioningTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Schema\Partition;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\Schema\Partition\TablePartitioning;
10
11#[CoversClass(TablePartitioning::class)]
12final class TablePartitioningTest extends TestCase
13{
14    public function testCombinesNamedPredicatesCaseInsensitivelyAndWithoutDuplicates(): void
15    {
16        $partitioning = new TablePartitioning([
17            'Recent' => 'created_at >= 2024',
18            'Archive' => 'created_at < 2024',
19        ]);
20
21        self::assertSame(
22            ['created_at >= 2024', 'created_at < 2024'],
23            $partitioning->predicatesFor(['RECENT', 'archive', 'recent']),
24        );
25    }
26
27    public function testReturnsNullForUnknownPartition(): void
28    {
29        self::assertNull((new TablePartitioning(['p0' => 'id < 10']))->predicatesFor(['missing']));
30    }
31
32    public function testPredicatesForAnswersThePredicateOfEveryPartitionNamed(): void
33    {
34        $partitioning = new TablePartitioning(['p0' => 'id < 10', 'p1' => 'id >= 10']);
35
36        self::assertSame(['id < 10'], $partitioning->predicatesFor(['p0']));
37    }
38
39    public function testPredicatesForIsNothingWhereAPartitionIsNotOneOfThem(): void
40    {
41        $partitioning = new TablePartitioning(['p0' => 'id < 10']);
42
43        self::assertNull($partitioning->predicatesFor(['p9']));
44    }
45}
46