From 4c0c6348bcbef5e3b942d33b2e0ca318b5cb04f5 Mon Sep 17 00:00:00 2001 From: Vincent Amstoutz Date: Tue, 8 Oct 2024 12:01:58 +0200 Subject: [PATCH 1/3] feat(laravel): adds make:state-provider command Introduce the `MakeStateProviderCommand` to generate API Platform state providers in Laravel. --- src/Laravel/ApiPlatformProvider.php | 5 +- .../Maker/MakeStateProviderCommand.php | 68 ++++++++++ .../Resources/skeleton/StateProvider.tpl.php | 16 +++ .../Maker/Utils/AppServiceProviderTagger.php | 71 +++++++++++ .../Maker/Utils/StateDirectoryManager.php | 18 +++ .../Maker/Utils/StateProviderGenerator.php | 52 ++++++++ .../Maker/Utils/SuccessMessageTrait.php | 18 +++ .../Maker/MakeStateProviderCommandTest.php | 116 ++++++++++++++++++ .../skeleton/AppServiceProvider.tpl.php | 16 +++ .../Maker/Utils/AppServiceFileGenerator.php | 33 +++++ .../Console/Maker/Utils/PathResolver.php | 21 ++++ src/Laravel/phpstan.neon.dist | 5 +- 12 files changed, 436 insertions(+), 3 deletions(-) create mode 100644 src/Laravel/Console/Maker/MakeStateProviderCommand.php create mode 100644 src/Laravel/Console/Maker/Resources/skeleton/StateProvider.tpl.php create mode 100644 src/Laravel/Console/Maker/Utils/AppServiceProviderTagger.php create mode 100644 src/Laravel/Console/Maker/Utils/StateDirectoryManager.php create mode 100644 src/Laravel/Console/Maker/Utils/StateProviderGenerator.php create mode 100644 src/Laravel/Console/Maker/Utils/SuccessMessageTrait.php create mode 100644 src/Laravel/Tests/Console/Maker/MakeStateProviderCommandTest.php create mode 100644 src/Laravel/Tests/Console/Maker/Resources/skeleton/AppServiceProvider.tpl.php create mode 100644 src/Laravel/Tests/Console/Maker/Utils/AppServiceFileGenerator.php create mode 100644 src/Laravel/Tests/Console/Maker/Utils/PathResolver.php diff --git a/src/Laravel/ApiPlatformProvider.php b/src/Laravel/ApiPlatformProvider.php index 6100c806292..64e3b1d4fa9 100644 --- a/src/Laravel/ApiPlatformProvider.php +++ b/src/Laravel/ApiPlatformProvider.php @@ -1040,7 +1040,10 @@ function (Application $app) { }); if ($this->app->runningInConsole()) { - $this->commands([Console\InstallCommand::class]); + $this->commands([ + Console\InstallCommand::class, + Console\Maker\MakeStateProviderCommand::class, + ]); } } diff --git a/src/Laravel/Console/Maker/MakeStateProviderCommand.php b/src/Laravel/Console/Maker/MakeStateProviderCommand.php new file mode 100644 index 00000000000..f3a4ae3f66a --- /dev/null +++ b/src/Laravel/Console/Maker/MakeStateProviderCommand.php @@ -0,0 +1,68 @@ +askForProviderName(); + $directoryPath = $this->stateDirectoryManager->ensureStateDirectoryExists(); + + $filePath = $this->stateProviderGenerator->getFilePath($directoryPath, $providerName); + if ($this->stateProviderGenerator->isFileExists($filePath)) { + $this->error(sprintf('[ERROR] The file "%s" can\'t be generated because it already exists.', $filePath)); + return self::FAILURE; + } + + $this->stateProviderGenerator->generate($filePath, $providerName); + if (!$this->filesystem->exists($filePath)) { + $this->error(sprintf('[ERROR] The file "%s" could not be created.', $filePath)); + return self::FAILURE; + } + + $this->appServiceProviderTagger->addTagToServiceProvider($providerName); + + $this->writeSuccessMessage($filePath); + return self::SUCCESS; + } + + private function askForProviderName(): string + { + do { + $providerName = $this->ask('Choose a class name for your state provider (e.g. AwesomeStateProvider)'); + if (empty($providerName)) { + $this->error('[ERROR] This value cannot be blank.'); + } + } while (empty($providerName)); + + return $providerName; + } +} diff --git a/src/Laravel/Console/Maker/Resources/skeleton/StateProvider.tpl.php b/src/Laravel/Console/Maker/Resources/skeleton/StateProvider.tpl.php new file mode 100644 index 00000000000..db44ba6f4bf --- /dev/null +++ b/src/Laravel/Console/Maker/Resources/skeleton/StateProvider.tpl.php @@ -0,0 +1,16 @@ +ensureServiceProviderExists($serviceProviderPath); + + $serviceProviderContent = $this->filesystem->get($serviceProviderPath); + + $this->addUseStatement($serviceProviderContent, self::ITEM_PROVIDER_USE_STATEMENT); + $this->addUseStatement($serviceProviderContent, $this->getProviderNamespace($providerName)); + $this->addTag($serviceProviderContent, $providerName, $serviceProviderPath); + } + + private function ensureServiceProviderExists(string $path): void + { + if (!$this->filesystem->exists($path)) { + throw new \RuntimeException("The AppServiceProvider is missing!"); + } + } + + private function addUseStatement(string &$content, string $useStatement): void + { + if (!str_contains($content, $useStatement)) { + $content = preg_replace( + '/^(namespace\s[^;]+;\s*)(\n)/m', + "$1\n$useStatement$2", + $content, + 1 + ); + } + } + + private function addTag(string &$content, string $providerName, string $serviceProviderPath): void + { + $tagStatement = sprintf("\n\n\t\t\$this->app->tag(%s::class, ItemProvider::class);", $providerName); + if (!str_contains($content, $tagStatement)) { + $content = preg_replace( + '/(public function register\(\)[^{]*{)(.*?)(\s*}\s*})/s', + "$1$2$tagStatement$3", + $content + ); + + $this->filesystem->put($serviceProviderPath, $content); + } + } + + public function getProviderNamespace(string $providerName): string + { + return sprintf('use App\\State\\%s;', $providerName); + } +} diff --git a/src/Laravel/Console/Maker/Utils/StateDirectoryManager.php b/src/Laravel/Console/Maker/Utils/StateDirectoryManager.php new file mode 100644 index 00000000000..673c3bc2d42 --- /dev/null +++ b/src/Laravel/Console/Maker/Utils/StateDirectoryManager.php @@ -0,0 +1,18 @@ +filesystem->ensureDirectoryExists($directoryPath); + + return $directoryPath; + } +} diff --git a/src/Laravel/Console/Maker/Utils/StateProviderGenerator.php b/src/Laravel/Console/Maker/Utils/StateProviderGenerator.php new file mode 100644 index 00000000000..8c9892c874b --- /dev/null +++ b/src/Laravel/Console/Maker/Utils/StateProviderGenerator.php @@ -0,0 +1,52 @@ +filesystem->exists($filePath); + } + + /** + * @throws FileNotFoundException + */ + public function generate(string $pathLink, string $providerName): void + { + $namespace = 'App\\State'; + $template = $this->loadTemplate(); + + $content = $this->replacePlaceholders($template, [ + '{{ namespace }}' => $namespace, + '{{ class_name }}' => $providerName, + ]); + + $this->filesystem->put($pathLink, $content); + } + + /** + * @throws FileNotFoundException + */ + private function loadTemplate(): string + { + $templatePath = dirname(__DIR__) . '/Resources/skeleton/StateProvider.tpl.php'; + + return $this->filesystem->get($templatePath); + } + + private function replacePlaceholders(string $template, array $variables): string + { + return strtr($template, $variables); + } +} diff --git a/src/Laravel/Console/Maker/Utils/SuccessMessageTrait.php b/src/Laravel/Console/Maker/Utils/SuccessMessageTrait.php new file mode 100644 index 00000000000..f65ab37e107 --- /dev/null +++ b/src/Laravel/Console/Maker/Utils/SuccessMessageTrait.php @@ -0,0 +1,18 @@ +newLine(); + $this->line(' '); + $this->line(' Success! '); + $this->line(' '); + $this->newLine(); + $this->line('created: ' . $filePath . ''); + $this->newLine(); + $this->line('Next: Open your new state provider class and start customizing it.'); + } +} diff --git a/src/Laravel/Tests/Console/Maker/MakeStateProviderCommandTest.php b/src/Laravel/Tests/Console/Maker/MakeStateProviderCommandTest.php new file mode 100644 index 00000000000..c5bfac50bf8 --- /dev/null +++ b/src/Laravel/Tests/Console/Maker/MakeStateProviderCommandTest.php @@ -0,0 +1,116 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace ApiPlatform\Laravel\Tests\Console\Maker; + +use ApiPlatform\Laravel\Tests\Console\Maker\Utils\AppServiceFileGenerator; +use ApiPlatform\Laravel\Tests\Console\Maker\Utils\PathResolver; +use Illuminate\Console\Command; +use Illuminate\Contracts\Filesystem\FileNotFoundException; +use Illuminate\Filesystem\Filesystem; +use Orchestra\Testbench\Concerns\WithWorkbench; +use Orchestra\Testbench\TestCase; +use Illuminate\Foundation\Testing\Concerns\InteractsWithConsole; + + +class MakeStateProviderCommandTest extends TestCase +{ + use InteractsWithConsole; + use WithWorkbench; + + private ?Filesystem $filesystem; + private PathResolver $pathResolver; + private AppServiceFileGenerator $appServiceFileGenerator; + + /** + * @throws FileNotFoundException + */ + protected function setup(): void + { + parent::setUp(); + + $this->filesystem = new Filesystem(); + $this->pathResolver = new PathResolver(); + $this->appServiceFileGenerator = new AppServiceFileGenerator($this->filesystem); + + $this->appServiceFileGenerator->regenerateProviderFile(); + } + + /** + * @throws FileNotFoundException + */ + public function testMakeStateProviderCommand(): void + { + $providerName = 'MyStateProvider'; + $filePath = $this->pathResolver->generateStateProviderFilename($providerName); + $appServiceProviderPath = $this->pathResolver->getServiceProviderFilePath(); + + $this->artisan('make:state-provider') + ->expectsQuestion('Choose a class name for your state provider (e.g. AwesomeStateProvider)', $providerName) + ->expectsOutputToContain('Success!') + ->expectsOutputToContain("created: $filePath") + ->expectsOutputToContain('Next: Open your new state provider class and start customizing it.') + ->assertExitCode(Command::SUCCESS); + + $this->assertFileExists($filePath); + + $appServiceProviderContent = $this->filesystem->get($appServiceProviderPath); + $this->assertStringContainsString('use ApiPlatform\Laravel\Eloquent\State\ItemProvider;', $appServiceProviderContent); + $this->assertStringContainsString("use App\State\\$providerName;", $appServiceProviderContent); + $this->assertStringContainsString('$this->app->tag(MyStateProvider::class, ItemProvider::class);', $appServiceProviderContent); + + $this->filesystem->delete($filePath); + } + + public function testWhenStateProviderClassAlreadyExists(): void + { + $providerName = 'ExistingProvider'; + $existingFile = $this->pathResolver->generateStateProviderFilename($providerName); + $this->filesystem->put($existingFile, 'artisan('make:state-provider') + ->expectsQuestion('Choose a class name for your state provider (e.g. AwesomeStateProvider)', $providerName) + ->expectsOutput($expectedError) + ->assertExitCode(Command::FAILURE); + + $this->filesystem->delete($existingFile); + } + + public function testMakeStateProviderCommandWithoutGivenClassName(): void + { + $providerName = 'NoEmptyClassName'; + $filePath = $this->pathResolver->generateStateProviderFilename($providerName); + + $this->artisan('make:state-provider') + ->expectsQuestion('Choose a class name for your state provider (e.g. AwesomeStateProvider)', '') + ->expectsOutput('[ERROR] This value cannot be blank.') + ->expectsQuestion('Choose a class name for your state provider (e.g. AwesomeStateProvider)', $providerName) + ->assertExitCode(Command::SUCCESS); + + $this->assertFileExists($filePath); + + $this->filesystem->delete($filePath); + } + + /** + * @throws FileNotFoundException + */ + protected function tearDown(): void + { + parent::tearDown(); + + $this->appServiceFileGenerator->regenerateProviderFile(); + } +} diff --git a/src/Laravel/Tests/Console/Maker/Resources/skeleton/AppServiceProvider.tpl.php b/src/Laravel/Tests/Console/Maker/Resources/skeleton/AppServiceProvider.tpl.php new file mode 100644 index 00000000000..f533b884d09 --- /dev/null +++ b/src/Laravel/Tests/Console/Maker/Resources/skeleton/AppServiceProvider.tpl.php @@ -0,0 +1,16 @@ +regenerateFileFromTemplate($templatePath, $targetPath); + } + + /** + * @throws FileNotFoundException + */ + private function regenerateFileFromTemplate(string $templatePath, string $targetPath): void + { + $content = $this->filesystem->get($templatePath); + + $this->filesystem->put($targetPath, $content); + } +} diff --git a/src/Laravel/Tests/Console/Maker/Utils/PathResolver.php b/src/Laravel/Tests/Console/Maker/Utils/PathResolver.php new file mode 100644 index 00000000000..efffe5a88dc --- /dev/null +++ b/src/Laravel/Tests/Console/Maker/Utils/PathResolver.php @@ -0,0 +1,21 @@ +getStateDirectoryPath() . $providerName . '.php'; + } + + public function getStateDirectoryPath(): string + { + return base_path('src/State/'); + } +} diff --git a/src/Laravel/phpstan.neon.dist b/src/Laravel/phpstan.neon.dist index b752955ad8c..9339de564e1 100644 --- a/src/Laravel/phpstan.neon.dist +++ b/src/Laravel/phpstan.neon.dist @@ -13,8 +13,9 @@ parameters: - State - Test - Tests -# ignoreErrors: -# - '#PHPDoc tag @var#' + + ignoreErrors: + - '#Cannot call method expectsQuestion#' # # excludePaths: # - ./*/*/FileToBeExcluded.php From 31f814cc203838a208acc98f3f43903744bddca1 Mon Sep 17 00:00:00 2001 From: Vincent Amstoutz Date: Tue, 8 Oct 2024 12:08:43 +0200 Subject: [PATCH 2/3] docs: add changelog entry --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3df12dfb4f0..1842ea01832 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## v4.0.4 + +### Features + +* [4c0c6348b](https://github.com/api-platform/core/pull/6706/commits/4c0c6348bcbef5e3b942d33b2e0ca318b5cb04f5) feat(laravel): adds make:state-provider command + ## v4.0.3 ### Bug fixes From 5d20b780fadecf18e167c16a9b2adb3ce8dc8bf5 Mon Sep 17 00:00:00 2001 From: Vincent Amstoutz Date: Tue, 8 Oct 2024 12:24:03 +0200 Subject: [PATCH 3/3] fix: lint with php-cs-fixer --- .php-cs-fixer.dist.php | 1 + .../Maker/MakeStateProviderCommand.php | 23 +++++++++++++---- .../Maker/Utils/AppServiceProviderTagger.php | 25 ++++++++++++++----- .../Maker/Utils/StateDirectoryManager.php | 15 ++++++++++- .../Maker/Utils/StateProviderGenerator.php | 19 +++++++++++--- .../Maker/Utils/SuccessMessageTrait.php | 13 +++++++++- .../Maker/MakeStateProviderCommandTest.php | 5 +--- .../skeleton/AppServiceProvider.tpl.php | 11 ++++++++ .../Maker/Utils/AppServiceFileGenerator.php | 18 ++++++++++--- .../Console/Maker/Utils/PathResolver.php | 13 +++++++++- 10 files changed, 119 insertions(+), 24 deletions(-) diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index 747ef12961a..15de4411c44 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -15,6 +15,7 @@ ->in(__DIR__) ->exclude([ 'src/Core/Bridge/Symfony/Maker/Resources/skeleton', + 'src/Laravel/Console/Maker/Resources/skeleton', 'src/Laravel/config', 'tests/Fixtures/app/var', 'docs/guides', diff --git a/src/Laravel/Console/Maker/MakeStateProviderCommand.php b/src/Laravel/Console/Maker/MakeStateProviderCommand.php index f3a4ae3f66a..d21fe0a3a0e 100644 --- a/src/Laravel/Console/Maker/MakeStateProviderCommand.php +++ b/src/Laravel/Console/Maker/MakeStateProviderCommand.php @@ -1,5 +1,16 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + namespace ApiPlatform\Laravel\Console\Maker; use ApiPlatform\Laravel\Console\Maker\Utils\AppServiceProviderTagger; @@ -22,9 +33,8 @@ public function __construct( private readonly Filesystem $filesystem, private readonly StateProviderGenerator $stateProviderGenerator, private readonly AppServiceProviderTagger $appServiceProviderTagger, - private readonly StateDirectoryManager $stateDirectoryManager - ) - { + private readonly StateDirectoryManager $stateDirectoryManager, + ) { parent::__construct(); } @@ -38,19 +48,22 @@ public function handle(): int $filePath = $this->stateProviderGenerator->getFilePath($directoryPath, $providerName); if ($this->stateProviderGenerator->isFileExists($filePath)) { - $this->error(sprintf('[ERROR] The file "%s" can\'t be generated because it already exists.', $filePath)); + $this->error(\sprintf('[ERROR] The file "%s" can\'t be generated because it already exists.', $filePath)); + return self::FAILURE; } $this->stateProviderGenerator->generate($filePath, $providerName); if (!$this->filesystem->exists($filePath)) { - $this->error(sprintf('[ERROR] The file "%s" could not be created.', $filePath)); + $this->error(\sprintf('[ERROR] The file "%s" could not be created.', $filePath)); + return self::FAILURE; } $this->appServiceProviderTagger->addTagToServiceProvider($providerName); $this->writeSuccessMessage($filePath); + return self::SUCCESS; } diff --git a/src/Laravel/Console/Maker/Utils/AppServiceProviderTagger.php b/src/Laravel/Console/Maker/Utils/AppServiceProviderTagger.php index a4b60614188..fca4b94b232 100644 --- a/src/Laravel/Console/Maker/Utils/AppServiceProviderTagger.php +++ b/src/Laravel/Console/Maker/Utils/AppServiceProviderTagger.php @@ -1,5 +1,16 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + namespace ApiPlatform\Laravel\Console\Maker\Utils; use Illuminate\Contracts\Filesystem\FileNotFoundException; @@ -7,13 +18,15 @@ final readonly class AppServiceProviderTagger { - /** @var string */ + /** @var string */ private const SERVICE_PROVIDER_PATH = 'Providers/AppServiceProvider.php'; - /** @var string */ + /** @var string */ private const ITEM_PROVIDER_USE_STATEMENT = 'use ApiPlatform\Laravel\Eloquent\State\ItemProvider;'; - public function __construct(private Filesystem $filesystem) {} + public function __construct(private Filesystem $filesystem) + { + } /** * @throws FileNotFoundException @@ -34,7 +47,7 @@ public function addTagToServiceProvider(string $providerName): void private function ensureServiceProviderExists(string $path): void { if (!$this->filesystem->exists($path)) { - throw new \RuntimeException("The AppServiceProvider is missing!"); + throw new \RuntimeException('The AppServiceProvider is missing!'); } } @@ -52,7 +65,7 @@ private function addUseStatement(string &$content, string $useStatement): void private function addTag(string &$content, string $providerName, string $serviceProviderPath): void { - $tagStatement = sprintf("\n\n\t\t\$this->app->tag(%s::class, ItemProvider::class);", $providerName); + $tagStatement = \sprintf("\n\n\t\t\$this->app->tag(%s::class, ItemProvider::class);", $providerName); if (!str_contains($content, $tagStatement)) { $content = preg_replace( '/(public function register\(\)[^{]*{)(.*?)(\s*}\s*})/s', @@ -66,6 +79,6 @@ private function addTag(string &$content, string $providerName, string $serviceP public function getProviderNamespace(string $providerName): string { - return sprintf('use App\\State\\%s;', $providerName); + return \sprintf('use App\\State\\%s;', $providerName); } } diff --git a/src/Laravel/Console/Maker/Utils/StateDirectoryManager.php b/src/Laravel/Console/Maker/Utils/StateDirectoryManager.php index 673c3bc2d42..7d1464cff50 100644 --- a/src/Laravel/Console/Maker/Utils/StateDirectoryManager.php +++ b/src/Laravel/Console/Maker/Utils/StateDirectoryManager.php @@ -1,12 +1,25 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + namespace ApiPlatform\Laravel\Console\Maker\Utils; use Illuminate\Filesystem\Filesystem; final readonly class StateDirectoryManager { - public function __construct(private Filesystem $filesystem) {} + public function __construct(private Filesystem $filesystem) + { + } public function ensureStateDirectoryExists(): string { diff --git a/src/Laravel/Console/Maker/Utils/StateProviderGenerator.php b/src/Laravel/Console/Maker/Utils/StateProviderGenerator.php index 8c9892c874b..54c6f23c6f5 100644 --- a/src/Laravel/Console/Maker/Utils/StateProviderGenerator.php +++ b/src/Laravel/Console/Maker/Utils/StateProviderGenerator.php @@ -1,5 +1,16 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + namespace ApiPlatform\Laravel\Console\Maker\Utils; use Illuminate\Contracts\Filesystem\FileNotFoundException; @@ -7,11 +18,13 @@ final readonly class StateProviderGenerator { - public function __construct(private Filesystem $filesystem) {} + public function __construct(private Filesystem $filesystem) + { + } public function getFilePath(string $directoryPath, string $providerName): string { - return $directoryPath . $providerName . '.php'; + return $directoryPath.$providerName.'.php'; } public function isFileExists(string $filePath): bool @@ -40,7 +53,7 @@ public function generate(string $pathLink, string $providerName): void */ private function loadTemplate(): string { - $templatePath = dirname(__DIR__) . '/Resources/skeleton/StateProvider.tpl.php'; + $templatePath = \dirname(__DIR__).'/Resources/skeleton/StateProvider.tpl.php'; return $this->filesystem->get($templatePath); } diff --git a/src/Laravel/Console/Maker/Utils/SuccessMessageTrait.php b/src/Laravel/Console/Maker/Utils/SuccessMessageTrait.php index f65ab37e107..8da034861e2 100644 --- a/src/Laravel/Console/Maker/Utils/SuccessMessageTrait.php +++ b/src/Laravel/Console/Maker/Utils/SuccessMessageTrait.php @@ -1,5 +1,16 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + namespace ApiPlatform\Laravel\Console\Maker\Utils; trait SuccessMessageTrait @@ -11,7 +22,7 @@ private function writeSuccessMessage(string $filePath): void $this->line(' Success! '); $this->line(' '); $this->newLine(); - $this->line('created: ' . $filePath . ''); + $this->line('created: '.$filePath.''); $this->newLine(); $this->line('Next: Open your new state provider class and start customizing it.'); } diff --git a/src/Laravel/Tests/Console/Maker/MakeStateProviderCommandTest.php b/src/Laravel/Tests/Console/Maker/MakeStateProviderCommandTest.php index c5bfac50bf8..f13028df608 100644 --- a/src/Laravel/Tests/Console/Maker/MakeStateProviderCommandTest.php +++ b/src/Laravel/Tests/Console/Maker/MakeStateProviderCommandTest.php @@ -20,12 +20,9 @@ use Illuminate\Filesystem\Filesystem; use Orchestra\Testbench\Concerns\WithWorkbench; use Orchestra\Testbench\TestCase; -use Illuminate\Foundation\Testing\Concerns\InteractsWithConsole; - class MakeStateProviderCommandTest extends TestCase { - use InteractsWithConsole; use WithWorkbench; private ?Filesystem $filesystem; @@ -78,7 +75,7 @@ public function testWhenStateProviderClassAlreadyExists(): void $existingFile = $this->pathResolver->generateStateProviderFilename($providerName); $this->filesystem->put($existingFile, 'artisan('make:state-provider') ->expectsQuestion('Choose a class name for your state provider (e.g. AwesomeStateProvider)', $providerName) diff --git a/src/Laravel/Tests/Console/Maker/Resources/skeleton/AppServiceProvider.tpl.php b/src/Laravel/Tests/Console/Maker/Resources/skeleton/AppServiceProvider.tpl.php index f533b884d09..ff02bb3a99d 100644 --- a/src/Laravel/Tests/Console/Maker/Resources/skeleton/AppServiceProvider.tpl.php +++ b/src/Laravel/Tests/Console/Maker/Resources/skeleton/AppServiceProvider.tpl.php @@ -1,5 +1,16 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + namespace App\Providers; use Illuminate\Support\ServiceProvider; diff --git a/src/Laravel/Tests/Console/Maker/Utils/AppServiceFileGenerator.php b/src/Laravel/Tests/Console/Maker/Utils/AppServiceFileGenerator.php index 5af5a43860b..6edd7363b03 100644 --- a/src/Laravel/Tests/Console/Maker/Utils/AppServiceFileGenerator.php +++ b/src/Laravel/Tests/Console/Maker/Utils/AppServiceFileGenerator.php @@ -1,5 +1,16 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + namespace ApiPlatform\Laravel\Tests\Console\Maker\Utils; use Illuminate\Contracts\Filesystem\FileNotFoundException; @@ -7,15 +18,16 @@ final readonly class AppServiceFileGenerator { - - public function __construct(private Filesystem $filesystem) {} + public function __construct(private Filesystem $filesystem) + { + } /** * @throws FileNotFoundException */ public function regenerateProviderFile(): void { - $templatePath = dirname(__DIR__) . '/Resources/skeleton/AppServiceProvider.tpl.php'; + $templatePath = \dirname(__DIR__).'/Resources/skeleton/AppServiceProvider.tpl.php'; $targetPath = base_path('app/Providers/AppServiceProvider.php'); $this->regenerateFileFromTemplate($templatePath, $targetPath); diff --git a/src/Laravel/Tests/Console/Maker/Utils/PathResolver.php b/src/Laravel/Tests/Console/Maker/Utils/PathResolver.php index efffe5a88dc..10f64ca667a 100644 --- a/src/Laravel/Tests/Console/Maker/Utils/PathResolver.php +++ b/src/Laravel/Tests/Console/Maker/Utils/PathResolver.php @@ -1,5 +1,16 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + namespace ApiPlatform\Laravel\Tests\Console\Maker\Utils; final readonly class PathResolver @@ -11,7 +22,7 @@ public function getServiceProviderFilePath(): string public function generateStateProviderFilename(string $providerName): string { - return $this->getStateDirectoryPath() . $providerName . '.php'; + return $this->getStateDirectoryPath().$providerName.'.php'; } public function getStateDirectoryPath(): string