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