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