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