namespace Wallabag\CoreBundle\Command;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
+use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
->setName('wallabag:user:list')
->setDescription('List all users')
->setHelp('This command list all existing users')
+ ->addArgument('search', InputArgument::OPTIONAL, 'Filter list by given search term')
+ ->addOption('limit', 'l', InputOption::VALUE_REQUIRED, 'Max number of displayed users', 100)
;
}
{
$io = new SymfonyStyle($input, $output);
- $users = $this->getContainer()->get('wallabag_user.user_repository')->findAll();
+ $users = $this->getContainer()->get('wallabag_user.user_repository')
+ ->getQueryBuilderForSearch($input->getArgument('search'))
+ ->setMaxResults($input->getOption('limit'))
+ ->getQuery()
+ ->getResult();
+
+ $nbUsers = $this->getContainer()->get('wallabag_user.user_repository')
+ ->getSumUsers();
$rows = [];
foreach ($users as $user) {
$io->table(['username', 'email', 'is enabled?', 'is admin?'], $rows);
- $io->success(sprintf('%s user(s) displayed.', count($users)));
+ $io->success(
+ sprintf(
+ '%s/%s%s user(s) displayed.',
+ count($users),
+ $nbUsers,
+ $input->getArgument('search') === null ? '' : ' (filtered)'
+ )
+ );
return 0;
}
->getSingleScalarResult();
}
+ /**
+ * Count how many users are existing.
+ *
+ * @return int
+ */
+ public function getSumUsers()
+ {
+ return $this->createQueryBuilder('u')
+ ->select('count(u)')
+ ->getQuery()
+ ->getSingleScalarResult();
+ }
+
/**
* Retrieves users filtered with a search term.
*
'command' => $command->getName(),
]);
- $this->assertContains('3 user(s) displayed.', $tester->getDisplay());
+ $this->assertContains('3/3 user(s) displayed.', $tester->getDisplay());
+ }
+
+ public function testRunListUserCommandWithLimit()
+ {
+ $application = new Application($this->getClient()->getKernel());
+ $application->add(new ListUserCommand());
+
+ $command = $application->find('wallabag:user:list');
+
+ $tester = new CommandTester($command);
+ $tester->execute([
+ 'command' => $command->getName(),
+ '--limit' => 2,
+ ]);
+
+ $this->assertContains('2/3 user(s) displayed.', $tester->getDisplay());
+ }
+
+ public function testRunListUserCommandWithSearch()
+ {
+ $application = new Application($this->getClient()->getKernel());
+ $application->add(new ListUserCommand());
+
+ $command = $application->find('wallabag:user:list');
+
+ $tester = new CommandTester($command);
+ $tester->execute([
+ 'command' => $command->getName(),
+ 'search' => 'boss',
+ ]);
+
+ $this->assertContains('1/3 (filtered) user(s) displayed.', $tester->getDisplay());
+ }
+
+ public function testRunListUserCommandWithSearchAndLimit()
+ {
+ $application = new Application($this->getClient()->getKernel());
+ $application->add(new ListUserCommand());
+
+ $command = $application->find('wallabag:user:list');
+
+ $tester = new CommandTester($command);
+ $tester->execute([
+ 'command' => $command->getName(),
+ 'search' => 'bo',
+ '--limit' => 1,
+ ]);
+
+ $this->assertContains('1/3 (filtered) user(s) displayed.', $tester->getDisplay());
}
}