packages/ztd-query-core/tests/Unit/Shadow/Mutation/Table/MultiTruncateMutationTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Shadow\Mutation\Table;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Shadow\Mutation\Table\MultiTruncateMutation;
11use ZtdQuery\Shadow\ShadowStore;
12
13#[UsesClass(ShadowStore::class)]
14#[CoversClass(MultiTruncateMutation::class)]
15#[UsesClass(\ZtdQuery\Schema\RowSet::class)]
16final class MultiTruncateMutationTest extends TestCase
17{
18 public function testApplyClearsEveryTargetTable(): void
19 {
20 $store = new ShadowStore();
21 $store->set('alpha', [['id' => 1]]);
22 $store->set('beta', [['id' => 2]]);
23 $store->set('untouched', [['id' => 3]]);
24
25 $mutation = new MultiTruncateMutation(['alpha', 'beta']);
26 $mutation->apply($store, [['id' => 99]]);
27
28 self::assertSame([], $store->get('alpha'));
29 self::assertSame([], $store->get('beta'));
30 self::assertSame([['id' => 3]], $store->get('untouched'));
31 }
32
33 public function testTableAccessorsPreserveStatementOrder(): void
34 {
35 $mutation = new MultiTruncateMutation(['alpha', 'beta']);
36
37 self::assertSame('alpha', $mutation->tableName());
38 self::assertSame(['alpha', 'beta'], $mutation->tableNames());
39 }
40
41 public function testEmptyTargetsHaveEmptyPrimaryTable(): void
42 {
43 $mutation = new MultiTruncateMutation([]);
44
45 self::assertSame('', $mutation->tableName());
46 self::assertSame([], $mutation->tableNames());
47 }
48
49 public function testTableNamesAreEveryTableTheStatementEmpties(): void
50 {
51 $mutation = new MultiTruncateMutation(['order', 'order_detail']);
52
53 self::assertSame(['order', 'order_detail'], $mutation->tableNames());
54 }
55
56 public function testTableNameIsTheFirstOfThemWhereOnlyOneCanBeNamed(): void
57 {
58 $mutation = new MultiTruncateMutation(['order', 'order_detail']);
59
60 self::assertSame('order', $mutation->tableName());
61 }
62}
63