packages/sql-catalog/tests/Unit/Core/Php/ClassShapeTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Core\Php;
6
7use PhpParser\Node\Scalar\String_;
8use PHPUnit\Framework\Attributes\CoversClass;
9use PHPUnit\Framework\TestCase;
10use SqlCatalog\Core\Php\ClassShape;
11
12#[CoversClass(ClassShape::class)]
13final class ClassShapeTest extends TestCase
14{
15 public function testAncestorsListTheParentTheTraitsAndTheInterfaces(): void
16 {
17 $shape = new ClassShape('App\\User', 'App\\Base', ['App\\Jsonable'], ['App\\Timestamps'], false, [], [], [], []);
18 self::assertSame(['App\\Base', 'App\\Timestamps', 'App\\Jsonable'], $shape->ancestors());
19 }
20
21 public function testAncestorsOfAClassWithoutAParent(): void
22 {
23 $shape = new ClassShape('App\\User', null, [], [], false, [], [], [], []);
24 self::assertSame([], $shape->ancestors());
25 }
26
27 public function testSettledDefaultAnswersForAPropertyNothingOverwrites(): void
28 {
29 $default = new String_('users');
30 $shape = new ClassShape('App\\User', null, [], [], false, [], [], [], [], ['table' => $default], []);
31 self::assertSame($default, $shape->settledDefault('table'));
32 }
33
34 public function testSettledDefaultIsNullForAPropertyTheClassAssignsTo(): void
35 {
36 $shape = new ClassShape(
37 'App\\User',
38 null,
39 [],
40 [],
41 false,
42 [],
43 [],
44 [],
45 [],
46 ['table' => new String_('users')],
47 ['table' => true],
48 );
49 self::assertNull($shape->settledDefault('table'));
50 }
51
52 public function testSettledDefaultIsNullForAPropertyWithoutOne(): void
53 {
54 $shape = new ClassShape('App\\User', null, [], [], false, [], [], [], []);
55 self::assertNull($shape->settledDefault('table'));
56 }
57}
58