packages/ztd-query-core/tests/Unit/Schema/SchemaRegistryTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Schema;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Schema\SchemaRegistry;
11use ZtdQuery\Schema\TableDefinition;
12use ZtdQuery\Schema\TableDefinitionRegistry;
13
14#[UsesClass(TableDefinition::class)]
15#[UsesClass(TableDefinitionRegistry::class)]
16#[CoversClass(SchemaRegistry::class)]
17final class SchemaRegistryTest extends TestCase
18{
19 public function testGetAllClearRegisterAndClear(): void
20 {
21 $registry = new TableDefinitionRegistry();
22 $definition = new TableDefinition(['id'], ['id' => 'INT'], [], [], []);
23 $registry->register('users', $definition);
24
25 self::assertSame($definition, $registry->get('users'));
26 self::assertSame(['users' => $definition], $registry->getAll());
27 self::assertTrue($registry->has('users'));
28 self::assertTrue($registry->hasAnyTables());
29
30 $registry->clear();
31
32 self::assertNull($registry->get('users'));
33 self::assertSame([], $registry->getAll());
34 self::assertFalse($registry->hasAnyTables());
35 }
36
37 public function testRegisterGetUnregister(): void
38 {
39 $registry = new TableDefinitionRegistry();
40 $usersDef = new TableDefinition(['id'], ['id' => 'INT'], [], [], []);
41 $postsDef = new TableDefinition(['id'], ['id' => 'INT'], [], [], []);
42 $registry->register('users', $usersDef);
43 $registry->register('posts', $postsDef);
44
45 $registry->unregister('users');
46
47 self::assertNull($registry->get('users'));
48 self::assertSame($postsDef, $registry->get('posts'));
49 }
50
51 public function testHasAnswersForATableTheRegistryKnows(): void
52 {
53 $registry = new SchemaRegistry();
54 $registry->register('order', 'CREATE TABLE `order` (id INT)');
55
56 self::assertTrue($registry->has('order'));
57 self::assertFalse($registry->has('other'));
58 }
59
60 public function testHasAnyTablesIsFalseUntilOneIsRegistered(): void
61 {
62 $registry = new SchemaRegistry();
63
64 self::assertFalse($registry->hasAnyTables());
65
66 $registry->register('order', 'CREATE TABLE `order` (id INT)');
67
68 self::assertTrue($registry->hasAnyTables());
69 }
70
71 public function testUnregisterLeavesTheRegistryWithoutThatTable(): void
72 {
73 $registry = new SchemaRegistry();
74 $registry->register('order', 'CREATE TABLE `order` (id INT)');
75
76 $registry->unregister('order');
77
78 self::assertNull($registry->get('order'));
79 }
80
81 public function testClearLeavesTheRegistryWithNoTablesAtAll(): void
82 {
83 $registry = new SchemaRegistry();
84 $registry->register('order', 'CREATE TABLE `order` (id INT)');
85
86 $registry->clear();
87
88 self::assertFalse($registry->hasAnyTables());
89 self::assertSame([], $registry->getAll());
90 }
91}
92