shouldReceive('getMiddlewareStack') ->andReturn([$class]); $handler ->shouldReceive('handle') ->once() ->andReturn(new Response(200)); $request = new ServerRequest('GET', '/'); $middleware = new ScopeMiddleware(); $response = $middleware->process($request, $handler); $this->assertEquals(200, $response->getStatusCode()); } /** * @throws \ReflectionException * @throws \JsonException */ public function testAllowsWithScope() { $class = new class { public function getCallable(): array { return [ $this, 'index' ]; } #[Scope(['admin'])] public function index() { // Dummy method for testing } }; $handler = \Mockery::mock(Dispatcher::class); $handler->shouldReceive('getMiddlewareStack') ->andReturn([$class]); $handler ->shouldReceive('handle') ->once() ->andReturn(new Response(200)); $request = new ServerRequest('GET', '/')->withAttribute('scopes', ['admin', 'user']); $middleware = new ScopeMiddleware(); $response = $middleware->process($request, $handler); $this->assertEquals(CodesEnum::OK->value, $response->getStatusCode()); } /** * @throws \ReflectionException * @throws \JsonException */ public function testDisallowsWithScope() { $class = new class { public function getCallable(): array { return [ $this, 'index' ]; } #[Scope(['admin'])] public function index() { // Dummy method for testing } }; $handler = \Mockery::mock(Dispatcher::class); $handler->shouldReceive('getMiddlewareStack') ->andReturn([$class]); $request = new ServerRequest('GET', '/'); $middleware = new ScopeMiddleware(); $response = $middleware->process($request, $handler); $this->assertEquals(CodesEnum::FORBIDDEN->value, $response->getStatusCode()); } }