diff options
author | LEZY Thomas <thomas.lezy@ensimag.grenoble-inp.fr> | 2014-06-13 11:38:02 +0200 |
---|---|---|
committer | Matt Friedman <maf675@gmail.com> | 2016-02-29 08:13:42 -0800 |
commit | 50761104ba6590de86ec651b5679983eaf2ff600 (patch) | |
tree | 8633b312669ed1d69bff15f581fec8d6453b0cfe | |
parent | 0102fa3f2d051173762736b6a1a1ba15be466b15 (diff) | |
download | forums-50761104ba6590de86ec651b5679983eaf2ff600.tar forums-50761104ba6590de86ec651b5679983eaf2ff600.tar.gz forums-50761104ba6590de86ec651b5679983eaf2ff600.tar.bz2 forums-50761104ba6590de86ec651b5679983eaf2ff600.tar.xz forums-50761104ba6590de86ec651b5679983eaf2ff600.zip |
[ticket/12684] Add doc blocks and test file for user:add
PHPBB3-12684
-rw-r--r-- | phpBB/phpbb/console/command/user/add.php | 35 | ||||
-rw-r--r-- | tests/console/user/add_test.php | 138 | ||||
-rw-r--r-- | tests/console/user/fixtures/config.xml | 43 |
3 files changed, 215 insertions, 1 deletions
diff --git a/phpBB/phpbb/console/command/user/add.php b/phpBB/phpbb/console/command/user/add.php index e7a94a74da..e3f8243c02 100644 --- a/phpBB/phpbb/console/command/user/add.php +++ b/phpBB/phpbb/console/command/user/add.php @@ -35,6 +35,9 @@ class add extends \phpbb\console\command\command * Construct method * * @param \phpbb\user $user The user object used for language information + * @param \phpbb\db\driver\driver_interface $db The database in wich will be inserted the user + * @param \phpbb\config\config $config The config object used to get default language and timezone + * @param \phpbb\passwords\manager $password_manager The password manager used to store the user's password */ public function __construct(\phpbb\user $user, \phpbb\db\driver\driver_interface $db, \phpbb\config\config $config, \phpbb\passwords\manager $password_manager) { @@ -63,6 +66,17 @@ class add extends \phpbb\console\command\command ; } + /** + * Executes the command user:add + * + * If not given in option, asks the username, password and email. + * Then a new user is added in the database, with language and timezone found in the $config passed to the constructor, and the group_id found in the database. + * + * @param InputInterface $input The input stream used to get the options + * @param OutputInterface $output The output stream, used to print messages + * + * @return int 0 if all is well, 1 if a database error occured while trying to get the group_id + */ protected function execute(InputInterface $input, OutputInterface $output) { $dialog = $this->getHelperSet()->get('dialog'); @@ -123,6 +137,17 @@ class add extends \phpbb\console\command\command return 0; } + /** + * Get the password + * + * Asks a password to the user and asks for confirmation. + * This is repeted while the two are not the same + * + * @param OutputInterface $output The output stream, where messages are printed + * @param Symfony\Component\Console\Helper\DialogHelper $dialog The dialog helper used to get answers to questions asked to the user + * + * @return null + */ protected function get_password($output, $dialog) { $current_user = $this->user; @@ -147,6 +172,14 @@ class add extends \phpbb\console\command\command ); } + /** + * Get the group id + * + * Go and find in the database the group_id corresponding to 'REGISTERED' + * + * @throws RunTimeException if the group id does not exist in database. + * @return null + */ protected function get_group_id() { $sql = 'SELECT group_id @@ -157,7 +190,7 @@ class add extends \phpbb\console\command\command $row = $this->db->sql_fetchrow($result); $this->db->sql_freeresult($result); - if (!$row) + if (!$row || !$row['group_id']) { throw new \RunTimeException($this->user->lang('NO_GROUP')); } diff --git a/tests/console/user/add_test.php b/tests/console/user/add_test.php new file mode 100644 index 0000000000..6c28c46815 --- /dev/null +++ b/tests/console/user/add_test.php @@ -0,0 +1,138 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +use Symfony\Component\Console\Application; +use Symfony\Component\Console\Tester\CommandTester; +use phpbb\console\command\user\add; + +require_once dirname(__FILE__) . '/../../../phpBB/includes/functions_user.php'; +require_once dirname(__FILE__) . '/../../../phpBB/includes/functions.php'; +require_once dirname(__FILE__) . '/../../../phpBB/includes/utf/utf_tools.php'; + +class phpbb_console_command_user_add_test extends phpbb_database_test_case +{ + protected $db; + protected $config; + protected $user; + protected $passwords_manager; + protected $command_name; + protected $dialog; + + public function getDataSet() + { + return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/config.xml'); + } + + public function setUp() + { + global $db, $config, $phpbb_dispatcher, $phpbb_container; + + $phpbb_dispatcher = new phpbb_mock_event_dispatcher(); + $phpbb_container = new phpbb_mock_container_builder(); + $phpbb_container->set('cache.driver', new phpbb_mock_cache()); + + $config = $this->config = new \phpbb\config\config(array( + 'board_timezone' => 'UTC', + 'default_lang' => 'en', + )); + set_config(null, null, null, $this->config); + set_config_count(null, null, null, $this->config); + + $db = $this->db = $this->new_dbal(); + + $this->user = $this->getMock('\phpbb\user'); + $this->user->method('lang')->will($this->returnArgument(0)); + + $driver_helper = new \phpbb\passwords\driver\helper($this->config); + $passwords_drivers = array( + 'passwords.driver.bcrypt_2y' => new \phpbb\passwords\driver\bcrypt_2y($this->config, $driver_helper), + 'passwords.driver.bcrypt' => new \phpbb\passwords\driver\bcrypt($this->config, $driver_helper), + 'passwords.driver.salted_md5' => new \phpbb\passwords\driver\salted_md5($this->config, $driver_helper), + 'passwords.driver.phpass' => new \phpbb\passwords\driver\phpass($this->config, $driver_helper), + ); + + $passwords_helper = new \phpbb\passwords\helper; + $this->passwords_manager = new \phpbb\passwords\manager($this->config, $passwords_drivers, $passwords_helper, array_keys($passwords_drivers)); + + parent::setUp(); + } + + public function test_add_no_dialog() + { + $command_tester = $this->get_command_tester(); + + $this->assertEquals(2, $this->get_user_id('Admin')); + + $command_tester->execute(array( + 'command' => $this->command_name, + '--username' => 'foo', + '--password' => 'bar', + '--email' => 'foo@test.com' + )); + + $this->assertNotEquals(null, $this->get_user_id('foo')); + $this->assertContains('SUCCESS_ADD_USER', $command_tester->getDisplay()); + } + + public function test_add_dialog() + { + $command_tester = $this->get_command_tester(); + + $this->assertEquals(2, $this->get_user_id('Admin')); + + $this->dialog->setInputStream($this->getInputStream("bar\npass\npass\nbar@test.com\n")); + + $command_tester->execute(array( + 'command' => $this->command_name, + )); + + $this->assertNotEquals(null, $this->get_user_id('bar')); + $this->assertContains('SUCCESS_ADD_USER', $command_tester->getDisplay()); + + } + + public function get_command_tester() + { + $application = new Application(); + $application->add(new add($this->user, $this->db, $this->config, $this->passwords_manager)); + + $command = $application->find('user:add'); + $this->command_name = $command->getName(); + $this->dialog = $command->getHelper('dialog'); + return new CommandTester($command); + } + + public function get_user_id($username) + { + $sql = 'SELECT user_id + FROM ' . USERS_TABLE . ' + WHERE ' . 'username = ' . "'" . $username . "'"; + + $result = $this->db->sql_query($sql); + + $row = $this->db->sql_fetchrow($result); + + $this->db->sql_freeresult($result); + + return $row['user_id']; + } + + public function getInputStream($input) + { + $stream = fopen('php://memory', 'r+', false); + fputs($stream, $input); + rewind($stream); + + return $stream; + } +} diff --git a/tests/console/user/fixtures/config.xml b/tests/console/user/fixtures/config.xml new file mode 100644 index 0000000000..fed30dc20d --- /dev/null +++ b/tests/console/user/fixtures/config.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<dataset> + <table name="phpbb_users"> + <column>user_id</column> + <column>user_permissions</column> + <column>username</column> + <column>username_clean</column> + <column>user_sig</column> + <row> + <value>1</value> + <value></value> + <value>Guest</value> + <value>guest</value> + <value></value> + </row> + <row> + <value>2</value> + <value></value> + <value>Admin</value> + <value>admin</value> + <value></value> + </row> + <row> + <value>3</value> + <value></value> + <value>Test</value> + <value>test</value> + <value></value> + </row> + </table> + <table name="phpbb_groups"> + <column>group_id</column> + <column>group_name</column> + <column>group_type</column> + <column>group_desc</column> + <row> + <value>1</value> + <value>REGISTERED</value> + <value>3</value> + <value>foobar</value> + </row> + </table> +</dataset> |