Skip to content

Commit cbd19cf

Browse files
authored
Merge pull request #2228 from erikn69/test_exception
Add tests for display roles/permissions on UnauthorizedException
2 parents dc9c48c + 446c39f commit cbd19cf

File tree

4 files changed

+91
-6
lines changed

4 files changed

+91
-6
lines changed

src/Exceptions/UnauthorizedException.php

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ public static function forRoles(array $roles): self
1515
$message = 'User does not have the right roles.';
1616

1717
if (config('permission.display_role_in_exception')) {
18-
$permStr = implode(', ', $roles);
19-
$message = 'User does not have the right roles. Necessary roles are '.$permStr;
18+
$message .= ' Necessary roles are '.implode(', ', $roles);
2019
}
2120

2221
$exception = new static(403, $message, null, []);
@@ -30,8 +29,7 @@ public static function forPermissions(array $permissions): self
3029
$message = 'User does not have the right permissions.';
3130

3231
if (config('permission.display_permission_in_exception')) {
33-
$permStr = implode(', ', $permissions);
34-
$message = 'User does not have the right permissions. Necessary permissions are '.$permStr;
32+
$message .= ' Necessary permissions are '.implode(', ', $permissions);
3533
}
3634

3735
$exception = new static(403, $message, null, []);
@@ -45,8 +43,7 @@ public static function forRolesOrPermissions(array $rolesOrPermissions): self
4543
$message = 'User does not have any of the necessary access rights.';
4644

4745
if (config('permission.display_permission_in_exception') && config('permission.display_role_in_exception')) {
48-
$permStr = implode(', ', $rolesOrPermissions);
49-
$message = 'User does not have the right permissions. Necessary permissions are '.$permStr;
46+
$message .= ' Necessary roles or permissions are '.implode(', ', $rolesOrPermissions);
5047
}
5148

5249
$exception = new static(403, $message, null, []);

tests/PermissionMiddlewareTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Illuminate\Http\Request;
66
use Illuminate\Http\Response;
77
use Illuminate\Support\Facades\Auth;
8+
use Illuminate\Support\Facades\Config;
89
use InvalidArgumentException;
910
use Spatie\Permission\Contracts\Permission;
1011
use Spatie\Permission\Exceptions\UnauthorizedException;
@@ -147,19 +148,41 @@ public function the_required_permissions_can_be_fetched_from_the_exception()
147148
{
148149
Auth::login($this->testUser);
149150

151+
$message = null;
150152
$requiredPermissions = [];
151153

152154
try {
153155
$this->permissionMiddleware->handle(new Request(), function () {
154156
return (new Response())->setContent('<html></html>');
155157
}, 'some-permission');
156158
} catch (UnauthorizedException $e) {
159+
$message = $e->getMessage();
157160
$requiredPermissions = $e->getRequiredPermissions();
158161
}
159162

163+
$this->assertEquals('User does not have the right permissions.', $message);
160164
$this->assertEquals(['some-permission'], $requiredPermissions);
161165
}
162166

