Skip to content

Commit 5fdf845

Browse files
authored
feature: Improves Workbench integration (#9)
* wip Signed-off-by: Mior Muhammad Zaki <[email protected]> * wip Signed-off-by: Mior Muhammad Zaki <[email protected]> * wip Signed-off-by: Mior Muhammad Zaki <[email protected]> --------- Signed-off-by: Mior Muhammad Zaki <[email protected]>
1 parent d5cdbe9 commit 5fdf845

File tree

4 files changed

+18
-76
lines changed

4 files changed

+18
-76
lines changed

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"php": "^8.1",
99
"composer-runtime-api": "^2.2",
1010
"fakerphp/faker": "^1.24",
11-
"orchestra/workbench": "^8.15|^9.11",
11+
"orchestra/workbench": "^8.16|^9.12",
1212
"symfony/polyfill-php83": "^1.31"
1313
},
1414
"require-dev": {

src/Listeners/InstalledWorkbench.php

+4-70
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Orchestra\Testbench\Foundation\Console\Actions\EnsureDirectoryExists;
88
use Orchestra\Testbench\Foundation\Console\Actions\GeneratesFile;
99
use Orchestra\Workbench\Events\InstallEnded;
10+
use Orchestra\Workbench\StubRegistrar;
1011
use Orchestra\Workbench\Workbench;
1112

1213
use function Illuminate\Filesystem\join_paths;
@@ -53,7 +54,7 @@ public function handle(InstallEnded $event)
5354
$baseResource = Workbench::path(['app', 'Nova', 'Resource.php'])
5455
);
5556

56-
$this->replaceInFile($baseResource);
57+
StubRegistrar::replaceInFile($this->files, $baseResource);
5758

5859
(new GeneratesFile(
5960
filesystem: $this->files,
@@ -64,7 +65,7 @@ public function handle(InstallEnded $event)
6465
$userResource = Workbench::path(['app', 'Nova', 'User.php'])
6566
);
6667

67-
$this->replaceInFile($userResource);
68+
StubRegistrar::replaceInFile($this->files, $userResource);
6869

6970
(new GeneratesFile(
7071
filesystem: $this->files,
@@ -75,7 +76,7 @@ public function handle(InstallEnded $event)
7576
$serviceProvider = Workbench::path(['app', 'Providers', 'NovaServiceProvider.php'])
7677
);
7778

78-
$this->replaceInFile($serviceProvider);
79+
StubRegistrar::replaceInFile($this->files, $serviceProvider);
7980

8081
Collection::make([
8182
Workbench::path(['app', '.gitkeep']),
@@ -87,71 +88,4 @@ public function handle(InstallEnded $event)
8788
$this->files->delete($file);
8889
});
8990
}
90-
91-
/**
92-
* Replace strings in given file.
93-
*/
94-
protected function replaceInFile(string $filename): void
95-
{
96-
$workbenchAppNamespacePrefix = rtrim(Workbench::detectNamespace('app') ?? 'Workbench\App\\', '\\');
97-
$workbenchFactoriesNamespacePrefix = rtrim(Workbench::detectNamespace('database/factories') ?? 'Workbench\Database\Factories\\', '\\');
98-
$workbenchSeederNamespacePrefix = rtrim(Workbench::detectNamespace('database/seeders') ?? 'Workbench\Database\Seeders\\', '\\');
99-
100-
$serviceProvider = sprintf('%s\Providers\WorkbenchServiceProvider', $workbenchAppNamespacePrefix);
101-
$databaseSeeder = sprintf('%s\DatabaseSeeder', $workbenchSeederNamespacePrefix);
102-
$userModel = sprintf('%s\Models\User', $workbenchAppNamespacePrefix);
103-
$userFactory = sprintf('%s\UserFactory', $workbenchFactoriesNamespacePrefix);
104-
105-
$this->files->replaceInFile(
106-
[
107-
'{{WorkbenchAppNamespace}}',
108-
'{{ WorkbenchAppNamespace }}',
109-
'{{WorkbenchFactoryNamespace}}',
110-
'{{ WorkbenchFactoryNamespace }}',
111-
'{{WorkbenchSeederNamespace}}',
112-
'{{ WorkbenchSeederNamespace }}',
113-
114-
'{{WorkbenchServiceProvider}}',
115-
'{{ WorkbenchServiceProvider }}',
116-
'Workbench\App\Providers\WorkbenchServiceProvider',
117-
118-
'{{WorkbenchDatabaseSeeder}}',
119-
'{{ WorkbenchDatabaseSeeder }}',
120-
'Workbench\Database\Seeders\DatabaseSeeder',
121-
122-
'{{WorkbenchUserModel}}',
123-
'{{ WorkbenchUserModel }}',
124-
'Workbench\App\Models\User',
125-
126-
'{{WorkbenchUserFactory}}',
127-
'{{ WorkbenchUserFactory }}',
128-
'Workbench\Database\Factories\UserFactory',
129-
],
130-
[
131-
$workbenchAppNamespacePrefix,
132-
$workbenchAppNamespacePrefix,
133-
$workbenchFactoriesNamespacePrefix,
134-
$workbenchFactoriesNamespacePrefix,
135-
$workbenchSeederNamespacePrefix,
136-
$workbenchSeederNamespacePrefix,
137-
138-
$serviceProvider,
139-
$serviceProvider,
140-
$serviceProvider,
141-
142-
$databaseSeeder,
143-
$databaseSeeder,
144-
$databaseSeeder,
145-
146-
$userModel,
147-
$userModel,
148-
$userModel,
149-
150-
$userFactory,
151-
$userFactory,
152-
$userFactory,
153-
],
154-
$filename
155-
);
156-
}
15791
}

