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