packages/ztd-query-core/tests/Unit/Shadow/Row/TableTransitionTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Shadow\Row;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Shadow\Row\RowChange;
11use ZtdQuery\Shadow\Row\TableTransition;
12
13#[CoversClass(TableTransition::class)]
14#[UsesClass(RowChange::class)]
15final class TableTransitionTest extends TestCase
16{
17    public function testKeepsTheTableAndTheRowsThatMoved(): void
18    {
19        $change = new RowChange(['id' => 1], ['id' => 2]);
20        $transition = new TableTransition('order', [['id' => 3]], [$change]);
21
22        self::assertSame('order', $transition->table);
23        self::assertSame([['id' => 3]], $transition->deleted);
24        self::assertSame([$change], $transition->updated);
25    }
26
27    public function testIsEmptyWhenNothingWasDeletedAndNothingChanged(): void
28    {
29        self::assertTrue((new TableTransition('order', [], []))->isEmpty());
30    }
31
32    public function testIsNotEmptyWhenARowWasDeleted(): void
33    {
34        self::assertFalse((new TableTransition('order', [['id' => 1]], []))->isEmpty());
35    }
36
37    public function testIsNotEmptyWhenARowChanged(): void
38    {
39        $change = new RowChange(['id' => 1], ['id' => 2]);
40
41        self::assertFalse((new TableTransition('order', [], [$change]))->isEmpty());
42    }
43}
44