167+
/** @test */
168+
public function the_required_permissions_can_be_displayed_in_the_exception()
169+
{
170+
Auth::login($this->testUser);
171+
Config::set(['permission.display_permission_in_exception' => true]);
172+
173+
$message = null;
174+
175+
try {
176+
$this->permissionMiddleware->handle(new Request(), function () {
177+
return (new Response())->setContent('<html></html>');
178+
}, 'some-permission');
179+
} catch (UnauthorizedException $e) {
180+
$message = $e->getMessage();
181+
}
182+
183+
$this->assertStringEndsWith('Necessary permissions are some-permission', $message);
184+
}
185+
163186
/** @test */
164187
public function use_not_existing_custom_guard_in_permission()
165188
{

tests/RoleMiddlewareTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Illuminate\Http\Request;
66
use Illuminate\Http\Response;
77
use Illuminate\Support\Facades\Auth;
8+
use Illuminate\Support\Facades\Config;
89
use InvalidArgumentException;
910
use Spatie\Permission\Exceptions\UnauthorizedException;
1011
use Spatie\Permission\Middlewares\RoleMiddleware;
@@ -113,19 +114,41 @@ public function the_required_roles_can_be_fetched_from_the_exception()
113114
{
114115
Auth::login($this->testUser);
115116

117+
$message = null;
116118
$requiredRoles = [];
117119

118120
try {
119121
$this->roleMiddleware->handle(new Request(), function () {
120122
return (new Response())->setContent('<html></html>');
121123
}, 'some-role');
122124
} catch (UnauthorizedException $e) {
125+
$message = $e->getMessage();
123126
$requiredRoles = $e->getRequiredRoles();
124127
}
125128

129+
$this->assertEquals('User does not have the right roles.', $message);
126130
$this->assertEquals(['some-role'], $requiredRoles);
127131
}
128132

133+
/** @test */
134+
public function the_required_roles_can_be_displayed_in_the_exception()
135+
{
136+
Auth::login($this->testUser);
137+
Config::set(['permission.display_role_in_exception' => true]);
138+
139+
$message = null;
140+
141+
try {
142+
$this->roleMiddleware->handle(new Request(), function () {
143+
return (new Response())->setContent('<html></html>');
144+
}, 'some-role');
145+
} catch (UnauthorizedException $e) {
146+
$message = $e->getMessage();
147+
}
148+
149+
$this->assertStringEndsWith('Necessary roles are some-role', $message);
150+
}
151+
129152
/** @test */
130153
public function use_not_existing_custom_guard_in_role()
131154
{

tests/RoleOrPermissionMiddlewareTest.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Illuminate\Http\Request;
66
use Illuminate\Http\Response;
77
use Illuminate\Support\Facades\Auth;
8+
use Illuminate\Support\Facades\Config;
89
use InvalidArgumentException;
910
use Spatie\Permission\Exceptions\UnauthorizedException;
1011
use Spatie\Permission\Middlewares\RoleOrPermissionMiddleware;
@@ -123,6 +124,47 @@ public function user_can_access_permission_or_role_with_guard_admin_while_login_
123124
);
124125
}
125126

127+
/** @test */
128+
public function the_required_permissions_or_roles_can_be_fetched_from_the_exception()
129+
{
130+
Auth::login($this->testUser);
131+
132+
$message = null;
133+
$requiredRolesOrPermissions = [];
134+
135+
try {
136+
$this->roleOrPermissionMiddleware->handle(new Request(), function () {
137+
return (new Response())->setContent('<html></html>');
138+
}, 'some-permission|some-role');
139+
} catch (UnauthorizedException $e) {
140+
$message = $e->getMessage();
141+
$requiredRolesOrPermissions = $e->getRequiredPermissions();
142+
}
143+
144+
$this->assertEquals('User does not have any of the necessary access rights.', $message);
145+
$this->assertEquals(['some-permission', 'some-role'], $requiredRolesOrPermissions);
146+
}
147+
148+
/** @test */
149+
public function the_required_permissions_or_roles_can_be_displayed_in_the_exception()
150+
{
151+
Auth::login($this->testUser);
152+
Config::set(['permission.display_permission_in_exception' => true]);
153+
Config::set(['permission.display_role_in_exception' => true]);
154+
155+
$message = null;
156+
157+
try {
158+
$this->roleOrPermissionMiddleware->handle(new Request(), function () {
159+
return (new Response())->setContent('<html></html>');
160+
}, 'some-permission|some-role');
161+
} catch (UnauthorizedException $e) {
162+
$message = $e->getMessage();
163+
}
164+
165+
$this->assertStringEndsWith('Necessary roles or permissions are some-permission, some-role', $message);
166+
}
167+
126168
protected function runMiddleware($middleware, $name, $guard = null)
127169
{
128170
try {

0 commit comments

Comments
 (0)