<?php

use JsonRPC\Exception\AuthenticationFailureException;
use JsonRPC\MiddlewareHandler;
use JsonRPC\MiddlewareInterface;

require_once __DIR__.'/../../../vendor/autoload.php';

class FirstMiddleware implements MiddlewareInterface
{
    public function execute($username, $password, $procedureName)
    {
    }
}

class SecondMiddleware implements MiddlewareInterface
{
    public function execute($username, $password, $procedureName)
    {
        if ($username === 'myUsername' && $password === 'myPassword' && $procedureName === 'myProcedure') {
            throw new AuthenticationFailureException('Bad user');
        }
    }
}

class MiddlewareHandlerTest extends PHPUnit_Framework_TestCase
{
    public function testMiddlewareCanRaiseException()
    {
        $this->setExpectedException('JsonRpc\Exception\AuthenticationFailureException');

        $middlewareHandler = new MiddlewareHandler();
        $middlewareHandler->withUsername('myUsername');
        $middlewareHandler->withPassword('myPassword');
        $middlewareHandler->withProcedure('myProcedure');
        $middlewareHandler->withMiddleware(new FirstMiddleware());
        $middlewareHandler->withMiddleware(new SecondMiddleware());
        $middlewareHandler->execute();
    }
}