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

RonasIT / laravel-helpers / 11662781155

04 Nov 2024 10:52AM UTC coverage: 78.056% (+0.4%) from 77.706%
11662781155

push

github

web-flow
Merge pull request #144 from RonasIT/modify-nova-test-trait

feat: modify nova test trait

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

4 existing lines in 1 file now uncovered.

996 of 1276 relevant lines covered (78.06%)

11.56 hits per line

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

94.37
/src/HelpersServiceProvider.php
1
<?php
2

3
namespace RonasIT\Support;
4

5
use Illuminate\Routing\Route;
6
use Illuminate\Support\Arr;
7
use Illuminate\Support\Facades\Auth;
8
use Illuminate\Support\Facades\DB;
9
use Illuminate\Support\Facades\ParallelTesting;
10
use Illuminate\Support\Facades\Route as RouteFacade;
11
use Illuminate\Support\Facades\Validator;
12
use Illuminate\Support\ServiceProvider;
13
use Illuminate\Testing\Concerns\TestDatabases;
14
use Maatwebsite\Excel\ExcelServiceProvider;
15
use RonasIT\Support\Contracts\VersionEnumContract as Version;
16
use RonasIT\Support\Middleware\SecurityMiddleware;
17
use Illuminate\Routing\Router;
18

19
class HelpersServiceProvider extends ServiceProvider
20
{
21
    use TestDatabases;
22

23
    public function boot(): void
24
    {
25
        $router = $this->app['router'];
234✔
26

27
        $router->prependMiddlewareToGroup('web', SecurityMiddleware::class);
234✔
28
        $router->prependMiddlewareToGroup('api', SecurityMiddleware::class);
234✔
29

30
        $this->extendValidator();
234✔
31

32
        app(ExcelServiceProvider::class, ['app' => app()])->boot();
234✔
33

34
        $this->extendRouter();
234✔
35

36
        if ($this->app->runningUnitTests()) {
234✔
37
            $this->whenNotUsingInMemoryDatabase(function ($database) {
234✔
UNCOV
38
                [$testDatabase, $created] = $this->ensureTestDatabaseExists($database);
×
39

UNCOV
40
                $this->switchToDatabase($testDatabase);
×
41

UNCOV
42
                if ($created) {
×
UNCOV
43
                    ParallelTesting::callSetUpTestDatabaseCallbacks($testDatabase);
×
44
                }
45
            });
234✔
46
        }
47
    }
48

49
    public function register(): void
50
    {
51
        app(ExcelServiceProvider::class, ['app' => app()])->register();
234✔
52
    }
53

54
    protected function extendValidator(): void
55
    {
56
        Validator::extend('unique_except_of_authorized_user', function ($attribute, $value, $parameters = []) {
234✔
57
            $table = Arr::get($parameters, 0, 'users');
4✔
58
            $keyField = Arr::get($parameters, 1, 'id');
4✔
59
            $userId = Auth::id();
4✔
60

61
            $result = DB::table($table)
4✔
62
                ->where($keyField, '<>', $userId)
4✔
63
                ->whereIn($attribute, Arr::flatten((array) $value))
4✔
64
                ->exists();
4✔
65

66
            return !$result;
4✔
67
        });
234✔
68

69
        Validator::extend('list_exists', function ($attribute, $value, $parameters) {
234✔
70

71
            if (count($parameters) < 1) {
4✔
72
                return false;
1✔
73
            }
74

75
            $table = Arr::get($parameters, 0);
3✔
76
            $keyField = Arr::get($parameters, 1, 'id');
3✔
77

78
            if (!empty(Arr::get($parameters, 2))) {
3✔
79
                $value = collect($value)->pluck(Arr::get($parameters, 2));
1✔
80
            }
81

82
            return DB::table($table)
3✔
83
                ->whereIn($keyField, $value)
3✔
84
                ->exists();
3✔
85
        });
234✔
86
    }
87

88
    protected function extendRouter(): void
89
    {
90
        /**
91
         * Specify that the route version must be in the range of given values inclusive.
92
         *
93
         * @param Version|null $start
94
         * @param Version|null $end
95
         * @param string|null $param (default is 'version')
96
         * @param Route|null $instance
97
         * @return Router|Route
98
         */
99
        $versionRange = function (
234✔
100
            ?Version $start,
234✔
101
            ?Version $end,
234✔
102
            ?string $param,
234✔
103
            Route $instance = null
234✔
104
        ) {
234✔
105
            if (!$param) {
38✔
106
                $param = 'version';
38✔
107
            }
108

109
            $versionEnum = app(Version::class);
38✔
110
            $disabledVersions = config('app.disabled_api_versions') ?: [];
38✔
111

112
            $versions = array_diff($versionEnum::values(), $disabledVersions);
38✔
113

114
            $versions = array_filter($versions, function ($version) use ($start, $end) {
38✔
115
                $result = true;
38✔
116

117
                if (!empty($start)) {
38✔
118
                    $result &= version_compare($version, $start->value, '>=');
38✔
119
                }
120

121
                if (!empty($end)) {
38✔
122
                    $result &= version_compare($version, $end->value, '<=');
38✔
123
                }
124

125
                return $result;
38✔
126
            });
38✔
127

128
            return (!empty($instance))
38✔
129
                ? $instance->whereIn($param, $versions)
38✔
130
                : RouteFacade::whereIn($param, $versions);
38✔
131
        };
234✔
132

133
        Route::macro(
234✔
134
            'versionRange',
234✔
135
            fn (Version $from, Version $to, $param = null) => $versionRange($from, $to, $param, $this)
234✔
136
        );
234✔
137
        Route::macro('versionFrom', fn (Version $from, $param = null) => $versionRange($from, null, $param, $this));
234✔
138
        Route::macro('versionTo', fn (Version $to, $param = null) => $versionRange(null, $to, $param, $this));
234✔
139

140
        RouteFacade::macro(
234✔
141
            'versionRange',
234✔
142
            fn (Version $from, Version $to, string $param = null) => $versionRange($from, $to, $param)
234✔
143
        );
234✔
144
        RouteFacade::macro('versionFrom', fn (Version $from, $param = null) => $versionRange($from, null, $param));
234✔
145
        RouteFacade::macro('versionTo', fn (Version $to, $param = null) => $versionRange(null, $to, $param));
234✔
146
        RouteFacade::macro('version', fn (Version $version) => RouteFacade::prefix('v' . $version->value));
234✔
147
    }
148
}
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

© 2025 Coveralls, Inc