diff --git a/packages/database/src/Config/DatabaseDialect.php b/packages/database/src/Config/DatabaseDialect.php index 35faa382d..157755b13 100644 --- a/packages/database/src/Config/DatabaseDialect.php +++ b/packages/database/src/Config/DatabaseDialect.php @@ -33,7 +33,7 @@ public function encloseExpressionDefault(string $expression): string { return match ($this) { self::MYSQL => sprintf('(%s)', $expression), - default => sprintf('%s', $expression), + default => $expression, }; } diff --git a/packages/database/src/IsDatabaseModel.php b/packages/database/src/IsDatabaseModel.php index 311007f2c..d2b441884 100644 --- a/packages/database/src/IsDatabaseModel.php +++ b/packages/database/src/IsDatabaseModel.php @@ -279,7 +279,7 @@ public function query(string $relation): QueryBuilder $resolved = $model->getRelation(name: $relation); - if ($resolved === null) { + if (! $resolved instanceof Relation) { throw new PropertyWasNotARelation(property: $relation, model: $model->getName()); } diff --git a/packages/database/tests/QueryStatements/CharStatementTest.php b/packages/database/tests/QueryStatements/CharStatementTest.php index f92dba422..0e9e8d663 100644 --- a/packages/database/tests/QueryStatements/CharStatementTest.php +++ b/packages/database/tests/QueryStatements/CharStatementTest.php @@ -20,7 +20,7 @@ public function test_char(): void default: '019d38a9-5504-7a16-ab9d-520bbc289ecc', ); - $expectedMysql = '`foo` CHAR(36) DEFAULT \'019d38a9-5504-7a16-ab9d-520bbc289ecc\' NOT NULL'; + $expectedMysql = "`foo` CHAR(36) DEFAULT '019d38a9-5504-7a16-ab9d-520bbc289ecc' NOT NULL"; $expectedPgsql = '"foo" CHAR(36) DEFAULT \'019d38a9-5504-7a16-ab9d-520bbc289ecc\' NOT NULL'; $this->assertSame($expectedMysql, $statement->compile(DatabaseDialect::MYSQL)); @@ -41,7 +41,7 @@ public function test_determine_char_size(): void name: 'foo', default: 'foo_bar', ); - $expectedMysql = '`foo` CHAR(7) DEFAULT \'foo_bar\' NOT NULL'; + $expectedMysql = "`foo` CHAR(7) DEFAULT 'foo_bar' NOT NULL"; $this->assertSame($expectedMysql, $defaultSizeStatement->compile(DatabaseDialect::MYSQL)); $fixedAndDefaultSizeStatement = new CharStatement( @@ -49,7 +49,7 @@ public function test_determine_char_size(): void size: 7, default: 'foo_bar', ); - $expectedMysql = '`foo` CHAR(7) DEFAULT \'foo_bar\' NOT NULL'; + $expectedMysql = "`foo` CHAR(7) DEFAULT 'foo_bar' NOT NULL"; $this->assertSame($expectedMysql, $fixedAndDefaultSizeStatement->compile(DatabaseDialect::MYSQL)); } @@ -73,7 +73,7 @@ public function test_char_size_greater_than_default_value_length(): void size: 10, default: 'foo_bar', ); - $expectedMysql = '`foo` CHAR(10) DEFAULT \'foo_bar\' NOT NULL'; + $expectedMysql = "`foo` CHAR(10) DEFAULT 'foo_bar' NOT NULL"; $this->assertSame($expectedMysql, $statement->compile(DatabaseDialect::MYSQL)); } } diff --git a/packages/database/tests/QueryStatements/DateStatementTest.php b/packages/database/tests/QueryStatements/DateStatementTest.php index c58d84cb8..d265bab1c 100644 --- a/packages/database/tests/QueryStatements/DateStatementTest.php +++ b/packages/database/tests/QueryStatements/DateStatementTest.php @@ -2,6 +2,7 @@ namespace Tempest\Database\Tests\QueryStatements; +use InvalidArgumentException; use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Tempest\Database\Config\DatabaseDialect; @@ -17,7 +18,7 @@ public function test_date(): void default: '2026-01-01', ); - $expectedMysql = '`foo` DATE DEFAULT \'2026-01-01\' NOT NULL'; + $expectedMysql = "`foo` DATE DEFAULT '2026-01-01' NOT NULL"; $expectedPgsql = '"foo" DATE DEFAULT \'2026-01-01\' NOT NULL'; $this->assertSame($expectedMysql, $statement->compile(DatabaseDialect::MYSQL)); @@ -43,7 +44,7 @@ public function test_date_with_current(): void #[Test] public function test_date_with_default_and_current(): void { - $this->expectException(\InvalidArgumentException::class); + $this->expectException(InvalidArgumentException::class); $statement = new DateStatement( name: 'foo', diff --git a/packages/discovery/src/Composer.php b/packages/discovery/src/Composer.php index 5230c1b77..8b7598ddb 100644 --- a/packages/discovery/src/Composer.php +++ b/packages/discovery/src/Composer.php @@ -6,6 +6,7 @@ use Tempest\Process\ProcessExecutor; use Tempest\Support\Arr; +use Tempest\Support\Arr\ImmutableArray; use Tempest\Support\Filesystem; use Tempest\Support\Namespace\Psr4Namespace; use Tempest\Support\Path; @@ -50,7 +51,7 @@ public function load(): self $this->mainNamespace = $this->namespaces[0]; } - $this->namespaces = new Arr\ImmutableArray([$this->mainNamespace, ...$this->namespaces]) + $this->namespaces = new ImmutableArray([$this->mainNamespace, ...$this->namespaces]) ->filter() ->unique(fn (Psr4Namespace $ns) => "{$ns->namespace}:{$ns->path}") ->toArray(); @@ -120,8 +121,8 @@ private function loadComposerFile(string $path): array /** @return array */ private function resolvePsr4Namespaces(string $path): array { - return new Arr\ImmutableArray($this->composer) - ->get($path, default: new Arr\ImmutableArray()) + return new ImmutableArray($this->composer) + ->get($path, default: new ImmutableArray()) ->flatMap(fn (string|iterable $paths, string $namespace) => Arr\map(Arr\wrap($paths), fn (string $path) => new Psr4Namespace($namespace, $path))) ->sortByCallback(fn (Psr4Namespace $ns1, Psr4Namespace $ns2) => strlen($ns1->path) <=> strlen($ns2->path)) ->values() diff --git a/packages/mapper/src/Casters/BooleanCaster.php b/packages/mapper/src/Casters/BooleanCaster.php index 14facfc11..810b792a7 100644 --- a/packages/mapper/src/Casters/BooleanCaster.php +++ b/packages/mapper/src/Casters/BooleanCaster.php @@ -39,7 +39,7 @@ public function cast(mixed $input): ?bool $input = mb_strtolower(trim($input)); } - if ($this->nullable && ($input === null || $input === '' || $input === 'null')) { + if ($this->nullable && in_array($input, [null, '', 'null'], true)) { return null; } diff --git a/packages/mapper/src/Casters/FloatCaster.php b/packages/mapper/src/Casters/FloatCaster.php index 97063002d..20960b2ca 100644 --- a/packages/mapper/src/Casters/FloatCaster.php +++ b/packages/mapper/src/Casters/FloatCaster.php @@ -39,7 +39,7 @@ public function cast(mixed $input): ?float $input = mb_strtolower(trim($input)); } - if ($this->nullable && ($input === null || $input === '' || $input === 'null')) { + if ($this->nullable && in_array($input, [null, '', 'null'], true)) { return null; } diff --git a/packages/mapper/src/Casters/IntegerCaster.php b/packages/mapper/src/Casters/IntegerCaster.php index bd8f41af3..893bdd493 100644 --- a/packages/mapper/src/Casters/IntegerCaster.php +++ b/packages/mapper/src/Casters/IntegerCaster.php @@ -39,7 +39,7 @@ public function cast(mixed $input): ?int $input = mb_strtolower(trim($input)); } - if ($this->nullable && ($input === null || $input === '' || $input === 'null')) { + if ($this->nullable && in_array($input, [null, '', 'null'], true)) { return null; } diff --git a/packages/upgrade/src/Tempest310/UpdatePriorityImportsRector.php b/packages/upgrade/src/Tempest310/UpdatePriorityImportsRector.php index 4919860c6..5cf7876da 100644 --- a/packages/upgrade/src/Tempest310/UpdatePriorityImportsRector.php +++ b/packages/upgrade/src/Tempest310/UpdatePriorityImportsRector.php @@ -11,6 +11,7 @@ final class UpdatePriorityImportsRector extends AbstractRector { private const string OLD_CLASS = 'Tempest\Core\Priority'; + private const string NEW_CLASS = 'Tempest\Support\Priority'; public function getNodeTypes(): array diff --git a/tests/Integration/Core/FrameworkKernelExceptionHandlerTest.php b/tests/Integration/Core/FrameworkKernelExceptionHandlerTest.php index 25de2f31b..cbb6f6166 100644 --- a/tests/Integration/Core/FrameworkKernelExceptionHandlerTest.php +++ b/tests/Integration/Core/FrameworkKernelExceptionHandlerTest.php @@ -53,6 +53,7 @@ public function warnings_notices_and_deprecations_are_processed_without_throwing $this->container->singleton(ExceptionHandler::class, new TestingExceptionHandler()); $this->container->singleton(ExceptionProcessor::class, $processor = new TestingExceptionProcessor()); + $this->kernel->registerExceptionHandler(); try { @@ -60,7 +61,7 @@ public function warnings_notices_and_deprecations_are_processed_without_throwing trigger_error('report deprecation', E_USER_DEPRECATED); trigger_error('report notice', E_USER_NOTICE); } catch (Throwable $throwable) { - $this->fail(sprintf('Expected no exception to be thrown, but got %s: %s', get_class($throwable), $throwable->getMessage())); + $this->fail(sprintf('Expected no exception to be thrown, but got %s: %s', $throwable::class, $throwable->getMessage())); } $this->assertCount(3, $processor->processed); @@ -91,6 +92,7 @@ public function suppressions_are_not_processed_or_thrown(): void $this->container->singleton(ExceptionHandler::class, new TestingExceptionHandler()); $this->container->singleton(ExceptionProcessor::class, $processor = new TestingExceptionProcessor()); + $this->kernel->registerExceptionHandler(); @trigger_error('suppressed warning', E_USER_WARNING); @@ -109,6 +111,7 @@ public function uncaught_exceptions_are_forwarded_to_the_registered_exception_ha $this->container->singleton(ExceptionHandler::class, $handler); $this->container->singleton(ExceptionProcessor::class, new TestingExceptionProcessor()); + $this->kernel->registerExceptionHandler(); $kernelExceptionHandler = set_exception_handler(static function (Throwable $throwable): void {});