From d143fa243df6112c9df7c6e7e408b66da40c8fce Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 2 Jun 2017 16:53:03 +0200 Subject: [PATCH] Add show user command Signed-off-by: Thomas Citharel --- .../CoreBundle/Command/ShowUserCommand.php | 77 +++++++++++++++ .../Command/ShowUserCommandTest.php | 95 +++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 src/Wallabag/CoreBundle/Command/ShowUserCommand.php create mode 100644 tests/Wallabag/CoreBundle/Command/ShowUserCommandTest.php diff --git a/src/Wallabag/CoreBundle/Command/ShowUserCommand.php b/src/Wallabag/CoreBundle/Command/ShowUserCommand.php new file mode 100644 index 00000000..10428c4b --- /dev/null +++ b/src/Wallabag/CoreBundle/Command/ShowUserCommand.php @@ -0,0 +1,77 @@ +setName('wallabag:user:show') + ->setDescription('Show user details') + ->setHelp('This command shows the details for an user') + ->addArgument( + 'username', + InputArgument::REQUIRED, + 'User to show details for' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $this->output = $output; + + $username = $input->getArgument('username'); + + try { + $user = $this->getUser($username); + $this->showUser($user); + } catch (NoResultException $e) { + $output->writeln(sprintf('User "%s" not found.', $username)); + + return 1; + } + + return 0; + } + + /** + * @param User $user + */ + private function showUser(User $user) + { + $this->output->writeln(sprintf('Username : %s', $user->getUsername())); + $this->output->writeln(sprintf('Email : %s', $user->getEmail())); + $this->output->writeln(sprintf('Display name : %s', $user->getName())); + $this->output->writeln(sprintf('Creation date : %s', $user->getCreatedAt() !== null ? $user->getCreatedAt()->format('Y-m-d H:i:s') : 'false')); + $this->output->writeln(sprintf('Last login : %s', $user->getLastLogin() !== null ? $user->getLastLogin()->format('Y-m-d H:i:s') : 'false')); + $this->output->writeln(sprintf('2FA activated: %s', $user->isTwoFactorAuthentication() ? 'true' : 'false')); + } + + /** + * Fetches a user from its username. + * + * @param string $username + * + * @return \Wallabag\UserBundle\Entity\User + */ + private function getUser($username) + { + return $this->getDoctrine()->getRepository('WallabagUserBundle:User')->findOneByUserName($username); + } + + private function getDoctrine() + { + return $this->getContainer()->get('doctrine'); + } +} diff --git a/tests/Wallabag/CoreBundle/Command/ShowUserCommandTest.php b/tests/Wallabag/CoreBundle/Command/ShowUserCommandTest.php new file mode 100644 index 00000000..642327c3 --- /dev/null +++ b/tests/Wallabag/CoreBundle/Command/ShowUserCommandTest.php @@ -0,0 +1,95 @@ +getClient()->getKernel()); + $application->add(new ShowUserCommand()); + + $command = $application->find('wallabag:user:show'); + + $tester = new CommandTester($command); + $tester->execute([ + 'command' => $command->getName(), + ]); + } + + public function testRunShowUserCommandWithBadUsername() + { + $application = new Application($this->getClient()->getKernel()); + $application->add(new ShowUserCommand()); + + $command = $application->find('wallabag:user:show'); + + $tester = new CommandTester($command); + $tester->execute([ + 'command' => $command->getName(), + 'username' => 'unknown', + ]); + + $this->assertContains('User "unknown" not found', $tester->getDisplay()); + } + + public function testRunShowUserCommandForUser() + { + $application = new Application($this->getClient()->getKernel()); + $application->add(new ShowUserCommand()); + + $command = $application->find('wallabag:user:show'); + + $tester = new CommandTester($command); + $tester->execute([ + 'command' => $command->getName(), + 'username' => 'admin', + ]); + + $this->assertContains('Username : admin', $tester->getDisplay()); + $this->assertContains('Email : bigboss@wallabag.org', $tester->getDisplay()); + $this->assertContains('Display name : Big boss', $tester->getDisplay()); + $this->assertContains('2FA activated: false', $tester->getDisplay()); + } + + public function testShowUser() + { + $client = $this->getClient(); + $em = $client->getContainer()->get('doctrine.orm.entity_manager'); + + $this->logInAs('admin'); + + /** @var User $user */ + $user = $em->getRepository('WallabagUserBundle:User')->findOneById($this->getLoggedInUserId()); + + $user->setName('Bug boss'); + $em->persist($user); + + $em->flush(); + + $application = new Application($this->getClient()->getKernel()); + $application->add(new ShowUserCommand()); + + $command = $application->find('wallabag:user:show'); + + $tester = new CommandTester($command); + $tester->execute([ + 'command' => $command->getName(), + 'username' => 'admin', + ]); + + $this->assertContains('Display name : Bug boss', $tester->getDisplay()); + } +} -- 2.41.0