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