tests/Command/CommandTestCase.php

+2
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,10 @@ protected function assertCommandExecutedWithDevTool(bool $prefix = true): void
6565
{
6666
$workingPath = static::stubWorkingPath();
6767

68+
$this->assertDirectoryExists(join_paths($workingPath, 'workbench', 'app'));
6869
$this->assertDirectoryExists(join_paths($workingPath, 'workbench', 'app', 'Models'));
6970
$this->assertDirectoryExists(join_paths($workingPath, 'workbench', 'app', 'Providers'));
71+
$this->assertDirectoryExists(join_paths($workingPath, 'workbench', 'database'));
7072
$this->assertDirectoryExists(join_paths($workingPath, 'workbench', 'database', 'factories'));
7173
$this->assertDirectoryExists(join_paths($workingPath, 'workbench', 'database', 'seeders'));
7274

tests/Command/DevToolCommandTest.php

+11-5
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,29 @@
55
use PHPUnit\Framework\Attributes\DataProvider;
66
use PHPUnit\Framework\Attributes\Test;
77

8+
use function Orchestra\Testbench\laravel_version_compare;
9+
810
class DevToolCommandTest extends CommandTestCase
911
{
1012
#[Test]
1113
#[DataProvider('environmentFileDataProviders')]
1214
public function it_can_run_devtool_command_with_installation(?string $answer, bool $createEnvironmentFile)
1315
{
14-
$this->artisan('workbench:devtool', ['--install' => true])
16+
$command = $this->artisan('workbench:devtool', ['--install' => true])
1517
->expectsConfirmation('Prefix with `Workbench` namespace?', answer: 'yes')
1618
->expectsChoice("Export '.env' file as?", $answer, [
1719
'Skip exporting .env',
1820
'.env',
1921
'.env.example',
2022
'.env.dist',
21-
])
22-
->expectsConfirmation('Generate `workbench/bootstrap/app.php` file?', answer: 'no')
23-
->expectsConfirmation('Generate `workbench/bootstrap/providers.php` file?', answer: 'no')
24-
->assertSuccessful();
23+
]);
24+
25+
if (laravel_version_compare('11.0', '>=')) {
26+
$command->expectsConfirmation('Generate `workbench/bootstrap/app.php` file?', answer: 'no')
27+
->expectsConfirmation('Generate `workbench/bootstrap/providers.php` file?', answer: 'no');
28+
}
29+
30+
$command->assertSuccessful()->execute();
2531

2632
$this->assertCommandExecutedWithDevTool();
2733
$this->assertCommandExecutedWithInstall();

0 commit comments

Comments
 (0)