diff --git a/composer.json b/composer.json index ec1bd33..be15d9c 100644 --- a/composer.json +++ b/composer.json @@ -20,7 +20,10 @@ }, "autoload-dev": { "psr-4": { - "Orchestra\\Canvas\\Core\\Tests\\": "tests/" + "Orchestra\\Canvas\\Core\\Tests\\": "tests/", + "Workbench\\App\\": "workbench/app/", + "Workbench\\Database\\Factories\\": "workbench/database/factories/", + "Workbench\\Database\\Seeders\\": "workbench/database/seeders/" } }, "require": { @@ -57,8 +60,13 @@ } }, "scripts": { - "post-autoload-dump": "@prepare", + "post-autoload-dump": [ + "@clear", + "@prepare" + ], "prepare": "@php vendor/bin/testbench package:discover --ansi", + "clear": "@php vendor/bin/testbench package:purge-skeleton --ansi", + "build": "@php vendor/bin/testbench workbench:build --ansi", "lint": [ "@php vendor/bin/phpstan analyse", "@php vendor/bin/pint" diff --git a/src/CodeGenerator.php b/src/CodeGenerator.php index c7693e3..8c87691 100644 --- a/src/CodeGenerator.php +++ b/src/CodeGenerator.php @@ -64,7 +64,7 @@ public function getDefaultNamespace(string $rootNamespace): string /** * Generator options. * - * @return array{name: string} + * @return array */ public function generatorOptions(): array { diff --git a/testbench.yaml b/testbench.yaml new file mode 100644 index 0000000..ab4b7fc --- /dev/null +++ b/testbench.yaml @@ -0,0 +1,2 @@ +providers: + - Orchestra\Canvas\Core\LaravelServiceProvider diff --git a/tests/Unit/Presets/LaravelTest.php b/tests/Unit/Presets/LaravelTest.php index bf9e4a2..50f55c3 100644 --- a/tests/Unit/Presets/LaravelTest.php +++ b/tests/Unit/Presets/LaravelTest.php @@ -3,11 +3,22 @@ namespace Orchestra\Canvas\Core\Tests\Unit\Presets; use Illuminate\Filesystem\Filesystem; +use Mockery as m; +use Orchestra\Canvas\Commands; use Orchestra\Canvas\Core\Presets\Laravel; use PHPUnit\Framework\TestCase; +use Symfony\Component\Console\Application; class LaravelTest extends TestCase { + /** + * Teardown the test environment. + */ + protected function tearDown(): void + { + m::close(); + } + /** @test */ public function it_has_proper_signatures() { @@ -23,6 +34,7 @@ public function it_has_proper_signatures() $this->assertSame($preset->basePath(), $preset->laravelPath()); $this->assertSame('App', $preset->rootNamespace()); + $this->assertSame('Tests', $preset->testingNamespace()); $this->assertSame('App\Models', $preset->modelNamespace()); $this->assertSame('App\Providers', $preset->providerNamespace()); $this->assertSame('Database\Factories', $preset->factoryNamespace()); @@ -62,4 +74,23 @@ public function it_can_configure_provider_namespace() $this->assertSame('App\Models', $preset->modelNamespace()); $this->assertSame('App', $preset->providerNamespace()); } + + /** @test */ + public function it_can_add_additional_commands() + { + Laravel::commands([ + Commands\Code::class, + ]); + + $app = m::mock(Application::class); + $app->shouldReceive('add') + ->once() + ->with(m::type(Commands\Code::class)) + ->andReturnUsing(fn ($generator) => $this->assertInstanceOf(Commands\Code::class, $generator)); + + $directory = __DIR__; + $preset = new Laravel(['namespace' => 'App', 'provider' => ['namespace' => 'App']], $directory, new Filesystem()); + + $preset->addAdditionalCommands($app); + } } diff --git a/tests/Unit/Presets/PackageTest.php b/tests/Unit/Presets/PackageTest.php index ff83bed..57b2b08 100644 --- a/tests/Unit/Presets/PackageTest.php +++ b/tests/Unit/Presets/PackageTest.php @@ -3,8 +3,11 @@ namespace Orchestra\Canvas\Core\Tests\Unit\Presets; use Illuminate\Filesystem\Filesystem; +use Mockery as m; +use Orchestra\Canvas\Commands; use Orchestra\Canvas\Core\Presets\Package; use PHPUnit\Framework\TestCase; +use Symfony\Component\Console\Application; class PackageTest extends TestCase { @@ -23,6 +26,7 @@ public function it_has_proper_signatures() $this->assertSame("{$directory}/vendor/orchestra/testbench-core/laravel", $preset->laravelPath()); $this->assertSame('FooBar', $preset->rootNamespace()); + $this->assertSame('FooBar\Tests', $preset->testingNamespace()); $this->assertSame('FooBar', $preset->modelNamespace()); $this->assertSame('FooBar', $preset->providerNamespace()); $this->assertSame('Database\Factories', $preset->factoryNamespace()); @@ -73,4 +77,23 @@ public function it_requires_root_namespace_to_be_configured() $preset->rootNamespace(); } + + /** @test */ + public function it_can_add_additional_commands() + { + Package::commands([ + Commands\Code::class, + ]); + + $app = m::mock(Application::class); + $app->shouldReceive('add') + ->once() + ->with(m::type(Commands\Code::class)) + ->andReturnUsing(fn ($generator) => $this->assertInstanceOf(Commands\Code::class, $generator)); + + $directory = __DIR__; + $preset = new Package(['namespace' => 'App', 'provider' => ['namespace' => 'App']], $directory, new Filesystem()); + + $preset->addAdditionalCommands($app); + } } diff --git a/workbench/app/.gitkeep b/workbench/app/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/workbench/database/factories/.gitkeep b/workbench/database/factories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/workbench/database/migrations/.gitkeep b/workbench/database/migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/workbench/database/seeders/.gitkeep b/workbench/database/seeders/.gitkeep new file mode 100644 index 0000000..e69de29