• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

orchestral / canvas / 5914152139

19 Aug 2023 11:58PM UTC coverage: 94.316% (+0.5%) from 93.772%
5914152139

push

github

crynobone
wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

6 of 6 new or added lines in 1 file covered. (100.0%)

813 of 862 relevant lines covered (94.32%)

21.11 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

83.93
/src/LaravelServiceProvider.php
1
<?php
2

3
namespace Orchestra\Canvas;
4

5
use Illuminate\Console\Application as Artisan;
6
use Illuminate\Contracts\Foundation\Application;
7
use Illuminate\Contracts\Support\DeferrableProvider;
8
use Illuminate\Filesystem\Filesystem;
9
use Illuminate\Support\Arr;
10
use Illuminate\Support\Env;
11
use Illuminate\Support\ServiceProvider;
12
use Orchestra\Canvas\Core\Presets\Preset;
13
use Orchestra\Workbench\Workbench;
14
use Symfony\Component\Yaml\Yaml;
15

16
class LaravelServiceProvider extends ServiceProvider implements DeferrableProvider
17
{
18
    use Core\CommandsProvider;
19

20
    /**
21
     * Register services.
22
     *
23
     * @return void
24
     */
25
    public function register()
26
    {
27
        $this->app->singleton('orchestra.canvas', function (Application $app) {
91✔
28
            $filesystem = $app->make('files');
70✔
29

30
            if (\defined('TESTBENCH_WORKING_PATH') && class_exists(Workbench::class)) {
70✔
31
                return $this->registerCanvasForWorkbench($filesystem);
×
32
            }
33

34
            $config = ['preset' => 'laravel'];
70✔
35

36
            if ($filesystem->exists($app->basePath('canvas.yaml'))) {
70✔
37
                $config = Yaml::parseFile($app->basePath('canvas.yaml'));
×
38
            } else {
39
                Arr::set($config, 'testing.extends', [
70✔
40
                    'unit' => 'PHPUnit\Framework\TestCase',
70✔
41
                    'feature' => 'Tests\TestCase',
70✔
42
                ]);
70✔
43

44
                $config['namespace'] = trim($this->app->getNamespace(), '\\');
70✔
45
            }
46

47
            $config['user-auth-provider'] = $this->userProviderModel();
70✔
48

49
            return Canvas::preset($config, $app->basePath(), $filesystem);
70✔
50
        });
91✔
51
    }
52

53
    /**
54
     * Bootstrap services.
55
     *
56
     * @return void
57
     */
58
    public function boot()
59
    {
60
        Artisan::starting(static function ($artisan) {
91✔
61
            $artisan->getLaravel()->booted(static function ($app) use ($artisan) {
90✔
62
                /**
63
                 * @var \Illuminate\Contracts\Foundation\Application $app
64
                 * @var \Illuminate\Console\Application $artisan
65
                 */
66
                $preset = $app->make('orchestra.canvas');
90✔
67

68
                if (
69
                    \defined('TESTBENCH_WORKING_PATH')
90✔
70
                    || Env::get('CANVAS_FOR_LARAVEL') === true
90✔
71
                    || file_exists($app->basePath('canvas.yaml'))
90✔
72
                ) {
73
                    $artisan->add(new Commands\Channel($preset));
90✔
74
                    $artisan->add(new Commands\Component($preset));
90✔
75
                    $artisan->add(new Commands\Console($preset));
90✔
76
                    $artisan->add(new Commands\Event($preset));
90✔
77
                    $artisan->add(new Commands\Exception($preset));
90✔
78
                    $artisan->add(new Commands\Database\Cast($preset));
90✔
79
                    $artisan->add(new Commands\Database\Eloquent($preset));
90✔
80
                    $artisan->add(new Commands\Database\Factory($preset));
90✔
81
                    $artisan->add(new Commands\Database\Migration($preset));
90✔
82
                    $artisan->add(new Commands\Database\Observer($preset));
90✔
83
                    $artisan->add(new Commands\Database\Seeder($preset));
90✔
84
                    $artisan->add(new Commands\Job($preset));
90✔
85
                    $artisan->add(new Commands\Listener($preset));
90✔
86
                    $artisan->add(new Commands\Mail($preset));
90✔
87
                    $artisan->add(new Commands\Notification($preset));
90✔
88
                    $artisan->add(new Commands\Policy($preset));
90✔
89
                    $artisan->add(new Commands\Provider($preset));
90✔
90
                    $artisan->add(new Commands\Request($preset));
90✔
91
                    $artisan->add(new Commands\Resource($preset));
90✔
92
                    $artisan->add(new Commands\Routing\Controller($preset));
90✔
93
                    $artisan->add(new Commands\Routing\Middleware($preset));
90✔
94
                    $artisan->add(new Commands\Rule($preset));
90✔
95
                    $artisan->add(new Commands\StubPublish($preset));
90✔
96
                    $artisan->add(new Commands\Testing($preset));
90✔
97
                }
98

99
                $preset->addAdditionalCommands($artisan);
90✔
100
            });
90✔
101
        });
91✔
102
    }
103

104
    /**
105
     * Regiseter canvas for workbench.
106
     */
107
    protected function registerCanvasForWorkbench(Filesystem $filesystem): Preset
108
    {
109
        $config = ['preset' => Presets\PackageWorkbench::class, 'generators' => null];
×
110

111
        if ($filesystem->exists(Workbench::packagePath('canvas.yaml'))) {
×
112
            $yaml = Yaml::parseFile(Workbench::packagePath('canvas.yaml'));
×
113

114
            $config['generators'] = $yaml['generators'] ?? [];
×
115
        }
116

117
        return Canvas::preset(
×
118
            $config, rtrim(Workbench::packagePath(), DIRECTORY_SEPARATOR), $filesystem
×
119
        );
×
120
    }
121

122
    /**
123
     * Get the services provided by the provider.
124
     *
125
     * @return array<int, string>
126
     */
127
    public function provides()
128
    {
129
        return ['orchestra.canvas'];
1✔
130
    }
131
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc