packages/ztd-query-mysql/tests/Unit/Schema/View/MySqlViewDefinitionParserTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Schema\View;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Platform\MySql\Schema\View\MySqlViewDefinitionParser;
11use ZtdQuery\Platform\MySql\Sql\MySqlLexerProfile;
12use ZtdQuery\Platform\MySql\Sql\Relation\MySqlSelectRelationParser;
13
14#[UsesClass(\ZtdQuery\Platform\MySql\Sql\Relation\ReferenceReader::class)]
15#[CoversClass(MySqlViewDefinitionParser::class)]
16#[UsesClass(MySqlLexerProfile::class)]
17#[UsesClass(MySqlSelectRelationParser::class)]
18final class MySqlViewDefinitionParserTest extends TestCase
19{
20    public function testFromQueryParsesAQueryUsingMySqlRelationRules(): void
21    {
22        $definition = (new MySqlViewDefinitionParser())->fromQuery(
23            " SELECT u.id FROM app.`users` u JOIN roles r ON r.id = u.role_id; \n",
24        );
25
26        self::assertSame('SELECT u.id FROM app.`users` u JOIN roles r ON r.id = u.role_id', $definition->query);
27        self::assertSame(['users', 'roles'], $definition->dependencies);
28    }
29
30    public function testFromCreateStatementExtractsTheQueryFromAMySqlCreateViewStatement(): void
31    {
32        $definition = (new MySqlViewDefinitionParser())->fromCreateStatement(
33            'CREATE ALGORITHM=MERGE VIEW `active_users` AS SELECT * FROM `users` WHERE active = 1;',
34        );
35
36        self::assertNotNull($definition);
37        self::assertSame('SELECT * FROM `users` WHERE active = 1', $definition->query);
38        self::assertNull((new MySqlViewDefinitionParser())->fromCreateStatement('CREATE VIEW invalid AS   '));
39    }
40}
41