function it_execute_action(UserRepository $userRepository, CredentialsRepository $credentialsRepository, EncoderFactoryInterface $encoderFactory, EventDispatcherInterface $eventDispatcher, PasswordEncoderInterface $passwordEncoder, User $user, Credentials $credentials, RegisterUserAction $action)
 {
     // Mocks
     $action->getUsername()->willReturn('mattketmo');
     $action->getDisplayName()->willReturn('Matthieu Moquet');
     $action->getEmail()->willReturn('*****@*****.**');
     $action->getPassword()->willReturn('super_passw0rd');
     $action->getPreferredLocale()->willReturn('fr_FR');
     $encoderFactory->getEncoder($user)->willReturn($passwordEncoder);
     $passwordEncoder->encodePassword('super_passw0rd', Argument::type('string'))->willReturn('encoded_password==');
     $userRepository->createNew(Argument::exact(new Username('mattketmo')))->willReturn($user);
     $credentialsRepository->createNew($user, 'encoded_password==', Argument::type('string'))->shouldBeCalled()->willReturn($credentials);
     $user->setName(Argument::exact(new Name('Matthieu Moquet')))->shouldBeCalled()->willReturn($user);
     $user->setEmail(Argument::exact(new Email('*****@*****.**')))->shouldBeCalled()->willReturn($user);
     $user->setPreferredLocale(Argument::exact(Locale::parse('fr_FR')))->shouldBeCalled()->willReturn($user);
     $userRepository->save($user)->shouldBeCalled();
     $credentialsRepository->save($credentials)->shouldBeCalled();
     $this->execute($action)->shouldReturn($user);
 }
 public function execute(RegisterUserAction $action)
 {
     $username = new Username($action->getUsername());
     $password = $action->getPassword();
     $email = new Email($action->getEmail());
     $displayName = new Name($action->getDisplayName());
     $preferredLocale = Locale::parse($action->getPreferredLocale());
     $user = $this->userRepository->createNew($username);
     $user->setName($displayName)->setEmail($email)->setPreferredLocale($preferredLocale);
     $encoder = $this->encoderFactory->getEncoder($user);
     $salt = md5(uniqid(null, true));
     $password = $encoder->encodePassword($password, $salt);
     $credentials = $this->credentialsRepository->createNew($user, $password, $salt);
     $this->userRepository->save($user);
     $this->credentialsRepository->save($credentials);
     return $user;
 }
 /**
  * {@inheritdoc}
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $errOutput = $output instanceof ConsoleOutputInterface ? $output->getErrorOutput() : $output;
     $action = new RegisterUserAction();
     $action->setUsername($input->getOption('username'));
     $action->setDisplayName($input->getOption('display-name'));
     $action->setEmail($input->getOption('email'));
     $action->setPassword($input->getOption('password'));
     $validator = $this->getContainer()->get('validator');
     $violations = $validator->validate($action);
     if (count($violations) > 0) {
         $errOutput->writeln('<comment>There are some errors:</comment>');
         foreach ($violations as $violation) {
             $errOutput->writeln(sprintf('  - %s: <error>%s</error>', $violation->getPropertyPath(), $violation->getMessage()));
         }
         return 1;
     }
     $user = $this->getContainer()->get('openl10n.processor.register_user')->execute($action);
     $output->writeln(sprintf('<info>User <comment>%s</comment> created</info>', $user->getUsername()));
 }