public function testSendNotification()
 {
     DomainEvents::setEventDispatcher(new EventDispatcher());
     $user = User::fromDTO(new CreateUserDTO('Ma27', 'test-password', '*****@*****.**'));
     $publisher = $this->getMock(BackendInterface::class);
     $publisher->expects($this->once())->method('createAndPublish')->with('sen_mailer', ['override_locale' => true, 'user' => $user, 'content' => 'notification.auth.failures', 'parameters' => ['translation_defaults' => ['%times%' => 2]]]);
     $hook = new AuthenticationReportListener($publisher);
     $entity = new AuthenticationFailure($user);
     $entity->updateReport();
     $entity->updateReport();
     $entityReport = $entity->createReport();
     $event = new AuthenticationAttemptEvent($user);
     $event->setReport($entityReport);
     $hook->onAuthenticationFailure($event);
 }
 /**
  * Authenticates the user token
  *
  * @param AuthDTO $credentials
  * @param ApiKeyFactoryInterface $apiKeyGenerator
  *
  * @return Value\ApiKey
  *
  * @throws AuthenticationException If the credentials are invalid
  * @throws AuthenticationException If the user was locked
  * @throws AuthenticationException If the api key generation failed
  */
 public function authenticateToken(AuthDTO $credentials, ApiKeyFactoryInterface $apiKeyGenerator)
 {
     $this->ensureActivated();
     if (!$this->getCredentials()->compare($credentials)) {
         if (null === $this->authenticationFailureReport) {
             $this->authenticationFailureReport = new AuthenticationFailure($this);
         }
         $this->authenticationFailureReport->updateReport();
         throw AuthenticationException::fromCredentialFailure();
     }
     if ($this->getSimpleProfile()->isLocked()) {
         throw AuthenticationException::fromLockedUser();
     }
     if (null === ($token = $this->getToken())) {
         try {
             $token = $apiKeyGenerator->generateKeyCode();
         } catch (\OverflowException $ex) {
             throw AuthenticationException::fromInvalidApiKey();
         }
         $this->token = new Token($token);
     }
     return $this->getToken();
 }