Skip to content

Commit 0246ac8

Browse files
Merge pull request #67 from deniskorbakov/update-test-coverage
Update test coverage
2 parents 86c1f4f + d4864df commit 0246ac8

File tree

8 files changed

+138
-67
lines changed

8 files changed

+138
-67
lines changed

app/Builders/UserBuilder.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,6 @@
1010
/** @extends Builder<User> */
1111
class UserBuilder extends Builder
1212
{
13-
public function hasRole(string $role): bool
14-
{
15-
return $this->where('role', $role)->exists();
16-
}
17-
1813
public function isEmailVerified(): bool
1914
{
2015
return $this->model->email_verified_at !== null;

app/Models/User.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
* @property ?Carbon $email_verified_at
2525
* @property UserRole $role
2626
*
27-
* @method hasRole(string $role)
2827
* @method isEmailVerified()
2928
*/
3029
class User extends Authenticatable implements FilamentUser

app/Providers/HorizonServiceProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public function boot(): void
2424
*/
2525
protected function gate(): void
2626
{
27-
Gate::define('viewHorizon', function ($user): bool {
27+
Gate::define('viewHorizon', static function ($user): bool {
2828
return in_array($user->email, [
2929
//
3030
]);

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
"cs-rector-fix": [
9090
"@php vendor/bin/rector"
9191
],
92-
"test-coverage": "@php vendor/bin/pest --coverage --min=80",
92+
"test-coverage": "@php vendor/bin/pest --coverage --min=90",
9393
"tests": [
9494
"@php vendor/bin/pest"
9595
]

rector.php

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -32,67 +32,67 @@
3232
use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromStrictConstructorRector;
3333
use Rector\TypeDeclaration\Rector\StmtsAwareInterface\DeclareStrictTypesRector;
3434
use Rector\ValueObject\PhpVersion;
35-
use RectorLaravel\Rector\StaticCall\MinutesToSecondsInCacheRector;
3635
use RectorLaravel\Set\LaravelLevelSetList;
3736

3837
return static function (RectorConfig $rectorConfig): void {
39-
// Paths to analyze
40-
$rectorConfig->paths([
41-
__DIR__ . '/app',
42-
__DIR__ . '/config',
43-
__DIR__ . '/database',
44-
__DIR__ . '/routes',
45-
__DIR__ . '/tests',
46-
]);
38+
$rectorConfig->paths(
39+
[
40+
__DIR__ . '/app',
41+
__DIR__ . '/config',
42+
__DIR__ . '/database',
43+
__DIR__ . '/routes',
44+
__DIR__ . '/tests',
45+
]
46+
);
4747

48-
$rectorConfig->rules([
49-
AddVoidReturnTypeWhereNoReturnRector::class,
50-
DeclareStrictTypesRector::class,
51-
ClosureReturnTypeRector::class,
52-
ReturnTypeFromStrictTypedCallRector::class,
53-
ReturnTypeFromStrictNewArrayRector::class,
54-
ReturnTypeFromReturnDirectArrayRector::class,
55-
TypedPropertyFromStrictConstructorRector::class,
56-
CompleteDynamicPropertiesRector::class,
57-
InlineArrayReturnAssignRector::class,
58-
ExplicitBoolCompareRector::class,
59-
SwitchNegatedTernaryRector::class,
60-
NewlineBeforeNewAssignSetRector::class,
61-
EncapsedStringsToSprintfRector::class,
62-
PostIncDecToPreIncDecRector::class,
63-
SymplifyQuoteEscapeRector::class,
64-
RemoveUnusedPromotedPropertyRector::class,
65-
RemoveUnusedPrivateMethodRector::class,
66-
RemoveUnusedPrivatePropertyRector::class,
67-
ClassPropertyAssignToConstructorPromotionRector::class,
68-
ReadOnlyPropertyRector::class,
69-
PrivatizeFinalClassMethodRector::class,
70-
PrivatizeFinalClassPropertyRector::class,
71-
]);
48+
$rectorConfig->rules(
49+
[
50+
AddVoidReturnTypeWhereNoReturnRector::class,
51+
DeclareStrictTypesRector::class,
52+
ClosureReturnTypeRector::class,
53+
ReturnTypeFromStrictTypedCallRector::class,
54+
ReturnTypeFromStrictNewArrayRector::class,
55+
ReturnTypeFromReturnDirectArrayRector::class,
56+
TypedPropertyFromStrictConstructorRector::class,
57+
CompleteDynamicPropertiesRector::class,
58+
InlineArrayReturnAssignRector::class,
59+
ExplicitBoolCompareRector::class,
60+
SwitchNegatedTernaryRector::class,
61+
NewlineBeforeNewAssignSetRector::class,
62+
EncapsedStringsToSprintfRector::class,
63+
PostIncDecToPreIncDecRector::class,
64+
SymplifyQuoteEscapeRector::class,
65+
RemoveUnusedPromotedPropertyRector::class,
66+
RemoveUnusedPrivateMethodRector::class,
67+
RemoveUnusedPrivatePropertyRector::class,
68+
ClassPropertyAssignToConstructorPromotionRector::class,
69+
ReadOnlyPropertyRector::class,
70+
PrivatizeFinalClassMethodRector::class,
71+
PrivatizeFinalClassPropertyRector::class,
72+
]
73+
);
7274

73-
// Skip specific rules
74-
$rectorConfig->skip([
75-
CompactToVariablesRector::class,
76-
RemoveEmptyClassMethodRector::class,
77-
RemoveNonExistingVarAnnotationRector::class,
78-
MinutesToSecondsInCacheRector::class,
79-
RemoveNullArgOnNullDefaultParamRector::class,
80-
__DIR__ . '/app/Http/Controllers/Auth/AuthenticatedSessionController.php',
81-
]);
75+
$rectorConfig->skip(
76+
[
77+
CompactToVariablesRector::class,
78+
RemoveEmptyClassMethodRector::class,
79+
RemoveNonExistingVarAnnotationRector::class,
80+
RemoveNullArgOnNullDefaultParamRector::class,
81+
]
82+
);
8283

83-
// Enable caching for Rector
8484
$rectorConfig->cacheDirectory(__DIR__ . '/storage/rector');
8585
$rectorConfig->cacheClass(FileCacheStorage::class);
8686

87-
// Apply sets for Laravel and general code quality
88-
$rectorConfig->sets([
89-
LaravelLevelSetList::UP_TO_LARAVEL_110,
90-
SetList::CODE_QUALITY,
91-
SetList::TYPE_DECLARATION,
92-
SetList::DEAD_CODE,
93-
SetList::PRIVATIZATION,
94-
]);
87+
$rectorConfig->sets(
88+
[
89+
LaravelLevelSetList::UP_TO_LARAVEL_120,
90+
SetList::CODE_QUALITY,
91+
SetList::TYPE_DECLARATION,
92+
SetList::DEAD_CODE,
93+
SetList::PRIVATIZATION,
94+
]
95+
);
9596

96-
// Define PHP version for Rector
9797
$rectorConfig->phpVersion(PhpVersion::PHP_84);
9898
};

tests/Feature/User/RolesTest.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use App\Enums\UserRole;
6+
use App\Models\User;
7+
8+
test('success - get public roles', function (): void {
9+
$user = User::factory()->create();
10+
11+
$result = $this->actingAsApi($user)
12+
->getJson(route('roles'));
13+
14+
$result->assertOk()
15+
->assertJsonStructure(
16+
[
17+
'roles' => [
18+
'*' => [
19+
'id',
20+
'name',
21+
],
22+
],
23+
]
24+
);
25+
26+
$roles = $result->json('roles');
27+
28+
expect($roles)->toHaveCount(1)
29+
->and($roles[0]['id'])->toBe(UserRole::User->value)
30+
->and($roles[0]['name'])->toBe(UserRole::User->displayName());
31+
});
32+
33+
test('success - roles structure and content', function (): void {
34+
$user = User::factory()->create();
35+
36+
$result = $this->actingAsApi($user)
37+
->getJson(route('roles'));
38+
39+
$roles = $result->json('roles');
40+
41+
expect($roles)->toHaveCount(1)
42+
->and($roles[0])->toEqual(
43+
[
44+
'id' => 'user',
45+
'name' => 'Пользователь',
46+
]
47+
);
48+
});

tests/Unit/Enum/UserRoleTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use App\Enums\UserRole;
6+
7+
test('success - enum has correct cases', function (): void {
8+
$cases = UserRole::cases();
9+
10+
expect($cases)->toHaveCount(3)
11+
->and($cases[0]->name)->toBe('Developer')
12+
->and($cases[0]->value)->toBe('developer')
13+
->and($cases[1]->name)->toBe('Admin')
14+
->and($cases[1]->value)->toBe('admin')
15+
->and($cases[2]->name)->toBe('User')
16+
->and($cases[2]->value)->toBe('user');
17+
});
18+
19+
test('success - enum displayName returns correct translations', function (): void {
20+
expect(UserRole::Developer->displayName())->toBe('Разработчик')
21+
->and(UserRole::Admin->displayName())->toBe('Администратор')
22+
->and(UserRole::User->displayName())->toBe('Пользователь');
23+
});
24+
25+
test('success - enum canFullAccess returns correct bool', function (): void {
26+
expect(UserRole::Developer->canFullAccess())->toBeTrue()
27+
->and(UserRole::Admin->canFullAccess())->toBeTrue()
28+
->and(UserRole::User->canFullAccess())->toBeFalse();
29+
});
30+
31+
test('success - enum publicRoles returns correct roles', function (): void {
32+
$publicRoles = UserRole::publicRoles();
33+
34+
expect($publicRoles)->toHaveCount(1)
35+
->and($publicRoles[0])->toBe(UserRole::User);
36+
});

tests/Unit/ExampleTest.php

Lines changed: 0 additions & 7 deletions
This file was deleted.

0 commit comments

Comments
 (0)