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

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Shadow\Mutation\Row;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\Shadow\Mutation\Row\MultiTableMutationRow;
10
11#[CoversClass(MultiTableMutationRow::class)]
12final class MultiTableMutationRowTest extends TestCase
13{
14    public function testIdentityColumnValueColumnIdentityColumnExtractsValuesAndIdentityByTargetOrdinal(): void
15    {
16        $codec = new MultiTableMutationRow();
17        $row = [
18            '__ztd_multi_1_value_0' => 41,
19            '__ztd_multi_1_value_1' => 'processed',
20            '__ztd_multi_1_identity_0' => 40,
21        ];
22
23        self::assertSame('__ztd_multi_1_value_2', $codec->valueColumn(1, 2));
24        self::assertSame('__ztd_multi_1_identity_2', $codec->identityColumn(1, 2));
25        self::assertSame(['id' => 41, 'status' => 'processed'], $codec->values($row, 1, ['id', 'status']));
26        self::assertSame(['id' => 40], $codec->identity($row, 1, ['id']));
27    }
28
29    public function testValuesRejectsIncompleteProjectedRows(): void
30    {
31        $codec = new MultiTableMutationRow();
32
33        self::assertNull($codec->values([], 0, ['id']));
34        self::assertNull($codec->identity([], 0, ['id']));
35    }
36    public function testValueColumnNamesOneTableValueSoNoTableCouldUseTheName(): void
37    {
38        self::assertSame('__ztd_multi_1_value_2', (new MultiTableMutationRow())->valueColumn(1, 2));
39    }
40
41    public function testValueColumnNamesEachTableAndColumnApart(): void
42    {
43        $row = new MultiTableMutationRow();
44
45        self::assertNotSame($row->valueColumn(0, 1), $row->valueColumn(1, 0));
46    }
47
48}
49