packages/ztd-query-core/tests/Unit/Rewrite/InsertRowProjectionTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Rewrite;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\Rewrite\InsertRowProjection;
10
11#[CoversClass(InsertRowProjection::class)]
12final class InsertRowProjectionTest extends TestCase
13{
14 public function testDefaultExpressionValueDefaultExpressionRepresentsProvidedDefaultGeneratedAndNullValuesWithoutSqlRendering(): void
15 {
16 $provided = InsertRowProjection::provided('name', "'Ada'");
17 $default = InsertRowProjection::defaultExpression('status', "'active'");
18 $generated = InsertRowProjection::generatedIdentity('id', 8);
19 $null = InsertRowProjection::nullValue('note');
20
21 self::assertSame('name', $provided->targetColumn());
22 self::assertSame("'Ada'", $provided->providedExpression());
23 self::assertNull($provided->defaultExpressionValue());
24 self::assertNull($provided->generatedIdentityValue());
25 self::assertFalse($provided->isNullValue());
26 self::assertSame("'active'", $default->defaultExpressionValue());
27 self::assertNull($default->providedExpression());
28 self::assertNull($default->generatedIdentityValue());
29 self::assertFalse($default->isNullValue());
30 self::assertSame(8, $generated->generatedIdentityValue());
31 self::assertNull($generated->providedExpression());
32 self::assertNull($generated->defaultExpressionValue());
33 self::assertFalse($generated->isNullValue());
34 self::assertTrue($null->isNullValue());
35 self::assertNull($null->providedExpression());
36 self::assertNull($null->defaultExpressionValue());
37 self::assertNull($null->generatedIdentityValue());
38 }
39
40 public function testGeneratedIdentityValueAcceptsMinimumGeneratedIdentityValue(): void
41 {
42 self::assertSame(1, InsertRowProjection::generatedIdentity('id', 1)->generatedIdentityValue());
43 }
44
45 public function testProvidedCarriesTheExpressionTheStatementWrote(): void
46 {
47 $projection = InsertRowProjection::provided('name', "'Ada'");
48
49 self::assertSame("'Ada'", $projection->providedExpression());
50 self::assertNull($projection->defaultExpressionValue());
51 }
52
53 public function testProvidedExpressionIsNothingForAColumnTheStatementLeftOut(): void
54 {
55 self::assertNull(InsertRowProjection::nullValue('note')->providedExpression());
56 }
57
58 public function testNullValueReadsBackAsNullAndNothingElse(): void
59 {
60 $projection = InsertRowProjection::nullValue('note');
61
62 self::assertTrue($projection->isNullValue());
63 self::assertNull($projection->providedExpression());
64 self::assertNull($projection->generatedIdentityValue());
65 }
66
67 public function testIsNullValueIsFalseForEveryOtherKindOfColumn(): void
68 {
69 self::assertFalse(InsertRowProjection::provided('name', "'Ada'")->isNullValue());
70 self::assertFalse(InsertRowProjection::generatedIdentity('id', 1)->isNullValue());
71 }
72
73 public function testTargetColumnNamesTheColumnOfTheTargetTable(): void
74 {
75 self::assertSame('name', InsertRowProjection::provided('name', "'Ada'")->targetColumn());
76 }
77}
78