/**
  * Test handle method.
  */
 public function testHandle()
 {
     $this->given($resolver = new HandlerClassResolver(new FromClassNameResolver(), new MethodWithShortObjectNameResolver(), new InMemoryLocator([LoginUserMessage::class => new LoginUserMessageListener()])))->and($middleware = new MessageHandlerMiddleware($resolver))->and($command = new LoginUserMessage('*****@*****.**', 'plainpassword'))->and($callable = function (LoginUserMessage $command) {
         $command->setEmail('*****@*****.**');
     })->when($middleware->handle($command, $callable))->then()->string($command->email())->isEqualTo('*****@*****.**')->exception(function () use($middleware, $callable) {
         $middleware->handle(new \StdClass(), $callable);
     })->isInstanceOf(\InvalidArgumentException::class);
 }
 /**
  * Test handle method.
  */
 public function testHandle()
 {
     $this->given($middleware = new ValidatorMiddleware())->and($command = new LoginUserMessage('*****@*****.**', 'plainpassword'))->and($callable = function (LoginUserMessage $command) {
         $command->setEmail('*****@*****.**');
     })->when($middleware->handle($command, $callable))->then()->string($command->email())->isEqualTo('*****@*****.**');
     $this->given($middleware = new ValidatorMiddleware())->and($command = new LoginUserMessage('invalid.email.com', 'plainpassword'))->and($callable = function () {
     })->then()->exception(function () use($middleware, $command, $callable) {
         $middleware->handle($command, $callable);
     })->isInstanceOf(ValidationException::class);
     $this->given($middleware = new ValidatorMiddleware())->and($command = new LogoutUserMessage('invalid.email.com'))->and($callable = function (LogoutUserMessage $command) {
         $command->setEmail('*****@*****.**');
     })->when($middleware->handle($command, $callable))->then()->string($command->email())->isEqualTo('*****@*****.**');
 }
 /**
  * Test handle method.
  */
 public function testHandleMessage()
 {
     $this->given($middleware = new LockingMiddleware())->and($event = new LoginUserMessage('*****@*****.**'))->and($callable = function (LoginUserMessage $event) {
         $event->setEmail('*****@*****.**');
     })->when($middleware->handle($event, $callable))->then()->string($event->email())->isEqualTo('*****@*****.**');
     $this->given($middleware = new LockingMiddleware())->and($event = new LoginUserMessage('*****@*****.**'))->and($callable = function (LoginUserMessage $event) {
         $event->setEmail('*****@*****.**');
         throw new \InvalidArgumentException();
     })->then()->exception(function () use($middleware, $event, $callable) {
         $middleware->handle($event, $callable);
     })->isInstanceOf(\InvalidArgumentException::class);
     $this->given($middleware = new LockingMiddleware())->and($callable = function (LoginUserMessage $event) {
         $event->setEmail(md5($event->email()));
     })->and($listener = new TriggerMessageOnListener($middleware, $callable))->and($event = new LoginUserMessage('*****@*****.**'))->when($middleware->handle($event, function ($event) use($listener) {
         $listener->onLogin($event);
     }))->then()->string($event->email())->isEqualTo(md5(sha1('*****@*****.**')));
 }