packages/ztd-query-postgres/tests/Unit/Sql/Merge/PgSqlMergeStatementTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Merge;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Platform\Postgres\Sql\Merge\PgSqlMergeActionKind;
11use ZtdQuery\Platform\Postgres\Sql\Merge\PgSqlMergeClause;
12use ZtdQuery\Platform\Postgres\Sql\Merge\PgSqlMergeMatchKind;
13use ZtdQuery\Platform\Postgres\Sql\Merge\PgSqlMergeStatement;
14
15#[CoversClass(PgSqlMergeStatement::class)]
16#[UsesClass(PgSqlMergeActionKind::class)]
17#[UsesClass(PgSqlMergeClause::class)]
18#[UsesClass(PgSqlMergeMatchKind::class)]
19final class PgSqlMergeStatementTest extends TestCase
20{
21    public function testCarriesTypedStatementData(): void
22    {
23        $clause = new PgSqlMergeClause(
24            PgSqlMergeMatchKind::NotMatched,
25            null,
26            PgSqlMergeActionKind::Insert,
27            [],
28            ['id'],
29            ['source.id'],
30        );
31        $statement = new PgSqlMergeStatement(
32            'users',
33            'public.users',
34            'target',
35            'source AS source',
36            'target.id = source.id',
37            [$clause],
38        );
39
40        self::assertSame('users', $statement->targetTable);
41        self::assertSame('public.users', $statement->targetSql);
42        self::assertSame('target', $statement->targetAlias);
43        self::assertSame('source AS source', $statement->sourceSql);
44        self::assertSame('target.id = source.id', $statement->joinConditionSql);
45        self::assertSame([$clause], $statement->clauses);
46    }
47}
48