1+ <?php
2+
3+ namespace Tests \Middleware ;
4+
5+ use Illuminate \Support \Facades \Route ;
6+ use Kroderdev \LaravelMicroserviceCore \Auth \ExternalUser ;
7+ use Kroderdev \LaravelMicroserviceCore \Http \Middleware \RoleMiddleware ;
8+ use Kroderdev \LaravelMicroserviceCore \Http \Middleware \PermissionMiddleware ;
9+ use Orchestra \Testbench \TestCase ;
10+
11+ class AuthMiddlewareTest extends TestCase
12+ {
13+ protected function setUp (): void
14+ {
15+ parent ::setUp ();
16+
17+ // Register middleware aliases
18+ $ this ->app ['router ' ]->aliasMiddleware ('role ' , RoleMiddleware::class);
19+ $ this ->app ['router ' ]->aliasMiddleware ('permission ' , PermissionMiddleware::class);
20+
21+ // Routes for testing
22+ Route::middleware ('role:admin ' )->get ('/role-protected ' , fn () => response ()->json (['ok ' => true ]));
23+ Route::middleware ('permission:edit.posts ' )->get ('/permission-protected ' , fn () => response ()->json (['ok ' => true ]));
24+ }
25+
26+ /** @test */
27+ public function role_middleware_allows_user_with_required_role ()
28+ {
29+ $ user = new ExternalUser (['id ' => 'user-1 ' ]);
30+ $ user ->loadAccess (['admin ' ], []);
31+ $ this ->actingAs ($ user );
32+
33+ $ this ->get ('/role-protected ' )->assertOk ()->assertJson (['ok ' => true ]);
34+ }
35+
36+ /** @test */
37+ public function role_middleware_blocks_user_without_role ()
38+ {
39+ $ user = new ExternalUser (['id ' => 'user-1 ' ]);
40+ $ user ->loadAccess (['tester ' ], []);
41+ $ this ->actingAs ($ user );
42+
43+ $ this ->get ('/role-protected ' )->assertStatus (403 );
44+ }
45+
46+ /** @test */
47+ public function permission_middleware_allows_user_with_permission ()
48+ {
49+ $ user = new ExternalUser (['id ' => 'user-1 ' ]);
50+ $ user ->loadAccess ([], ['edit.posts ' ]);
51+ $ this ->actingAs ($ user );
52+
53+ $ this ->get ('/permission-protected ' )->assertOk ()->assertJson (['ok ' => true ]);
54+ }
55+
56+ /** @test */
57+ public function permission_middleware_blocks_user_without_permission ()
58+ {
59+ $ user = new ExternalUser (['id ' => 'user-1 ' ]);
60+ $ user ->loadAccess ([], ['view.posts ' ]);
61+ $ this ->actingAs ($ user );
62+
63+ $ this ->get ('/permission-protected ' )->assertStatus (403 );
64+ }
65+ }
0 commit comments